C# 在.Net中为整个句子实现soundex
我有一个regex/soundex类型的方法:C# 在.Net中为整个句子实现soundex,c#,.net,regex,string,soundex,C#,.net,Regex,String,Soundex,我有一个regex/soundex类型的方法: public static string SoundEx(string word) { if (word.All(char.IsDigit)) { //sentenceParts = words; return word; } word = word.ToUpper(); word = word[0] + Regex.Replace( R
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);
}
这在只有一个单词的字符串上效果很好,但一旦你在其中抛出一个句子,它就会开始表现得很有趣
“那只棕色的大猫。”
和
“那只棕色的大狗。”
作为对手出现。现在我知道它保留了第一个单词的第一个字符,然后开始使用正则表达式将数字与元音匹配,等等。但是我如何在整个句子中实现这一点,使其更准确?您必须分别对每个单词发声。这将把句子转换成一组4字节的代码,而不是字符串。然后将这些集合相互比较 因此,您的示例变成“T000 B200 B650 D200”v“T000 B200 B650 C300”
我建议使用双变音算法而不是soundex,因为它更好,它也不依赖于第一个字母保持不变,这无助于匹配诸如钓鱼和钓鱼之类的单词。它应该做什么?在“测验”中回答问题,并在出现小拼写错误时使用soundex。它适用于单个单词,如:Retroactive vs.Ritroactive将返回匹配,但Retroactive vs Metroactive将不返回匹配等。我仍然不明白。追溯返回的是什么?匹配是什么意思?您的示例的结果与“t1216523”和“t1216532”不同。是的,我使用了您的代码。看起来你只是在做第一个单词,而不是整个句子。谢谢你提供的信息。我将研究双变音算法。这是可以在.net中实现的吗?@VinnyGuitara很容易,这是一个更复杂的算法,但没有什么不可能理解的,很可能已经有库为您提供了。