基于HanLP,支持包括Solr(7.x)在内的任何基于Lucene(7.x)的系统。

Maven

<dependency>

<groupId>com.hankcs.nlp</groupId>

<artifactId>hanlp-lucene-plugin</artifactId>

<version>1.1.6</version>

</dependency>

Solr快速上手

1.将hanlp-portable.jar和hanlp-lucene-plugin.jar共两个jar放入${webapp}/WEB-INF/lib下。(或者使用mvn package对源码打包,拷贝target/hanlp-lucene-plugin-x.x.x.jar到${webapp}/WEB-INF/lib下)

2. 修改solr core的配置文件${core}/conf/schema.xml:

<fieldType name="text_cn" class="solr.TextField">

<analyzer type="index">

<tokenizer class="com.hankcs.lucene.HanLPTokenizerFactory" enableIndexMode="true"/>

</analyzer>

<analyzer type="query">

<!-- 切记不要在query中开启index模式 -->

<tokenizer class="com.hankcs.lucene.HanLPTokenizerFactory" enableIndexMode="false"/>

</analyzer>

</fieldType>

<!-- 业务系统中需要分词的字段都需要指定type为text_cn -->

<field name="my_field1" type="text_cn" indexed="true" stored="true"/>

<field name="my_field2" type="text_cn" indexed="true" stored="true"/>

· 如果你的业务系统中有其他字段,比如location,summary之类,也需要一一指定其type="text_cn"。切记,否则这些字段仍旧是solr默认分词器。

· 另外,切记不要在query中开启indexMode,否则会影响PhaseQuery。indexMode只需在index中开启一遍即可。

高级配置

目前本插件支持如下基于schema.xml的配置:

更高级的配置主要通过class path下的hanlp.properties进行配置,请阅读HanLP自然语言处理包文档以了解更多相关配置,如:

0.用户词典

1.词性标注

2.简繁转换

3.……

停用词与同义词

推荐利用Lucene或Solr自带的filter实现,本插件不会越俎代庖。 一个示例配置如下:

调用方法

在Query改写的时候,可以利用HanLPAnalyzer分词结果中的词性等属性,如

String text = "中华人民共和国很辽阔";

for (int i = 0; i < text.length(); ++i)

{

System.out.print(text.charAt(i) + "" + i + " ");

}

System.out.println();

Analyzer analyzer = new HanLPAnalyzer();

TokenStream tokenStream = analyzer.tokenStream("field", text);

tokenStream.reset();

while (tokenStream.incrementToken())

{

CharTermAttribute attribute = tokenStream.getAttribute(CharTermAttribute.class);

// 偏移量

OffsetAttribute offsetAtt = tokenStream.getAttribute(OffsetAttribute.class);

// 距离

PositionIncrementAttribute positionAttr = tokenStream.getAttribute(PositionIncrementAttribute.class);

// 词性

TypeAttribute typeAttr = tokenStream.getAttribute(TypeAttribute.class);

System.out.printf("[%d:%d %d] %s/%s\n", offsetAtt.startOffset(), offsetAtt.endOffset(), positionAttr.getPositionIncrement(), attribute, typeAttr.type());

}

在另一些场景,支持以自定义的分词器(比如开启了命名实体识别的分词器、繁体中文分词器、CRF分词器等)构造HanLPTokenizer,比如:

tokenizer = new HanLPTokenizer(HanLP.newSegment()

.enableJapaneseNameRecognize(true)

.enableIndexMode(true), null, false);

tokenizer.setReader(new StringReader("林志玲亮相网友:确定不是波多野结衣?"));

文章摘自:2019 github

最新文章

  1. 我的Git手册
  2. C#获取IP和整数IP方法
  3. ejs模板中的四种表达式输出形式
  4. java集合-HashTable
  5. maven总结1
  6. CodeForces 429 B Working out(递推dp)
  7. HDU 1114 Piggy-Bank (poj1384)
  8. thinkphp验证码点击更换js实现
  9. ubuntu dash
  10. 终于知道如何使Tab控件的不出现白边的方法了
  11. 团队作业4——第一次项目冲刺 tHiRd DaY
  12. python进行各类API的使用
  13. android 获取wifi列表,如果你忽略了这个细节,可能你的软件会崩溃
  14. Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator
  15. boto3库限速
  16. python基础篇_003_函数
  17. Python实现多线程调用GDAL执行正射校正
  18. 微信小程序学习笔记以及VUE比较
  19. Mockplus3.5.0.1新增标注功能
  20. 【Android】21.4 图片动画缩放示例

热门文章

  1. sprindmvc
  2. log4j:WARN Please initialize the log4j system properly解决办法
  3. 解决使用mybatis分页插件PageHelper的一个报错问题
  4. puthon文件头
  5. MAVEN项目不扫描mybatis的mapper.xml问题
  6. 关于centos7无法上网的问题
  7. v-echart 按需加载
  8. vue 线上不支持put方法
  9. redis命令String类型(四)
  10. where 常用条件范例