lucene6+HanLP中文分词

1.前言

前一阵把博客换了个模版,模版提供了一个搜索按钮,这让我想起一直以来都想折腾的全文搜索技术,于是就用lucene6.2.1加上HanLP的分词插件做了这么一个模块CSearch。
效果看这里:https://chulung.com/search
源码:CSearch

2.关于分词

索引的一个核心功能便是分词,lucene自带的分词是基于英语的,所以中文分词用其他插件比较好。

网上很多都是推荐IK-Analyzer,不过这个插件很久没更新了,用lucene6的话重构才能用:IK-Analyzer-6,这个是我重构的版本。
但在查阅分词的方面的资料的时候无意中发现了HanLP(Han Language Processing),这个汉语言处理包比较新,提供了lucene的分词插件,资料什么的也更详细,所以我就更换过来了。

3.代码中的一些坑

在敲代码时还是遇到了一些比较坑的问题,由于网上基本没有lucene6的中文教程,老的lucene3,4那时的教程很多兼容不上了。

  • 实时查询的DirectoryReader获取
    使用IndexWriter新增索引后存在搜索不到的问题,这是因为在getReader时要使用openIfChanged方法,才能保证做到更新后实时查询。
private DirectoryReader getReader() throws Exception {
    if (reader==null){
        this.reader=DirectoryReader.open(fsDirectory);
    }
    //有更新则重新打开,读入新增加的增量索引内容,满足实时查询需求
    DirectoryReader newReader = DirectoryReader.openIfChanged((DirectoryReader)reader,  getIndexWriter(), false);
    if (newReader != null) {
        reader.close();
        reader = newReader;
    }
    return reader;
}
  • 高亮插件结果错位问题
    文档中的\r\n字符会导致高亮结果错1位,比如高亮”插件”会变成高”亮插”件,因此需要replace空白字符。
String context = doc.get(CONTEXT).replaceAll("\\s*", "");
String highContext = highlighter.getBestFragment(analyzer, CONTEXT, context);

作者:chulung

原文链接:https://chulung.com/article/53

本文由MetaCLBlog于2016-11-21 01:00:04自动同步至cnblogs

false

时间: 2024-12-25 15:59:37

lucene6+HanLP中文分词的相关文章

2 中文分词工具 jieba 和 HanLP

前言 中文分词有很多种,常见的比如有中科院计算所 NLPIR.哈工大 LTP.清华大学 THULAC .斯坦福分词器.Hanlp 分词器.jieba 分词.IKAnalyzer 等.这里针对 jieba 和 HanLP 分别介绍不同场景下的中文分词应用. jieba 分词 jieba 安装 (1)Python 2.x 下 jieba 的三种安装方式,如下: 全自动安装:执行命令 easy_install jieba 或者 pip install jieba / pip3 install jieb

中文分词工具简介与安装教程(jieba、nlpir、hanlp、pkuseg、foolnltk、snownlp、thulac)

2.1 jieba 2.1.1 jieba简介 Jieba中文含义结巴,jieba库是目前做的最好的python分词组件.首先它的安装十分便捷,只需要使用pip安装:其次,它不需要另外下载其它的数据包,在这一点上它比其余五款分词工具都要便捷.另外,jieba库支持的文本编码方式为utf-8. Jieba库包含许多功能,如分词.词性标注.自定义词典.关键词提取.基于jieba的关键词提取有两种常用算法,一是TF-IDF算法:二是TextRank算法.基于jieba库的分词,包含三种分词模式: 精准

【HanLP】HanLP中文自然语言处理工具实例演练

HanLP中文自然语言处理工具实例演练 作者:白宁超 2016年11月25日13:45:13 摘要:HanLP是hankcs个人完成一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用.HanLP具备功能完善.性能高效.架构清晰.语料时新.可自定义的特点. 在提供丰富功能的同时,HanLP内部模块坚持低耦合.模型坚持惰性加载.服务坚持静态提供.词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的语料.笔者坚定支持开源的项目,本文初衷是使用自然语言

11大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断. 11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /** * 获取文本的所有分词结果, 对比不同分词器结果 * @author 杨尚川 */ public interface WordSegmenter {

中文分词学习整理

主要分为两大类 1. 字符串匹配(扫描字符串),发现子串与词匹配,就算是匹配 这类分词通常加入一些启发式规则,比如“正向/反向最大匹配”,“长词优先”等策略. 优点:速度快.O(n)时间复杂度. 缺点:歧义和未登陆词处理不好. 歧义的例子很简单"长春市/长春/药店" "长春/市长/春药/店". 未登录词即词典中没有出现的词,当然也就处理不好. ikanalyzer,paoding 等就是基于字符串匹配的分词 2. 基于统计及机器学习 这类分词基于人工标注的词性和统计

Hanlp中文自然语言处理入门基础知识

自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部分.这个星球上有许多生物拥有超过人类的视觉系统,但只有人类才拥有这么高级的语言. 自然语言处理的目标是让计算机处理或说"理解"自然语言,以完成有意义的任务,比如订机票购物或QA等.完全理解和表达语言是极其困难的,完美的语言理解等效于实现人工智能. 自然语言处理涉及的几个层次: 作为输入一共有两个来源,语音与文本.所以第一级是语音

PHP中文分词扩展 SCWS

1.scws简介 SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统). 这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成词. 词是中文的最小语素单位,但在书写时并不像英语会在词之间用空格分开, 所以如何准确并快速分词一直是中文分词的攻关难点. SCWS 采用纯 C 语言开发,不依赖任何外部库函数,可直接使用动态链接库嵌入应用程序, 支持的中文编码包括 GBK.UTF-8 等.此外还提供了 PHP 扩

Elasticsearch安装中文分词插件ik

Elasticsearch默认提供的分词器,会把每个汉字分开,而不是我们想要的根据关键词来分词.例如: curl -XPOST "http://localhost:9200/userinfo/_analyze?analyzer=standard&pretty=true&text=我是中国人" 我们会得到这样的结果: { tokens: [ { token: text start_offset: 2 end_offset: 6 type: <ALPHANUM>

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse