HanLP中文分词Lucene插件

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

 


 

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

8ef762d1ceb3659318b95cf3735beea123aa50be

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的配置:


ea0e81e520323d001eb1dafcb1cb8390a1dbb804

 

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

 

0.用户词典

1.词性标注

2.简繁转换

3.……

停用词与同义词

 

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


b273aaf59dee3169a3c65e6e23bc058c1c2dc158

 

调用方法

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

 

String text = "zhong hua ren min gong he guo很辽阔";

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

 

 

 

相关文章
|
运维 分布式计算 安全
云计算时代的DCI技术
实现数据中心间互通的纽带——DCI网络
云计算时代的DCI技术
|
JavaScript 前端开发 安全
JavaScript中的循环控制:while、do-while与for详解
【4月更文挑战第7天】本文探讨JavaScript的三种主要循环结构:while、do-while和for。while循环在满足条件时执行代码块,注意避免无限循环;do-while循环至少执行一次,适合先执行后判断的场景;for循环结合初始化、条件和迭代,适合遍历。理解每种循环的特点和适用场景,结合编程技巧,如使用break和continue,选择合适的循环方式,能提升代码效率和可读性。记得关注循环性能和避免不必要的计算。
384 0
|
自然语言处理 数据可视化 Java
NLP6:stanford Parser中文分词
NLP6:stanford Parser中文分词
466 0
|
4月前
|
NoSQL Java 数据库连接
SpringBoot框架
Spring Boot 是 Spring 家族中最流行的框架,旨在简化 Spring 应用的初始搭建与开发。它通过自动配置、起步依赖和内嵌服务器三大核心功能,大幅减少配置复杂度,提升开发效率。开发者可快速构建独立运行的 Web 应用,并支持多种数据访问技术和第三方集成。
|
10月前
|
人工智能
RAG - 拒识模块
在RAG(Retrieval-Augmented Generation)模型中,拒识模块(或称为拒绝模块,Reject Module)是一个重要的组成部分,旨在提高生成模型在面对不相关查询或信息时的鲁棒性。RAG模型结合了检索和生成两种能力,通过在生成过程中引入外部文档来增强生成的质量和准确性。
633 2
|
监控 网络协议 安全
socket开发遇到的问题及注意事项实战
socket开发遇到的问题及注意事项实战
246 1
|
JSON 文字识别 小程序
UNIAPP小程序OCR识别
UNIAPP小程序OCR识别
581 0
UNIAPP小程序OCR识别
|
搜索推荐 安全 数据安全/隐私保护
SearXNG与LLM强强联合:打造用户隐私保护的智能搜索解答流程,隐私无忧,搜索无忧
【8月更文挑战第9天】SearXNG与LLM强强联合:打造用户隐私保护的智能搜索解答流程,隐私无忧,搜索无忧
SearXNG与LLM强强联合:打造用户隐私保护的智能搜索解答流程,隐私无忧,搜索无忧
|
5G 数据安全/隐私保护
DSSS、CCK 和 OFDM 调制方案
【8月更文挑战第23天】
1882 0
|
搜索推荐 人机交互 项目管理
「UCD」用户体验设计
【7月更文挑战第3天】
443 5