有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

印度语言的java语音搜索

我想在我的安卓应用程序中对字符串进行语音比较。但这里的特殊情况是,我想比较用英语写的印度语单词。例如,我想检查“Edhu”、“Adhu”、“Yethu”在语音上是否相等,它们在泰米尔语中的意思都相同。但是使用英文书写印度语言的人使用不同的拼写来造出这个词。在这种情况下,我如何比较单词

我试过Levenshtein。但我不知道如何将它返回的数字转换为等式

我试过Soundex,当单词的第一个字母发生变化时,Soundex代码就不一样了。但它能够找出类似的发声部分。我不明白它是怎么工作的

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

共 (1) 个答案

  1. # 1 楼答案

    据我所知,你想把用英语写的单词,按语音进行分解,然后把拼写不同但语音表达相同的单词组合在一起

    因为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-,除非——元音是单词中的第一个字母——这解释了为什么你的值都略有不同,但只是在第一个字母的编码中

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

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