背景說明
公司有涉及汽車相關業務,需要基於輸入的車型信息,去匹配系統已有的車型數據。
如輸入“昂克賽拉 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"
}
}
}
}
}