如何获得用一种语言编写的字符串与另一种语言编写的另一个字符串的声音相似性“评级”:即可以识别该字符串的算法
“David Letterman”和“דוד לטרמן”是听起来相似的字符串。
-哦,是的,顺便说一句,上面是希伯来语,你猜对了:“大卫·莱特曼”,它听起来/说起来几乎与英语相同......
我拥有的唯一原 Material 是各自语言的 unicode 字符串。 也就是说,我没有字符串的音素或语音转录/翻译。
我已经实现了 Soundex 实现调整之类的东西,效果一般。这是要走的路吗?
最佳答案
Soundex 可能并不完美,但它似乎是一种合理的方法,至少对于您的英语/希伯来语匹配的具体示例而言是如此。
你绝对不能使用保留名字第一个字母的规则,但我从来不喜欢这个,即使是拉丁字母(因为我必须在“E”和“Y”下查找我母亲的名字)姓)。我建议像对待所有其他字母一样对待第一个字母。
然后只需将希伯来字母映射到 Soundex 代码即可。你并不真的需要中级的英语音译;只需直接编码希伯来语 → Soundex 映射即可。
- 1 1
- 2 2
- 3 → 3
- 32
- ל → 4
- 3 → 5
- 直径 → 6
- אהйע → 被忽略
但是,由于 Soundex 以英语为中心,因此它可能无法正确处理希伯来语发音中的某些歧义:
- ו 在上面的列表中映射为 1(如英语 V),但它通常代表 O、U 或 W,在这种情况下,在 Soundex 中应忽略它。
- ח 由于缺乏英语对应词而很难分类。我把它放在类别 2 中,因为 (1) 与“ch”音译相匹配,并且 (2) 允许 ך/כ 具有相同的类别,带或不带 dagesh。
- 德系犹太人的发音会将 ת 分为类别 2 和类别 3。
为了解决这个问题,您可以为一个字符串生成多个 Soundex 键。例如,“שבת”将映射到 212 和 213。
可以为希腊语进行类似的映射:
- ΒΠΦ → 1
- Ψ → 12
- ЖΚΞΣΧ → 2
- ΔθΤ → 3
- Λ → 4
- MN → 5
- Ρ → 6
- AEKHIOYΩ → 被忽略
或俄语:
- БВПФ → 1
- ГЖЗКСХЧШЩ → 2
- ДТ → 3
- Ц → 32
- Л → 4
- МН → 5
- Р → 6
- АЕЁИЙОУЪЫЬЭЮЯ → 忽略
(请注意,某些 2 可能是 32,具体取决于您的音译约定。)
<小时/>相似度“评级”可以基于像longest common subsequence这样的指标来获得。长度或Levenshtein distance关于 Soundex 值。
例如,您可以将两个字符串之间的“相似度”定义为 2*lcslen(A, B)/(len(A)+len(B)) 以获得 0 到 1 之间的分数。
关于unicode - 比较不同语言的短字符串以获得相似的声音 - Soundex 是答案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6140964/