rjf*_*rjf 13 python string information-retrieval
我正在研究一个应用程序,它试图将一组潜在的"混乱"实体名称与参考列表中的"清理"实体名称进行匹配.我一直在使用编辑距离和其他常见的模糊匹配算法,但我想知道是否有更好的方法允许术语加权,这样在模糊匹配中常用术语的权重较小.
考虑这个例子,使用Python的difflib库.我正在使用组织名称,它们有许多共同的标准化组件,因此不能用于区分实体.
from difflib import SequenceMatcher
e1a = SequenceMatcher(None, "ZOECON RESEARCH INSTITUTE",
"LONDON RESEARCH INSTITUTE")
print e1a.ratio()
0.88
e1b = SequenceMatcher(None, "ZOECON", "LONDON")
print e1b.ratio()
0.333333333333
e2a = SequenceMatcher(None, "WORLDWIDE SEMICONDUCTOR MANUFACTURING CORP",
"TAIWAN SEMICONDUCTOR MANUFACTURING CORP")
print e2a.ratio()
0.83950617284
e2b = SequenceMatcher(None, "WORLDWIDE",
"TAIWAN")
print e2b.ratio()
0.133333333333
Run Code Online (Sandbox Code Playgroud)
这两个例子都高度在比分上满弦,因为RESEARCH,INSTITUTE,SEMICONDUCTOR,MANUFACTURING,和CORP高频率,在许多组织名称的通用术语.我正在寻找关于如何将术语频率整合到模糊字符串匹配(不一定使用difflib)中的任何想法,这样得分不受常见术语的影响,结果看起来更像是"e1b"和"e2b" " 例子.
我意识到我可以制作一个大的"常用术语"列表并将其排除在比较之外,但我想尽可能使用频率,因为即使是常用词也会添加一些信息,当然任何列表的截止点也是如此是任意的.