印度语言的语音搜索

我想在我的Android应用程序中按语音比较字符串。但这里的特例是,我想比较一下用英语写的印度语单词。例如,我想检查“Edhu”,“Adhu”,“Yethu”在语音上是否相等,它们在泰米尔语中的含义都是一样的。但是使用英语脚本编写印度语言的人使用不同的拼写来制作单词。在这种情况下,我如何比较单词?

我尝试了Levenshtein。但我不确定如何将它返回的数字转换为相等。

我尝试了Soundex,当单词的第一个字母更改时,Soundex代码是不一样的。但它能够找出类似的声音部分。我不明白它是如何工作的。

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

答案 1

据我所知,您希望采用用英语书写的单词,在语音上分解它们,然后将拼写不同但具有相同语音表示的单词组合在一起。

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

您应该能够从 SoundEx 表示中删除第一个值,并在第一个字母是元音时将其用作编码。

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

至于你的零,SoundEx编码的定义是1个字母和3个数字(仅限1到6),每个单词(d或t)中只有1个辅音,SoundEx将它们都映射到数字3。由于没有更多的辅音,我相信它增加了2个零的合规性。因此,您将获得字母300

如果您打算继续为您的应用程序使用SoundEx,您应该记住,它只能根据其字母Number(1-6)Number(1-6)Number(1-6)Number(1-6)Number(1-6)方案为您提供26 * 6 * 6 * 6 = 5616唯一编码。这意味着拼音编码将不是唯一的,一些完全不同的单词将具有碰撞的SoundEx编码。


答案 2

推荐