比较不同语言的短字符串以获得相似的声音 - Soundex 是答案吗?
Posted
技术标签:
【中文标题】比较不同语言的短字符串以获得相似的声音 - Soundex 是答案吗?【英文标题】:compare short strings in different languages for similar sound - is Soundex the answer? 【发布时间】:2011-09-02 17:08:44 【问题描述】:我如何才能为用一种语言编写的字符串与用另一种语言编写的另一个字符串获得合理的相似性“评级”:即可以识别该字符串的算法
“大卫莱特曼”和“דוד לטרמן”是听起来相似的字符串。
-哦,是的,顺便说一句,上面是希伯来语,你猜对了:“大卫莱特曼”,它的发音/口语几乎与英语相同..
我拥有的唯一原材料是各自语言的 unicode 字符串。 也就是说,我确实没有有音素或字符串的音标/翻译。
我已经实现了一个 Soundex 实现调整,效果一般。这是要走的路吗?
【问题讨论】:
Dan04 的解决方案就像一个魅力:比预期的要好。设法将命名人员的联系人列表(第一个+最后一个)与希伯来语/英语比较、重复、拼写错误和拼写相似的名字在每种语言和这些语言之间合并。没有可提供的统计数据,但效果几乎完美。 【参考方案1】:我建议研究一下 Daitch-Mokotoff Soundex Code(尤其适用于希伯来语)。 勾选this,以英文字符为输入,this,以希伯来字符为输入
【讨论】:
【参考方案2】: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 ΓZΚΞΣΧ → 2 ΔΘΤ → 3 Λ → 4 ΜΝ → 5 Ρ → 6 AΕΗΙΟΥΩ → 忽略或俄语:
БВПФ → 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 之间的分数。
【讨论】:
【参考方案3】:一般而言,Soundex 不太适合;它相当粗糙,有点适应英语。特别是,Soundex 字符串的第一个字符是输入的第一个字符,因此您的英语/希伯来语示例不会翻译成相同的 Soundex 代码,除非您也先将希伯来语字符音译为英语(拉丁语)。西里尔文和中文都有从本地字符集到拉丁文的音译 - 但在处理方式上有所不同。
调查Metaphone;但是,它在概念上与 Soundex 相似,并且具有相似的局限性。
我不知道跨语言的等价物。
我不知道IPA(国际音标)是否有帮助。您必须将英语和希伯来语翻译成国际音标,然后使用一些相似函数来关联相关的声音。
【讨论】:
THX。事实上,在我的 Soundex 调整中,我 将外语的第一个字母更改为对应的英语。因此,在这样的 Soundex 实现中需要 2 个映射:将外语中的每个字符映射到它的英语完全等效项,并将每个字母映射到用于计算字符串的 Soundex 值的 6 个集合之一。以上是关于比较不同语言的短字符串以获得相似的声音 - Soundex 是答案吗?的主要内容,如果未能解决你的问题,请参考以下文章
自然语言处理(NLP)基于PaddleNLP的短文本相似度计算