Damerau-Levenshtein语言特定怪癖的距离

时间:2011-01-04 13:09:54

标签: compare fuzzy linguistics levenshtein-distance fuzzy-comparison

对讲荷兰语的人来说,两个字符“ij”被认为是一个可以用“y”轻松交换的单个字母。

对于我正在进行的项目,我希望有一个Damerau–Levenshtein distance的变体,它将“ij”和“y”之间的距离计算为1而不是当前值2。

我自己一直在尝试,但失败了。我的问题是我不知道如何处理这两个文本长度不同的事实。 有没有人有关于如何解决这个问题的建议/代码片段?

感谢。

3 个答案:

答案 0 :(得分:2)

维基百科文章的术语相当松散。 “自然语言”中没有“字符串”这样的东西。有自然语言的音素,可以用书面字符和字符组合来表示。

有些角色组合是历史惯例的遗迹,它们一直存在于现代,如现代英语“粗糙”,其中“gh”听起来像-f-或根本没有声音。在我看来,在关注原始“字符串”时,算法必须对语言和正交约定的历史关系不可知,这导致一些任意度量,只要字符组合与单个音素相关联。它如何衡量“粗糙”到“ruf”?或“通过”到“直通”? 或德国o-umlaut到“oe”?

在你的情况下,-y-可以用-ij-进行语音和正交交换。那么根据算法是什么呢,两个删除后跟一个插入,或者-j-或-i-的单个删除,然后将剩余字符转换为-y-?或者是-ij-被合并并且合并之后是换位?

我建议您在应用算法之前使用另一个未使用的组合字符-ij-,也许是U00EC,带有重音符号的拉丁文小写字母。

算法如何处理多码点字符?

答案 1 :(得分:1)

由于它测量距离的方式,D-L距离本身不会为你处理它。

由于这里没有涉及代码(或语言),我只能给你一个建议,以确保所有字符串都遵循相同的结构。

为了澄清你提出的一般性问题后的情况,

请记住,DL距离比较角色的角色并且实际上并没有自己读取你的字符串,因此你必须在比较之前解析,因为ij不应该与y交换的情况将导致其他而不是问题。

答案 2 :(得分:0)

一个想法是将每个字符串翻译成某种构造的正交表示法,其中诸如“ij”和英语“gh”“th”和朋友之类的有向图只有一个字符长。在做Damerau-Levenshtein时,所有类型的替换都不必相等,因此你可以使用你想要的任何惩罚,但是表需要在本地填充,因此你真的希望每个声音都是表格中的一个单元格。

然而,当“ij”不打算作为“ij”而是拼写错误或在字词分割边界(我不知道这是否会发生在荷兰语中),或者在任何其他情况下它不是实际上(意思是)有向图。

否则你需要做一些看法,这会使事情变得复杂但不应该改变算法的增长顺序(我相信),前提是你只看周围的恒定数量的单元格。不变的因素仍然会大得多。