java - 印度语言的拼音搜索

标签 java android apache-commons soundex phonetics

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

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

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

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

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

关于java - 印度语言的拼音搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30843475/

相关文章:

java - 将 ResultSet 分配给类中的变量

java - 为什么设置 expireAfterAccess 不起作用?

java - DefaultTreeCellRenderer 未按预期工作

maven - 缺少 org.apache.commons.collections.CollectionUtils

java - apache commons 压缩的 Tar 问题

java - 欧拉计划 12 - 优化

Android:bindService 总是返回 false(扩展 APK api)

android - 在 mergeadapter 中查找 Listview 单击部分适配器?

java - 如何访问 Android 中现有的 .db 文件?

java - 通过 Apache HTTP 连接访问网站时连接重置