【问题标题】:Phonetic search for Indian languages印度语言的拼音搜索
【发布时间】:2015-08-30 20:22:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您将无法获得 100% 准确的匹配。 Levenstein 值将告诉您必须对一个字符串进行多少更改,以便与另一个字符串匹配。这与语音无关。您是否有机会将字符串翻译成“基本”泰米尔语,然后在那里进行匹配?
  • @55597 下面的答案对您有帮助还是您需要更多信息?

标签: java android apache-commons soundex phonetics


【解决方案1】:

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

对于这个 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)为您提供 26*6*6*6 = 5616 种唯一编码-6)数字(1-6)方案。这意味着语音编码将不会是唯一的,并且一些完全不同的单词将具有冲突的 SoundEx 编码。

【讨论】:

  • 在哪里可以获得泰米尔语或任何印度语言的 soundex 映射?
猜你喜欢
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2020-10-09
相关资源
最近更新 更多