Lucene的Smart CN实现分词停用词扩展词
Posted 全民代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene的Smart CN实现分词停用词扩展词相关的知识,希望对你有一定的参考价值。
Lucene 中提供了 SmartCN 为中文提供分词功能,实际应用中还会涉及到停用词、扩展词(特殊词、专业词)等,因此本文将聚焦在 SmartCN 而暂时不考虑其他中文分词类库。
1 简介
analyzers-smartcn 是一个用于简体中文索引词的 Analyzer。但是需要注意的它提供的 API 是试验性的,后续版本中可能进行更改。
可以它包含了如下两部分:
org.apache.lucene.analysis.cn.smart 用于简体中文的分析器,用来建立索引。
org.apache.lucene.analysis.cn.smart.hhmm SmartChineseAnalyzer 隐藏了 Hidden Model 包。
analyzers-smartcn 中包含了 3 种分析器,它们用不同的方式来分析中文:
StandardAnalyzer 会单个汉字来作为标记。例如:“中台的作用”分析后成为:中-台-的-作-用
CJKAnalyzer 它在 analyzers/cjk 包中,使用相邻两个汉字作为标记。“我是中国人”分析后成为:中台-的作-用
SmartChineseAnalyzer 尝试使用中文文本分割成单词作为标记。“我是中国人”分析后成为:中台-的-作用
很显然 SmartChineseAnalyzer 更符合日常搜索的使用场景。
2 SmartChineseAnalyzer
上面的例子展示了 SmartChineseAnalyzer 对中文的处理,实际上 SmartChineseAnalyzer 同时还支持中英文混合排版。
SmartChineseAnalyzer 使用了概率知识来获取最佳的中文分词。文本会首先被分割成字句,再将字句分割成单词。分词基于 Hidden Markov Model。使用大型训练语料来计算中文单词频率概率。
SmartChineseAnalyzer 需要一个词典来提供统计数据。它自带了一个现成的词典。包含的词典数据来自 ICTCLAS1.0。
SamrtChineseAnalyzer 提供了 3 种构造函数,通过构造函数能够控制是否使用 SmartChineseAnalyzer 自带的停用词,以及使用外部的停用词。
通过实际测试,我们可以了解分词结果,分词代码如下:
String text = "K8s 和 YARN 都不够好,全面解析 Facebook 自研流处理服务管理平台" ;
Analyzer analyzer = new SmartChineseAnalyzer ( ) ;
TokenStream tokenStream = analyzer . tokenStream ( "testField" , text ) ;
OffsetAttribute offsetAttribute = tokenStream . addAttribute ( OffsetAttribute . class ) ;
tokenStream . reset ( ) ;
List < String > tokens = new ArrayList < > ( ) ; while ( tokenStream . incrementToken ( ) ) {
tokens . add ( offsetAttribute . toString ( ) ) ; }
tokenStream . end ( ) ;
String format = String . format ( "tokens:%s" , tokens ) ;
System . out . println ( format ) ;以上是关于Lucene的Smart CN实现分词停用词扩展词的主要内容,如果未能解决你的问题,请参考以下文章