现在一个需求是当用户输入他的公司名称时,判断这个公司的关键名称(如深圳市腾讯计算机系统有限公司,北京市百度信息技术有限公司的核心关键名就是腾讯,百度);然后到他们给的表里面匹配是否有包含这个关键名称的公司(他们的表都是官方全称,但是怕用户输入的不完全一致)
于是我个人的想法是计算两个词的相似度来解决,但是对于这么多的数据感觉如果拆词一个一个计算会不会很低效率,或者这种需求还能用别的方法解决吗?
现在一个需求是当用户输入他的公司名称时,判断这个公司的关键名称(如深圳市腾讯计算机系统有限公司,北京市百度信息技术有限公司的核心关键名就是腾讯,百度);然后到他们给的表里面匹配是否有包含这个关键名称的公司(他们的表都是官方全称,但是怕用户输入的不完全一致)
于是我个人的想法是计算两个词的相似度来解决,但是对于这么多的数据感觉如果拆词一个一个计算会不会很低效率,或者这种需求还能用别的方法解决吗?
对比‘相似度’是一种办法,所谓相似度实际上可以理解为'关联度',这个可以使用tf-idf等算法实现计算。但这种方法不能解决词本身不关联的情况,如 淘宝-阿里巴巴,这二者用tf-idf是没有任何关联的。
更好一点的办法是用关联搜索,如Lucene系列的搜索引擎就有对应的more like this search。使用关联搜索的好处是如 百度,腾讯等例子可以使用引擎本身的支持完成关联匹配,而剩下的如上文说的淘宝-阿里巴巴的case就得自己去建立同义词库了。
使用上面说的关联搜索方法实际上是基于倒排的召回,在召回上很可能面临召回多个结果的问题。如'百度'可能召回 百度技术,也会召回 百度烤肉 这样的case。为了得到更精准的结果,就得在前端实现控制,让用户选择一个,类似于搜索的suggest一样。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
如果要是追求速度和准确的的话需要用倒排表。
不是很精确可以用模糊查找或者你说的中文分词去查也行,分词效率还可以,有成熟的类库。