问题描述
|
对于一种用一种语言编写的字符串与另一种用另一种语言编写的字符串,我如何获得声音相似度“评级”:即一种可以识别该字符串的算法
\“ David Letterman \”和\“דודלטרמן\”是听起来相似的字符串。
-哦,是的,上面是希伯来语,您猜对了:“ David Letterman”,它的发音/口语与英语几乎相同。
我唯一拥有的原材料是各自语言的unicode字符串。
也就是说,我没有音素或字符串的音译/译文。
我已经实现了Soundex实现调整类的东西,效果一般。这是要走的路吗?
解决方法
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
MN→5
P→6
ΑΕΗΙΟΥΩ→已忽略
或俄语:
БВПФ→1
ГЖЗКСХЧШЩ→2
ДТ→3
Ц→32
Л→4
МН→5
Р→6
АЕЁИЙОУЪЫЬЭЮЯ→已忽略
(请注意,某些2 \可能是32 \,具体取决于您的音译约定。)
可以基于诸如Soundex值上的最长公共子序列长度或Levenshtein距离之类的度量来获得相似性“评级”。
例如,您可以将两个字符串之间的““相似度””定义为2 * lcslen(A,B)/(len(A)+ len(B)),以获得介于0和1之间的分数。
,我建议研究Daitch-Mokotoff Soundex代码(特别是希伯来语)。
选中此选项,以英文字符作为输入,选中此选项,以希伯来字符作为输入
,一般而言,Soundex不太适合。它是相当粗糙的,并且与英语有些协调。特别是,Soundex字符串的第一个字符是输入的第一个字符,因此,除非先将希伯来语字符音译为英语(拉丁语),否则您的英语/希伯来语示例将不会转换为相同的Soundex代码。西里尔字母和中文都有从本地字符集到拉丁语的音译-但操作方式有所不同。
研究Metaphone;但是,它在概念上类似于Soundex,并且具有类似的局限性。
我不知道跨语言的对等词。
我不知道IPA(国际语音字母)是否有帮助。您必须将英语和希伯来语翻译为IPA,然后使用一些相似性功能来关联相关的声音。