我有两个表,每个表包含200万条记录。一个具有项目名称和其他项目描述以及其他属性。我必须将表1中的每个项目与表2中的每个描述相匹配,以找到最大相似性匹配。所以基本上,对于200万件物品中的每件物品,我必须扫描另一张表以找到最佳匹配。这使得200万* 200万次计算!我如何有效地在python中做到这一点?就目前而言,计算需要数年时间。
现在我正在遵循的方法是正则表达式搜索,将每个项目名称拆分为列表中的单词,然后检查该单词是否包含在描述中。如果是,那么我将匹配计数增加1并使用该我计算相似度。
所以我的问题是:
如何让我的计算更快?使用多线程,拆分 数据或类似的东西?
任何其他可在此处使用的相似度算法?请注意 我在另一方面有描述,因此余弦相似性等等 因不同的词数而工作。
答案 0 :(得分:0)
您可以尝试使用Distance包来计算相似度的Levenshtein距离。
来自文档:
比较字符串列表对计算也很有用 文章或文章中句子,段落等之间的相似之处 书籍,抄袭识别:
>>> sent1 = ['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
>>> sent2 = ['the', 'lazy', 'fox', 'jumps', 'over', 'the', 'crazy', 'dog']
>>> distance.levenshtein(sent1, sent2)
3
>>> distance('Levenshtein', 'Lenvinsten')
4
>>> distance('Levenshtein', 'Levensthein')
2
>>> distance('Levenshtein', 'Levenshten')
1
>>> distance('Levenshtein', 'Levenshtein')
0
答案 1 :(得分:0)
你也可以使用NLTK。
from nltk import *
reference = 'DET NN VB DET JJ NN NN IN DET NN'.split()
test = 'DET VB VB DET NN NN NN IN DET NN'.split()
print(accuracy(reference, test))
print edit_distance("rain", "shine")