首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >智能字符串比较

智能字符串比较
EN

Stack Overflow用户
提问于 2013-05-23 19:56:51
回答 3查看 3.3K关注 0票数 15

我正在寻找一个库/类,可以对两个字符串进行智能比较。充其量,它会给出两个字符串相似程度的百分比结果。我正在比较公司名称,地址记录在不同的存储库中,因此在名称中有许多拼写错误或不一致。

要比较的示例字符串:

代码语言:javascript
运行
复制
 "Good Company Ltd." vs. "GoodCompany" 
 "Baker Street 2" vs. "Baker Str. 2" 

如果我得到了相似度百分比结果,那么这可以作为智能合并这类数据的输入。

你知道有什么好的库可以实现这样的智能字符串比较吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-23 20:22:26

Levenshtein在这种情况下是不合适的。"Good Company Ltd“和"GoodCompany”的距离为3,而"Good Company Ltd“和"Food Ltd”的距离为1,但它们的含义完全不同。我建议使用Metaphone or Double Metaphone算法。

使用online metaphone comparer的结果是:

Good Company Ltd = KTKMPNLTT GoodCompany = KTKMPN食品有限公司= FTKMPNLTT GoodCompanyLLC = KTKMPNLK

这样你就知道GoodCompanyGood Company LtdGoodCompanyLLC是相似的,而Food Company拼写错误或者完全不相关(KTKMPN包含在KTKMPNLTTKTKMPNLK中,但不包含在FTKMPNLTT中)。

here上查看其他算法的比较。

票数 16
EN

Stack Overflow用户

发布于 2013-05-23 19:59:13

您可能需要查找Levenshtein Distance实现。它显示了需要多少个字符插入/删除和替换才能使两个字符串相等。

这里有一篇关于C#库的文章,这些库实现了Levenshtein距离和其他文本比较算法:.NET library for text algorithms?

然而,我认为你必须使用一些方法的组合,因为使用Levenshtein会告诉你'Good Company Ltd.‘.’更像是“坏公司”。而不是“GoodCompany”。

也许你需要通过扩展'str.‘来做一些预处理。移至“街道”并删除“中尉”就字符串比较而言,它是“无意义”的词。

更新1

Francesco De Lisi suggests使用拼音算法。看起来他们更适合比较拼写错误的名字。尽管如此,你仍然需要将地址分成语音/非语音部分(比如建筑编号),然后分别进行比较。

更新2

至于地址比较,这篇文章是suggests to use Google Maps API,另一篇文章讨论了address parsing。我猜Google可以产生可靠的结果,因为他们有一个街道地址的数据库,在那里他们可以找到最正确的街道名称拼写。如果没有正确的街道/公司名称列表,您可能会遇到一些不正确的奇怪名称,但是许多不同的正确名称可能与其相似。

票数 14
EN

Stack Overflow用户

发布于 2013-05-23 19:59:44

你要找的是一个Levenshtein distance (Wikipedia):

...the Levenshtein distance是用于度量两个序列之间差异的字符串度量。非正式地说,两个单词之间的

距离是将一个单词转换为另一个Levenshtein所需的最小单字符编辑次数(插入、删除、替换

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

https://stackoverflow.com/questions/16713292

复制
相关文章

相似问题

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