在C++和/或Java中實現語音搜索的最有效方法是什麼?通過語音搜索,我的意思是替代聽起來相似的元音或輔音。這對名字特別有用,因爲有時候人們的名字有些奇怪的拼寫。實現語音搜索的最有效方式
我想這可能是有效的取代元音和一些輔音。最後還可以包括一些特殊情況,如最後的沉默E或F和PH。在C++中最好使用cstrings還是字符串?每次我們尋找什麼東西時,將替換值存儲在內存中還是調用函數會更好?
在C++和/或Java中實現語音搜索的最有效方法是什麼?通過語音搜索,我的意思是替代聽起來相似的元音或輔音。這對名字特別有用,因爲有時候人們的名字有些奇怪的拼寫。實現語音搜索的最有效方式
我想這可能是有效的取代元音和一些輔音。最後還可以包括一些特殊情況,如最後的沉默E或F和PH。在C++中最好使用cstrings還是字符串?每次我們尋找什麼東西時,將替換值存儲在內存中還是調用函數會更好?
Soundex及其變體是此標準算法。它使用語音規則將名稱轉換爲字母數字代碼。具有相同代碼的名稱被分組在一起。
就實現搜索而言,我會使用一個數據結構,將每個soundex代碼映射到具有該代碼的名稱列表。根據所使用的數據結構(散列表或樹),可以在不同soundex代碼的數量上對數不變地進行查找。
我不確定你的意思是cstring
(微軟的CString
?),但標準std::string
類對於這個問題將會非常好,並且是我的首選。
除了探測法你還可以找到音位或雙音位語音算法,這似乎是對英語發音的改進,是一個相當新的算法。
對於德語發音,我使用「KölnerPhonetik」。
阿帕奇共享編解碼器爲您提供了一個非常簡單的Java 實施這些基本算法(探測法,音位,...) 例如看到了同音的Javadoc: http://commons.apache.org/codec/apidocs/org/apache/commons/codec/language/Soundex.html
剛通過輸入以下代碼您的字符串的語音值:
Soundex soundex = new Soundex();
String phoneticValue = soundex.encode("YourString");
然後你可以簡單地做兩個字符串並比較語音值。 哈瓦看看下面的帖子,如果你比較兩個字符串,因爲的equals()方法是隻有黑和白,也許你想知道它有多少%的匹配:
How to compare almost similar Strings in Java? (String distance measure)
由'cstring'提供的
我的意思是一個'char'類型的數組。 –
@ user964672:沒有理由這樣做 - 我的建議是堅持使用'std :: string'。 – NPE