背景说明
公司有涉及汽车相关业务,需要基于输入的车型信息,去匹配系统已有的车型数据。
如输入“昂克赛拉 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.youkuaiyun.com/yusewuhen/article/details/50685685
- https://blog.youkuaiyun.com/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"
}
}
}
}
}