首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带项权值的模糊字符串匹配

带项权值的模糊字符串匹配
EN

Stack Overflow用户
提问于 2012-10-06 16:24:18
回答 4查看 3.2K关注 0票数 16

我正在开发一个应用程序,它试图将一组潜在“混乱”的实体名称与参考列表中的“干净”实体名称相匹配。我一直在使用编辑距离和其他常见的模糊匹配算法,但我想知道是否有更好的方法允许术语加权,比如在模糊匹配中赋予公共项较少的权重。

考虑这个例子,使用Python的difflib库。我正在使用组织名称,它们有许多共同的标准化组件,因此不能用于区分实体。

代码语言:javascript
复制
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

由于RESEARCHINSTITUTESEMICONDUCTORMANUFACTURINGCORP在许多组织名称中都是高频率的通用术语,所以这两个示例在完整字符串上的得分都很高。我正在寻找关于如何将术语频率集成到模糊字符串匹配中的任何想法(不一定使用difflib),这样分数就不会受到普通术语的影响,结果可能更像"e1b“和"e2b”示例。

我意识到我可以做一个很大的“频繁词”列表,把那些词排除在比较之外,但如果可能的话,我想使用频率,因为即使是普通的单词也会添加一些信息,当然,任何列表的临界点也会是任意的。

EN

回答 4

Stack Overflow用户

发布于 2012-10-08 19:20:35

给你一个奇怪的主意:

压缩您的输入和差异。

您可以使用例如赫夫曼字典编码器来压缩您的输入,这会自动处理常见的术语。但在你的例子中,伦敦可能是一个相对常见的词,而拼写错误的隆顿则完全不是,而且压缩词之间的差异远高于原始词之间的差异。

票数 2
EN

Stack Overflow用户

发布于 2012-10-10 18:16:15

把每个字符串分割成一个单词列表,然后对每个单词进行比较,得到一个包含单词匹配分数的列表。然后你可以平均分数,找到最低/最高的间接匹配或部分.

让你有能力增加你自己的重量。

你当然需要处理一些补偿,比如..。

伦敦皮革公司

伦敦皮革公司

票数 2
EN

Stack Overflow用户

发布于 2012-10-08 19:43:18

在我看来,一个通用的解决方案永远不会与你的相似观点相匹配。一旦您对数据有了一些隐式知识,就必须将其以某种方式放入代码中。暂时取消了现有固定解决方案的资格。

也许您应该看看http://nltk.org/来了解一些NLP技术。你没有告诉我们足够的关于你的数据,但一个POS标签可能有助于识别越来越少的相关术语。有城市、国家、.名称的数据库。在进一步处理数据之前,可能有助于清理这些数据。

有很多可用的工具,但是要获得高质量的输出,您将需要一个为您的数据和用例定制的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12761506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档