lucene 中文分词?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lucene 中文分词?相关的知识,希望对你有一定的参考价值。

我现在用的lucene3.0.1
1、StandardAnalyzer不能用于中文分词吗?
2、ChineseAnalyzer这个分词器在没有在lucene核心包里面,是否需要下载单独的jar包?

StandardAnalyzer是可以用于中文分词,但它是一元分词,机械地将一个汉字做为一个词元来切分的,速度慢不说,语义也没有了,当然应该能保证查全率,呵呵.
ChineseAnalyzer比它好一点,也相当于一元分词。

lucene的第三方分词包有很多,上面两个不建议使用。可以去了解:
IK_CAnalyzer
庖丁解牛分词器
JE分词器
参考技术A StandardAnalyzer是单词切分
ChineseAnalyzer效果不好。

建议用庖丁或者 mmseg4j ,开源的,直接能用
参考技术B 这两个对中文分词效果都不是很好!!现在我也在研究lucene呢!!我用庖丁解牛分词。paoding分词这个不错。推荐你试一下!

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

以上是关于lucene 中文分词?的主要内容,如果未能解决你的问题,请参考以下文章

搜索引擎系列四:Lucene提供的分词器IKAnalyze中文分词器集成

IKAnalyzer结合Lucene实现中文分词

lucene6+HanLP中文分词

lucene三---中文分词器

lucene三---中文分词器

向Lucene增加中文分词功能