9

我如何才能为用一种语言编写的字符串与另一种语言的另一种字符串获得声音相似度“评级”:即一种可以识别该字符串的算法

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

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

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

我已经实现了一个 Soundex 实现调整,效果一般。这是要走的路吗?

4

3 回答 3

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 具有相同的类别。
  • Ashkenazi 发音会将 ת 分为 2 类和 3 类。

为了解决这个问题,您可以为一个字符串生成多个 Soundex 键。例如,“שבת”将映射到 212 和 213。

可以对希腊语进行类似的映射:

  • ΒΠΦ → 1
  • Ψ → 12
  • ΓZΚΞΣΧ → 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 之间的分数。

于 2011-05-29T11:05:17.420 回答
2

我建议研究 Daitch-Mokotoff Soundex Code(特别适合希伯来语)。选中this,它将英文字符作为输入,this将希伯来字符作为输入

于 2012-12-24T02:06:28.117 回答
1

一般来说,Soundex 不太可能是合适的;它相当粗糙,有点适应英语。特别是,Soundex 字符串的第一个字符是输入的第一个字符,因此您的英语/希伯来语示例不会翻译成相同的 Soundex 代码,除非您也先将希伯来语字符音译为英语(拉丁语)。西里尔文和中文都有从本地字符集到拉丁文的音译——但在处理方式上有所不同。

调查变音器;但是,它在概念上与 Soundex 相似并且具有相似的限制。

我不知道跨语言的等价物。

我不知道IPA(国际音标)是否会有所帮助。您必须将英语和希伯来语翻译成国际音标,然后使用一些相似函数来关联相关的声音。

于 2011-05-26T16:02:44.507 回答