2016-04-28 54 views
1

我有一個正則表達式/同音類型的方法:.NET實施同音對整個句子

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

它應該做什麼? –

+0

在出現輕微拼寫錯誤的情況下,對答案進行「測驗」並對其進行索引。它適用於單個詞,如: 追溯與Ritroactive 將返回匹配 但 追溯VS Metroactive 將不會返回匹配等 – VinnyGuitara

+0

我還是不明白這一點。什麼「追溯」返回? –

回答

2

你必須單獨對每個單詞進行索引。將句子轉換爲一組4字節代碼而不是字符串。然後,您將這些集合相互比較。

所以你的例子變成了「T000 B200 B650 D200」v「T000 B200 B650 C300」。

我建議使用雙重Metaphone算法而不是soundex作爲它的好得多,它也不依賴於第一個字母保持不變,這不會幫助匹配釣魚和釣魚等詞語。

+0

感謝您的信息。我將研究雙重Metaphone算法。這是可以實施到.net的東西嗎? – VinnyGuitara

+0

@VinnyGuitara很容易,它是一個更復雜的算法,但沒有不可能理解,有可能是你已經有庫。 – gbjbaanb