麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

IKAnalyzer使用不同版本中文分詞的切詞方式實現相同功能效果

2024-07-14 08:43:04
字體:
來源:轉載
供稿:網友

最近公司在做一個題庫的功能,需要用到 中文分詞和公式分詞的工具,最開始用 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 依賴AnalyzertokenStreamfinal方法,但是公式分詞用到的tokenSteam方法是抽象方法。兩者沖突了,所以考慮去做兼容。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蜜桃网在线| 今井夏帆av一区二区 | 免费一级a毛片在线播放视 日日草夜夜操 | 国产精品久久久久久久久久久久久久久久 | 欧美激情视频一区二区免费 | 欧美一级电影网 | 亚洲免费在线视频 | 97se亚洲综合在线韩国专区福利 | 99精品视频在线观看免费播放 | 精品国产一区二区三区久久久蜜 | 电影91| av黄色在线免费观看 | 久久美女免费视频 | 91久久九色| 热99re久久免费视精品频软件 | 欧美黄 片免费观看 | 亚洲91精品| 亚洲成人网一区 | 久久精品欧美一区二区 | 欧美特黄a | 久久国产不卡 | 亚洲综合网站 | 久久精品视频免费观看 | 日韩毛片网 | 91美女视频在线观看 | 国产99久久精品一区二区300 | av国产片 | 91网站链接 | 日韩av在线网址 | 热99视频| 日韩黄色片免费看 | 欧美a黄| 精品一区二区三区中文字幕老牛 | av在线观| 久久综合久久综合久久 | 深夜精品福利 | 欧美激情综合在线 | 国产亚洲精品久久久久久久久 | 一级黄色大片在线观看 | 欧美精品一区二区三区久久久 | 欧美扩阴视频 |