IKAnalyzer 中文分詞的不同版本切詞方式
最近公司在做一個題庫的功能,需要用到 中文分詞和公式分詞的工具,最開始用 IKAnalyzer 2012F 版本 + lunece 6.5.1做了一版中文分詞工具。具體如下:
一、IKAnalyzer 2012F + lunece 6.5.1 實現中文分詞
public static List<String> analysisByIK(Analyzer analyzer,String field, String content){
if(StringUtils.isNullOrEmpty(content)){
return null;
}
TokenStream ts = null;
try {
ts = analyzer.tokenStream(field, new StringReader(content));
CharTermAttribute term = ts.addAttribute(CharTermAttribute.class);
ts.reset();
List<String> vocabularies = new ArrayList<>();
while (ts.incrementToken()) {
vocabularies.add(term.toString());
}
ts.end();
return vocabularies;
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
if (ts != null) {
try {
ts.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
呼叫方式:
String str = "已知三角形ABC中,角A等於角B加角C,那麼三角形ABC是 A、銳角三角形 B、直角三角形 C、鈍角三角形 D、不能確定";
Analyzer analyzer = new IKAnalyzer(true);
ikList = analysisByIK(analyzer, "myfield", str);
listAnalyzer.addAll(ikList);
輸出結果listAnalyzerd:
[已知, 三角形, abc, 中, 角, a, 等於, 角, b, 加, 角, c, 那麼, 三角形, abc, 是, a, 銳角三角形, b, 直角三角形, c, 鈍角三角形, d, 不能, 確定]
但是由於公式切詞是 原來公司大牛寫的,在滿足公式切詞的條件下,中文切詞的IKAnalyzer 2012F與其不相容。於是嘗試其他版本,最終決定用 IKAnalyzer 3.2.8 實現了相容。
二、IKAnalyzer 3.2.8 + lunece 3.1.0 相容版本
public static List<String> analysisByIK3Point2(Analyzer analyzer,String field, String content) throws Exception{
if(StringUtils.isNullOrEmpty(content)){
return null;
}
List<String> list = new ArrayList<>();
Reader reader = new StringReader(content);
TokenStream stream = (TokenStream)analyzer.tokenStream(field, reader);
//新增工具類 注意:以下這些與之前lucene2.x版本不同的地方
TermAttribute termAtt = (TermAttribute)stream.addAttribute(TermAttribute.class);
OffsetAttribute offAtt = (OffsetAttribute)stream.addAttribute(OffsetAttribute.class);
// 迴圈列印出分詞的結果,及分詞出現的位置
while(stream.incrementToken()){
list.add(termAtt.term());
// System.out.println(termAtt.term());
}
return list;
}
呼叫方式:
String str = "已知三角形ABC中,角A等於角B加角C,那麼三角形ABC是 A、銳角三角形 B、直角三角形 C、鈍角三角形 D、不能確定";
Analyzer analyzer = new IKAnalyzer(true);
ikList = analysisByIK3Point2(analyzer, "myfield", str);
listAnalyzer.addAll(ikList);
輸出結果:
[已知, 三角形, abc, 中, 角, a, 等於, 角, b, 加, 角, c, 那麼, 三角形, abc, 是, a, 銳角三角形, b, 直角三角形, c, 鈍角三角形, d, 不能, 確定]
即使用不同版本實現相同功能效果。 主要是 因為IKAnalyzer 2012F 依賴Analyzer的tokenStream是final方法,但是公式分詞用到的tokenSteam方法是抽象方法。兩者衝突了,所以考慮去做相容。
相關文章
- elastcisearch中文分詞器各個版本AST中文分詞
- #Elasticsearch中文分詞器 #IK分詞器 @FDDLCElasticsearch中文分詞
- 中文分詞原理及常用Python中文分詞庫介紹中文分詞Python
- 分詞工具Hanlp基於感知機的中文分詞框架HanLP中文分詞框架
- 古詩詞 中文 分詞 自動化分詞
- NLP之中文分詞中文分詞
- 中文分詞技術中文分詞
- 中文分詞工具之基於字標註法的分詞中文分詞
- python 中文分詞包 jiebaPython中文分詞Jieba
- pyhanlp 中文詞性標註與分詞簡介HanLP詞性標註分詞
- Hanlp分詞之CRF中文詞法分析詳解HanLP分詞CRF詞法分析
- Coreseek-帶中文分詞的Sphinx中文分詞
- HanLP中文分詞Lucene外掛HanLP中文分詞
- 如何用Python做中文分詞?Python中文分詞
- SCWS PHP 中文簡易分詞PHP分詞
- 中文分詞器,整理自Ai中文分詞AI
- 中文分詞研究難點-詞語劃分和語言規範中文分詞
- 中文分詞的探索,CRF(條件隨機場)和HMM(隱馬爾可夫模型)用於分詞的對比,以及中文分詞的評估中文分詞CRF條件隨機場HMM隱馬爾可夫模型
- 使用cjieba(結巴分詞庫)實現php擴充套件中文分詞JiebaPHP套件中文分詞
- 中文搜尋引擎技術揭密:中文分詞中文分詞
- python 實現中文分詞統計Python中文分詞
- 深度有趣 | 15 淺談中文分詞中文分詞
- 史上最全中文分詞工具整理中文分詞
- python使用jieba實現中文文件分詞和去停用詞PythonJieba分詞
- HanLP分詞工具中的ViterbiSegment分詞流程HanLP分詞Viterbi
- Python:Python 中 jieba 庫的使用(中文分詞)PythonJieba中文分詞
- 基於 HanLP 的 ES 中文分詞外掛HanLP中文分詞
- [Python] 基於 jieba 的中文分詞總結PythonJieba中文分詞
- 分詞分詞
- NLP第3章 中文分詞技術中文分詞
- elasticsearch教程--中文分詞器作用和使用Elasticsearch中文分詞
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- 使用Docker快速安裝部署ES和Kibana並配置IK中文分詞器以及自定義分詞擴充詞庫Docker中文分詞
- 復旦大學提出中文分詞新方法,Transformer連有歧義的分詞也能學中文分詞ORM
- MapReduce實現與自定義詞典檔案基於hanLP的中文分詞詳解HanLP中文分詞
- 北大開源了中文分詞工具包:準確率遠超THULAC、結巴分詞!中文分詞
- 北大開源全新中文分詞工具包:準確率遠超THULAC、結巴分詞中文分詞
- 中文地址智慧分詞演算法-Java版分詞演算法Java
- Java中文分片語件 - word分詞(skycto JEEditor)Java分詞