IKAnalyzer使用不同版本中文分詞的切詞方式實現(xiàn)相同功能效果
最近公司在做一個題庫的功能,需要用到 中文分詞和公式分詞的工具,最開始用 IKAnalyzer 2012F 版本 + lunece 6.5.1做了一版中文分詞工具。
具體如下:
一、IKAnalyzer 2012F + lunece 6.5.1 實現(xiàn)中文分詞
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;
}
調(diào)用方式:
String str = "已知三角形ABC中,角A等于角B加角C,那么三角形ABC是 A、銳角三角形 B、直角三角形 C、鈍角三角形 D、不能確定"; Analyzer analyzer = new IKAnalyzer(true); ikList = analysisByIK(analyzer, "myfield", str); listAnalyzer.addAll(ikList);
輸出結(jié)果listAnalyzerd:
[已知, 三角形, abc, 中, 角, a, 等于, 角, b, 加, 角, c, 那么, 三角形, abc, 是, a, 銳角三角形, b, 直角三角形, c, 鈍角三角形, d, 不能, 確定]
但是由于公式切詞是 原來公司大牛寫的,在滿足公式切詞的條件下,中文切詞的IKAnalyzer 2012F與其不兼容。于是嘗試其他版本,最終決定用 IKAnalyzer 3.2.8 實現(xiàn)了兼容。
二、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);
//添加工具類 注意:以下這些與之前l(fā)ucene2.x版本不同的地方
TermAttribute termAtt = (TermAttribute)stream.addAttribute(TermAttribute.class);
OffsetAttribute offAtt = (OffsetAttribute)stream.addAttribute(OffsetAttribute.class);
// 循環(huán)打印出分詞的結(jié)果,及分詞出現(xiàn)的位置
while(stream.incrementToken()){
list.add(termAtt.term());
// System.out.println(termAtt.term());
}
return list;
}
調(diào)用方式:
String str = "已知三角形ABC中,角A等于角B加角C,那么三角形ABC是 A、銳角三角形 B、直角三角形 C、鈍角三角形 D、不能確定"; Analyzer analyzer = new IKAnalyzer(true); ikList = analysisByIK3Point2(analyzer, "myfield", str); listAnalyzer.addAll(ikList);
輸出結(jié)果:
[已知, 三角形, abc, 中, 角, a, 等于, 角, b, 加, 角, c, 那么, 三角形, abc, 是, a, 銳角三角形, b, 直角三角形, c, 鈍角三角形, d, 不能, 確定]
即使用不同版本實現(xiàn)相同功能效果。 主要是 因為IKAnalyzer 2012F 依賴Analyzer的tokenStream是final方法,但是公式分詞用到的tokenSteam方法是抽象方法。兩者沖突了,所以考慮去做兼容。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- IKAnalyzer結(jié)合Lucene實現(xiàn)中文分詞(示例講解)
- python使用jieba實現(xiàn)中文分詞去停用詞方法示例
- java中文分詞之正向最大匹配法實例代碼
- python中文分詞教程之前向最大正向匹配算法詳解
- Python中文分詞工具之結(jié)巴分詞用法實例總結(jié)【經(jīng)典案例】
- Python結(jié)巴中文分詞工具使用過程中遇到的問題及解決方法
- php實現(xiàn)的中文分詞類完整實例
- 開源php中文分詞系統(tǒng)SCWS安裝和使用實例
- 幾款開源的中文分詞系統(tǒng)
- PHP中文分詞 自動獲取關(guān)鍵詞介紹
- PHP中文分詞的簡單實現(xiàn)代碼分享
相關(guān)文章
Java?EasyExcel利用填充模版動態(tài)生成多個sheet頁
這篇文章主要為大家詳細(xì)介紹了Java?EasyExcel如何利用填充模版動態(tài)生成多個sheet頁,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
Spring?Cloud?Loadbalancer服務(wù)均衡負(fù)載器詳解
這篇文章主要介紹了Spring?Cloud?Loadbalancer服務(wù)均衡負(fù)載器,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
基于rocketmq的有序消費模式和并發(fā)消費模式的區(qū)別說明
這篇文章主要介紹了基于rocketmq的有序消費模式和并發(fā)消費模式的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

