我如何才能为用一种语言编写的字符串与另一种语言的另一种字符串获得声音相似度“评级”:即一种可以识别该字符串的算法
“ David Letterman ”和“ דוד לטרמן ”是听起来相似的字符串。
-哦,是的,顺便说一句,上面是希伯来语,你猜对了:“大卫莱特曼”,它的发音/口语几乎与英语相同..
我拥有的唯一原材料是各自语言的 unicode 字符串。也就是说,我没有字符串的音素或音标/翻译。
我已经实现了一个 Soundex 实现调整,效果一般。这是要走的路吗?
我如何才能为用一种语言编写的字符串与另一种语言的另一种字符串获得声音相似度“评级”:即一种可以识别该字符串的算法
“ David Letterman ”和“ דוד לטרמן ”是听起来相似的字符串。
-哦,是的,顺便说一句,上面是希伯来语,你猜对了:“大卫莱特曼”,它的发音/口语几乎与英语相同..
我拥有的唯一原材料是各自语言的 unicode 字符串。也就是说,我没有字符串的音素或音标/翻译。
我已经实现了一个 Soundex 实现调整,效果一般。这是要走的路吗?
Soundex 可能并不完美,但它似乎是一种合理的方法,至少对于您的英语/希伯来语匹配的具体示例而言。
你绝对不能使用保留名字第一个字母的规则,但即使是拉丁字母,我也不喜欢这样(因为我必须在“E”和“Y”下查找我母亲的姓氏) . 我建议像对待所有其他字母一样对待第一个字母。
然后只需将希伯来字母映射到 Soundex 代码即可。您真的不需要中级英语音译;只需直接编码希伯来语 → Soundex 映射。
但是,由于 Soundex 以英语为中心,它可能无法正确处理希伯来语发音中的某些歧义:
为了解决这个问题,您可以为一个字符串生成多个 Soundex 键。例如,“שבת”将映射到 212 和 213。
可以对希腊语进行类似的映射:
或俄语:
(请注意,有些 2 可能是 32,这取决于您的音译约定。)
可以根据Soundex 值上的最长公共子序列长度或Levenshtein 距离等度量来获得相似度“评级” 。
例如,您可以将两个字符串之间的“相似度”定义为 2*lcslen(A, B)/(len(A)+len(B)) 以获得介于 0 和 1 之间的分数。