中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-06-24 09:36:44 來源:億速云 閱讀:132 作者:小新 欄目:編程語言

這篇文章主要介紹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 依賴AnalyzertokenStreamfinal方法,但是公式分詞用到的tokenSteam方法是抽象方法。兩者沖突了,所以考慮去做兼容。

以上是“IKAnalyzer如何使用不同版本中文分詞的切詞方式實現相同功能效果”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

基隆市| 永和县| 山阴县| 溧阳市| 盈江县| 昌图县| 吕梁市| 个旧市| 惠水县| 青州市| 临西县| 南宁市| 昭苏县| 龙岩市| 永顺县| 星座| 庐江县| 北宁市| 大悟县| 博客| 依安县| 张家港市| 枣强县| 顺平县| 东乌珠穆沁旗| 宁乡县| 安图县| 汝州市| 齐齐哈尔市| 东台市| 博湖县| 勐海县| 当阳市| 杭州市| 拉萨市| 洛宁县| 蓬安县| 友谊县| 尼玛县| 三河市| 鹰潭市|