首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >字符串比较算法,相关性,有多少“相似”的两个字符串

字符串比较算法,相关性,有多少“相似”的两个字符串
EN

Stack Overflow用户
提问于 2010-09-16 04:01:45
回答 3查看 911关注 0票数 0

对于相同的数据(公司),我有两个信息源,我可以通过一个唯一的ID (合同号)将它们连接在一起。第二个不同来源的存在是因为这两个源是手动、独立地更新的。因此,我在两个表中有一个ID和一个公司名称

我需要提出一个算法来比较两个表中相同的ID名称,并通过一个变量对所有公司进行排序,该变量指示字符串有多不同(突出显示最不同的字符串,将其放在列表的顶部)。

我看了简单的Levenshtein距离计算算法,但它在字母级别,所以我仍然在寻找更好的东西。

Levenshtein没有真正做这个工作的原因是:公司有一个名字,前缀或职位由组织形式(LTD,JSC,co. )决定。等)。因此,我们可能有很多JSC "Foo",这将与Foo JSC.有很大的不同,但我在数据库中真正要寻找的是像SomeLongCompanyName JSCJSC OtherName这样的不同字符串对。

有什么好办法吗?(我不太喜欢使用regex来分隔每个字符串中的单词,然后使用Levenshtein距离为另一个字符串中的每个单词寻找匹配,所以我正在寻找其他的想法)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-19 13:43:03

不如:

  1. 用空格替换所有标点符号。
  2. 将字符串拆分为空格分隔的单词。
  3. 将<= 4字符的所有单词移到末尾,按字母顺序排列。
  4. 莱文希丁。
票数 2
EN

Stack Overflow用户

发布于 2010-09-16 04:20:08

你能过滤掉(删除)那些“普通单词”(类似于删除全文索引的停止词)然后搜索吗?如果没有,你能在比较之前按字母顺序排列单词吗?

除了Levenshtein距离之外,您还可以使用Soundex。它不是很好,但它可以用来索引数据(这在使用Levenshtein时不可能)。

票数 2
EN

Stack Overflow用户

发布于 2010-09-18 04:48:45

谢谢你们的想法。我使用了4个索引,它们是levenshtein距离除以以下两个单词的长度(相对距离)之和:

  • 只有两个字符串
  • 该字符串由分离单词序列后的结果组成,消除了非单词字符,排序升序,并以空格作为分隔符。
  • 包含在引号之间的字符串(如果没有这样的字符串,则使用原始字符串)
  • 由每个单词按字母顺序排列的第一个字符组成的字符串。

这些值中的每一个都是介于1到1000之间的整数值。由此产生的价值是:

X1^E1 * X2^E2 * X3^E3 * X4^E4

其中X1..X4是索引,而E1..E4是用户提供的有价值(重要)的首选项是每个索引。为了将结果保持在1.1000的合理范围内,对向量(E1..E4)进行了规范化。

结果令人印象深刻。整个过程比我预期的要快得多(在2008的C#中将其构建为CLR程序集)。正确选择E1..E4后,整个数据库中非空值的最大索引(最大差异)为765。直到大约300个,几乎没有匹配的公司名称。大约有200家公司有类似的名字,有些公司的名字是相同的,但写的方式非常不同,包括缩略语、附加词等等。当它降到100甚至更少的时候--几乎所有的记录都包含相同的名字,但写得略有不同。到了30岁时,只有顺序或标点符号可能有所不同。

完全有效,结果比我预期的要好。

我编写了我博客上的一篇文章,以共享这个库,以防其他人需要它。

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

https://stackoverflow.com/questions/3726432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文