匹配不同的字符串

时间:2010-11-13 14:14:12

标签: c# algorithm

假设有两组字符串:

[ "Mr. Jones", "O'Flaherty", "Bob", "Rob Jenkins" ]
[ "Maxwell O'Flaherty", "Robert Jenkins", "Mrs. Smith" ]

很明显,这两套有Maxwell O'Flaherty和Robert Jenkins的共同点。

是否有任何算法可以让我们以编程方式进行此类匹配?我正在考虑编写将遍历字符串数组中的每个元素的内容,并尝试查找任何子集,这些子字符串是唯一的,并且不包含在任何一个集合中的任何其他元素中,然后将其用作每个元素的一种哈希值匹配这两套。

3 个答案:

答案 0 :(得分:1)

您可能会发现Levenshtein距离很有用。如果您正在做很多这样的事情,那么不清楚信息的准确程度是否存在用于字符串消歧的库。 (Rob和罗伯特相同并不“显而易见” - 事实上第一个可能是罗宾。

答案 1 :(得分:0)

如果这是真实世界的例子,你需要在名字或姓氏上完全匹配,然后解析第二个数组中的所有字符串,并创建包含所有解析子字符串的新数组,并将索引存储到子字符串所属的原始数组元素:

[{“Maxwell”,0},{“O'Flaherty”,0},{“Robert”,1},{“Jenkins”,1},{“Mrs.”,2},{“Smith “,2}]

现在你可以找到完全匹配,并知道它与谁有关。

答案 2 :(得分:0)

我过去用来处理罗伯特与鲍勃之类问题的一种方法是向可以识别相似性的互联网资源查询。

例如,我不知道Wolfram Alpha的自动搜索策略(尽管我认为他们在某个时候正在开发API),但搜索Robert(http://www.wolframalpha.com/input/?i=robert)会发现它应该是与“Rob”这个名字相匹配。

此外,这根本不是程序化的,但我发现,如果您的数据集在数量上受到相当大的限制,巧妙地使用亚马逊的Mechanical Turk会为这类问题带来奇迹。

相关问题