印度语言的拼音搜索

Phonetic search for Indian languages

我想在我的 android 应用程序中比较字符串的发音。但这里的特殊情况是,我想比较用英语写的印度语言单词。例如,我想检查 "Edhu" "Adhu" "Yethu" 在语音上是否相等,它们在泰米尔语中的意思都相同。但是使用英语脚本编写印度语言的人使用不同的拼写来组成这个词。在这种情况下如何比较单词?

我试用了 Levenshtein。但我不确定如何将它 returns 的数字转换为等式。

我试了Soundex,Soundex单词首字母变了代码不一样。但它能够找出相似的发音部分。我不明白它是如何工作的。

 soundex.encode("Yethu")  (soundex.encode("Edhu"))  (soundex.encode("adhu")) 
 Y300                       E300                       A300

据我了解,您想要获取用英语书写的单词,对其进行语音分解,然后将拼写不同但具有相同语音表示的单词组合在一起。

因为这个 SoundEx 是 90% 的解决方案,前提是拼写英语单词的人在将单词从泰米尔语翻译成英语时实际上使用了正确的辅音。

You should be able just to drop the first value from the SoundEx representation and use that as your encoding when the first letter is a vowel.

原因是 SoundEx ( https://en.wikipedia.org/wiki/Soundex ) 仅对出现的单词中的辅音进行编码。它丢弃了所有元音加上 h 和 w - Unless - 元音是单词中的第一个字母 - 这解释了为什么你的值都略有不同,但只在第一个字母的编码中.

至于你的零,SoundEx 编码定义为 1 个字母和 3 个数字(仅限 1 到 6),每个单词(d 或 t)和 SoundEx 中只有 1 个辅音将它们都映射到数字 3。由于没有更多的辅音,我相信它会添加 2 个零以符合要求。因此你得到 Letter300

如果您打算继续为您的应用使用 SoundEx,您应该牢记它只能根据其字母编号为您提供 26*6*6*6 = 5616 个唯一编码(1 -6) Number(1-6) Number(1-6) 方案。这意味着语音编码不会是唯一的,一些完全不同的词会有 SoundEx 编码冲突。