23

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

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

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

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

1 回答 1

6

据我了解,您希望将用英语写成的单词按语音分解,然后将拼写不同但具有相同语音表示的单词组合在一起。

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

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

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

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

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

于 2015-07-22T13:34:14.433 回答