前言:
而今姐妹们对“分词搜索引擎”可能比较看重,兄弟们都想要分析一些“分词搜索引擎”的相关文章。那么小编在网上汇集了一些关于“分词搜索引擎””的相关资讯,希望大家能喜欢,小伙伴们一起来学习一下吧!简介
分词是把全文本拆分成一系列单词的过程。
分词器是用来实现分词的,分词由三部分组成:字符过滤器、分词器和Token过滤器。
字符过滤器:对原始文本进行过滤;
分词器:按照一定规则进行分词;
Token过滤器:对分词进行处理,转小写,移除停用词,添加同义词。
Analyzer 类图StandardAnalyzer分词
Lucene提供的标准中文分词器 StandardAnalyzer只能进行简单的一元分词,一元分词以一个字为单位进行语义切分,这种本来为西文所设计的分词器,用于中文的分词时经常会出现语义不准确的情况。StandardAnalyzer分词器是按照中文一个字一个字地进行分词,效率比较低。如:“我是一个中国人”,效果:“我”、“是”、“一”、“个”、“中”、“国”、“人”。
不同的Lucene分析器Analyzer,它对TokenStream进行分词的方法是不同的,这需要根据具体的语言来选择。比如英文,一般是通过空格来分割词条,而中文汉字则不能通过这种方式,最简单的方式就是单个汉字作为一个词条。
TokenStream是通过从设备或者其他地方获取数据源而构造的一个流,我们要执行分词的动作,应该对这个TokenStream进行操作。
public class AnalyzerTest { @Test public void standardAnalyzer() throws Exception { String content = "我是一个中国人"; Analyzer analyzer = new StandardAnalyzer(); TokenStream tokenStream = analyzer.tokenStream("content", content); tokenStream.reset(); CharTermAttribute cta = tokenStream.getAttribute(CharTermAttribute.class); while (tokenStream.incrementToken()) { System.out.println(cta); } }}
输出结果:
我
是
一
个
中
国
人
由此可以得知,StandardAnalyzer采用的是一元分词,即字符串以一个字为单位进行切割。
CJKAnalyzer分词器
按两个字进行切分,把相邻的两个字组成词分解出来,效率也比较低。并且不少状况下分的词不对。如:“我是一个中国人”,效果:“我是”、“是一”、“一个”、“个中”、“中国”、“国人”。通过分词结果可以看到,CJKAnalyzer 采用的是二元分词,即字符串以两个字为单位进行切割。
@Testpublic void CJKAnalyzer() throws Exception { Analyzer analyzer = new CJKAnalyzer(); String content = "我是一个中国人"; TokenStream tokenStream = analyzer.tokenStream("content", content); tokenStream.reset(); CharTermAttribute cta = tokenStream.getAttribute(CharTermAttribute.class); while (tokenStream.incrementToken()) { System.out.println(cta); }}SmartChineseAnalyzer分词器
analyzers-smartcn 是一个用于简体中文索引词的 Analyzer。尝试使用中文文本分割成单词作为标记。如:“我是一个中国人”,效果:“我”、“是”、“一个”、“中国”、“人”。
@Testpublic void SmartChineseAnalyzer() throws Exception { Analyzer analyzer = new SmartChineseAnalyzer(); String content = "我是一个中国人"; TokenStream tokenStream = analyzer.tokenStream("content", content); tokenStream.reset(); CharTermAttribute cta = tokenStream.getAttribute(CharTermAttribute.class); while (tokenStream.incrementToken()) { System.out.println(cta); }}IKAnalyzer分词器
按某种算法构造词,而后去匹配已建好的词库集合,若是匹配到就切分出来成为词语。一般词库分词被认为是最理想的中文分词算法。如:“我是一个中国人”,效果:“一个中国”、“一个”、“个中”、“中国人”、“中国”、“国人”。可以看到,分词效果比单纯的一元或者二元分词要好很多。
@Testpublic void ikAnalyzer() throws Exception { IKAnalyzer analyzer = new IKAnalyzer(); String content = "我是一个中国人,我热爱我的国家"; TokenStream tokenStream = analyzer.tokenStream("content", content); tokenStream.reset(); CharTermAttribute cta = tokenStream.getAttribute(CharTermAttribute.class); while (tokenStream.incrementToken()) { System.out.println(cta); }}
输出结果:
加载扩展词典:ext.dic
加载扩展停止词典:stopword.dic
一个中国
一个
个中
中国人
中国
国人
标签: #分词搜索引擎