elasticsearch ik分詞--實現專有名詞分詞 同義詞解析

背景說明

公司有涉及汽車相關業務,需要基於輸入的車型信息,去匹配系統已有的車型數據。
如輸入“昂克賽拉 2016款 1.5L 自動”,
系統已有數據:“馬自達3 昂克賽拉 2016款 兩廂 1.5L AT 運動型”、“馬自達3 昂克賽拉 2016款 兩廂 2.0L AT 運動型”、“馬自達3 昂克賽拉 2016款 兩廂 2.0L AT 旗艦型”、“馬自達3 昂克賽拉 2016款 兩廂 1.5L MT 運動型”…
按匹配度展示給用戶

實現

由於內容中包含中文、英文、數字,採用中文分詞器(ik)來進行分詞處理

優化前效果(使用ik-smart分詞)

示例一:
在這裏插入圖片描述
問題:專有名詞“昂克賽拉”被解析爲四個詞,不識別這個專有詞

示例二:
在這裏插入圖片描述
問題:專有名詞AT,沒有解析處理。 被當做停用詞處理掉了

示例三:
在這裏插入圖片描述
問題:汽車名詞中,“手動”和“MT”表達的是同一個含義。本示例中的“手動”和示例二 MT這個詞,沒有解析爲相同的詞,降低了匹配度。

優化後效果

使用自定義的analyzer (ik_car_analyzer)
在這裏插入圖片描述
此時,可以看到,“昂克賽拉”被解析爲一個詞,AT沒有被當做停用詞且其同義詞被解析出來了

調整點

  • 更新詞庫,添加汽車專用名詞、品牌等信息。
    修改ik分詞器下的詞庫文件,添加所有的汽車品牌、系列名稱 (./plugins/ik/config/main.dic)
  • 構建同義詞。如AT=自動,MT=手動。參考資料如下:
    • https://blog.csdn.net/yusewuhen/article/details/50685685
    • https://blog.csdn.net/tianzhaixing2013/article/details/51506496
  • 修正停用詞。如AT,被忽略了
    修改ik分詞器插件下的停止詞文件 (./plugins/ik/config/stopword.dic)
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_car_analyzer": {
          "type":      "custom",
          "tokenizer": "ik_smart",
          "char_filter": [],
          "filter": [
            "lowercase",
            "ik_car_filter"      // 自定義過濾器
          ]
        }
      },
		"filter": {
		  "ik_car_filter": {
			"type": "synonym",   // 定義同義詞
			"synonyms_path": "../plugins/ik/config/synonym.dic"
		  }
		}
    }
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章