我有一个正则表达式/ soundex类型方法:
public static string SoundEx(string word)
{
if (word.All(char.IsDigit))
{
//sentenceParts = words;
return word;
}
word = word.ToUpper();
word = word[0] +
Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace(word.Substring(1), "[AEIOUYHW]", ""), "[BFPV]+", "1"), "[CGJKQSXZ]+", "2"), "[DT]+", "3"), "[L]+", "4"), "[MN]+", "5"), "[R]+", "6");
return word;//word.PadRight(4, '0').Substring(0, 4);
}
这对一个单词的字符串工作正常,但只要你在其中转储句子就可以开始表现得很有趣。
"大棕猫。" 和 "大棕狗。"
作为比赛出场。现在我明白它保留了第一个单词的第一个字符,然后开始使用正则表达式将数字与元音匹配等等。但是如何在整个句子上实现这一点使其更准确?
答案 0 :(得分:2)
你必须分别对每个单词进行索引。这将句子变成一组4字节代码而不是字符串。然后,您将这些集合相互比较。
因此,您的示例变为“T000 B200 B650 D200”v“T000 B200 B650 C300”。
我建议使用双Metaphone算法而不是soundex作为它的更多,更好,它也不依赖于保留相同的第一个字母,这无助于匹配钓鱼和网络钓鱼等单词。