使用C#,如何替换相似的单词?

7

Assuming these two strings:

string s1="control";
string s2="conrol"; (or "ocntrol", "onrtol", "lcontro" etc.)

我怎样才能编程地找到s2与s1相似,并用s1替换s2字符串呢?
谢谢。
Jeff
5个回答

12

嗯,这很有趣,而且有点模糊 :) - Jeff Norman
非常有趣。我从未知道这样的东西存在。+1 - Alex Essilfie

3
你可以使用Levenshtein距离,它会给出两个单词之间的相似度排名。你需要决定在哪个排名下进行替换。

1
我建议一个更简单的答案。比较这两个字符串的长度,同时比较这两个字符串的ASCII值之和。

1
我喜欢你尝试保持解决方案尽可能简单的方式,但这甚至不能处理Jeff Norman给出的示例。Levenshtein距离绝对是这里要走的路。 - Wouter van Nifterick
是的,你说得对。但如果我们计算正确字符在正确位置上的百分比呢?我的意思是遍历正确单词的每个字符,并在每次字符出现在其正确位置时检查相似单词列表,最后将一些值添加到百分比中。如果百分比值在70-80左右,我们就可以说这是一个相似的单词。 - KhanZeeshan
通过您在评论中描述的方法,您基本上会得到Levenshtein算法的粗略版本。它只是不够灵活。如果您在字符串的某个位置插入一个字符会发生什么?您的算法将标记其余部分已更改。您仍然需要考虑这一点。真的,请阅读有关Levenshtein的信息以了解其功能。它快速,易于实现,并且在整个行业中广泛测试和使用了几十年。 - Wouter van Nifterick

0

我会使用Matlab来对此进行一些测试。 我会按照以下步骤进行:

CONTROL 1111111

OCNTROL 0011111

ONRCTOL 0000111

因此,我有一个原始单词的所有1,然后在第二种情况下有五个1,在第三种情况下有三个1。您可以说70%是可以接受的,如果匹配70%,那么我将使用这个单词。 OCNTROL将被接受,但ONRCTOL不会。

我之所以说Matlab,是因为您可以轻松地将大量数据加载到向量中并进行向量比较。


0

Linq方法:尝试将两个字符串中的字符存储在两个List<chars>List<String>中,并使用SequenceEqualExcept比较较小的字符串与较大的字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接