基于IKAnalyzer搭建分词服务

摘要:
根据综合评估,前端分词还需要基于IK分词设备。IKAnalyzer服务已停止更新,Lucene支持仅测试到4.x.x版本,因此在使用IK分词系统时需要解决一些异常。北京优衣库“;Analyzeranalyzer=newIKAnalyzer;StringReaderreader=newStringReader;尝试{TokenStreamtokenStream=analyzer.tokenStream;tokenStream.reset();而{CharTermAttributetermAttribute=tokenStream.getAttribute;System.out.println;}}捕获{e.printStackTrace();}分析仪。close();读者close();}}配置文件位于项目根目录和IK配置文件IKAnalyzer中。cfg添加了Xml,它指定了用户字典和停止词字典。每个单词占据一行,以UTF-8编码并以dic格式保存。注意:由于Lucene内核依赖于较低版本,因此需要使用项目中依赖Lucene的其他组件进行验证。
背景

前端高亮需要分词服务,nlp团队提供的分词服务需要跨域调用,而且后台数据索引使用的IK分词。综合评价,前端分词也需要基于IK分词器。
IKAnalyzer服务已经停止更新,且对Lucene支持仅测试到4.x.x版本(6.x.x会出现异常),因此使用IK分词器时需要解决一些异常。

依赖

项目以及maven构建,需要指定IK依赖以及Lucene依赖如下:

<dependency>
   <groupId>com.janeluo</groupId>
   <artifactId>ikanalyzer</artifactId>
   <version>2012_u6</version>
</dependency>
<dependency>
   <groupId>org.apache.lucene</groupId>
   <artifactId>lucene-core</artifactId>
   <version>4.10.4</version>
</dependency>
代码
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.IOException;
import java.io.StringReader;

/**
 * Created by liutingna on 2018/5/31.
 *
 * @author liutingna
 */
public class IKAnalyzerTest {
    public static void main(String[] args) throws Exception {
        String text = "lxw的大数据田地 -- lxw1234.com 专注Hadoop、Spark、Hive等大数据技术博客。 北京优衣库";
        Analyzer analyzer = new IKAnalyzer(false);
        StringReader reader = new StringReader(text);
        try {
            TokenStream tokenStream = analyzer.tokenStream("", reader);
            tokenStream.reset();
            while (tokenStream.incrementToken()) {
                CharTermAttribute termAttribute = tokenStream.getAttribute(CharTermAttribute.class);
                System.out.println(termAttribute.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        analyzer.close();
        reader.close();
    }
}
配置文件

在项目根目录下,加入IK配置文件IKAnalyzer.cfg.xml,其中指定用户字典和停用词字典。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">main.dic</entry>
    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">hit_stopwords.dic</entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

配置用户字典

添加main.dic文件,根据上述IK配置文件,该用户字典放在同级目录下。每个词占一行,使用UTF-8编码,并以dic格式保存。

配置停用词

添加hit_stopwords.dic文件,根据上述IK配置文件,该用户字典放在同级目录下。每个词占一行,使用UTF-8编码,并以dic格式保存。

注意事项

因为lucene-core依赖版本较低,因此需要与项目中其他对lucene有依赖的组件进行验证。
因为项目中使用的Elasticsearch对lucene依赖版本为6.x,造成与IK依赖的lucene(4.x)冲突,最终放弃使用了ik,而是用结巴分词代替。

常见问题
Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.Analyzer.createComponents(Ljava/lang/String;)Lorg/apache/lucene/analysis/Analyzer$TokenStreamComponents;
    at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:162)
    at com.inspur.analysis.kg.util.IKAnalyzerTest.main(IKAnalyzerTest.java:22)

【解决方法】:版本不匹配,可以换lucene-core版本,比如4.10.4

免责声明:文章转载自《基于IKAnalyzer搭建分词服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密CentOs安装cacti下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java 调用soap的简单例子(转载)

[代码] OrderProcessor.javaview sourceprint?001    package javaxml2;002     003    import java.io.IOException;004    import java.io.StringWriter;005    import java.net.MalformedURLEx...

关于Lucene全文检索相关技术

Lucene技术专门解决海量数据下的模糊搜索问题。 Lucene主要完成的是数据预处理、建立倒排索引,及搜索、排名、高亮显示等功能 全文检索相关词语概要: 单词和文档矩阵:          文档(Document):就是索引库中的一条原始数据,比如一个网页,一件商品          文档编号(DocID):索引库存储文档时,会根据文档创建时间,进行编号...

Lucene知识总结

(1) Lucene查询上只能提供近实时而非实时查询,原因是Segment在被flush或commit之前,数据保存在内存中,是不可被搜索的。 (2) IndexWriter提供的核心接口都是线程安全的,并且内部做了特殊的并发优化来优化多线程写入的性能。IndexWriter内部为每个线程都会单独开辟一个空间来写入,这块空间由DocumentsWriter...

php的下载与安装

一,进入到php的官方网站   https://www.php.net/   ,进入到下载页面: 选择 PHP 7.2.30 的Windows版本  具体的下载页面版本区分: 下载后,得到如下压缩包到如下目录   进入到php目录  D:wampphp7230 把文件  php.ini-development  复制一份,改名为  php.ini...

后台发送请求,HttpClient的post,get各种请求,带header的请求

HttpClient依赖jar包: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</...

centos 安装 apache2.4

1. centos 安装 apache2.4 安装基础依赖:# yum install gcc gcc-c++ glibc glibc-devel gd gd-devel zlib zlib-devel libtool-ltdl-devel flex autoconf automakeapache 需要依赖apr 和 apr-util、apr-iconv、...