比较不同语言的短字符串以获得相似的声音 - 是Soundex的答案吗?

Rab*_*Dev 8 unicode soundex similarity match phonetics

我怎么能得到一种语言用另一种语言的另一个字符串写的字符串的声音相似度"评级":即一种识别该字符串的算法

" David Letterman "和" דודלטרמן "是听起来相似的字符串.

- 哦,是的,顺便说一句,上面是希伯来语,你猜对了:"大卫莱特曼",它的声音/口语与英语几乎相同.

我所拥有的唯一原材料是各自语言的unicode字符串.也就是说,我没有字符串的音素或语音转录/翻译.

我已经实现了一个Soundex实现调整的东西,它的工作原理一般.这是要走的路吗?

dan*_*n04 7

Soundex可能并不完美,但它似乎是一种合理的方法,至少对于您的英语/希伯来语匹配的具体示例而言.

你绝对不能使用关于保留名字的第一个字母的规则,但我甚至不喜欢拉丁字母(因为我必须在"E"和"Y"下查看我母亲的姓氏) .我建议像对待所有其他人一样处理第一个字母.

然后,这只是将希伯来字母映射到Soundex代码的问题.你真的不需要中级英语音译; 只需直接编码希伯来语→Soundex映射.

  • בוףפ→1
  • גזחךכסקש→2
  • דטת→3
  • ץצ→32
  • →→4
  • םמןנ→5
  • ר→6
  • אהיע→忽略了

但是,由于Soundex是以英语为中心的,它可能无法正确处理希伯来语发音中的某些含糊之处:

  • 在上面的列表中映射为1(如英语V),但它通常表示O,U或W,在这种情况下应该在Soundex中忽略它.
  • 由于缺乏英语等同词,很难归类.我把它放在第2类中,因为这(1)匹配"ch"音译,(2)允许ך/כ在有或没有dagesh的情况下具有相同的类别.
  • 德系的发音将在第2和第3类之间分裂.

要解决这个问题,您可以为字符串生成多个Soundex键.例如,"שבת"将映射到212和213.

可以为希腊语制作类似的映射:

  • ΒΠΦ→1
  • Ψ→12
  • ΓΖΚΞΣΧ→2
  • ΔΘ→→3
  • Λ→4
  • ΜΝ→5
  • Ρ→6
  • ΑΕΗΙΟΥΩ→忽略

或俄语:

  • БВПФ→1
  • ГЖЗКСХЧШЩ→2
  • ДТ→3
  • Ц→32
  • Л→4
  • МН→5
  • Р→6
  • АЕЁИЙОУЪЫЬЭЮЯ→忽略

(请注意,有些2可能是32,取决于您的音译惯例.)


可以基于Soundex值上的最长公共子序列长度或Levenshtein距离之类的度量来获得相似性"评级" .

例如,您可以将两个字符串之间的"相似性"定义为2*lcslen(A,B)/(len(A)+ len(B)),以获得0到1之间的分数.