对于讲荷兰语的人来说,两个字符“ij”被认为是一个字母,可以轻松地与“y”交换。
对于我正在从事的项目,我想要 Damerau–Levenshtein distance 的变体将“ij”和“y”之间的距离计算为 1,而不是当前值 2。
我自己也尝试过,但失败了。我的问题是,我不知道如何处理两个文本长度不同的事实。 有人对如何解决这个问题有建议/代码片段吗?
谢谢。
最佳答案
维基百科文章的术语相当宽松。 “自然语言”中不存在“字符串”这样的东西。自然语言中存在音素,可以用书面字符和字符组合来表示。
一些字符组合是历史惯例的遗迹,一直延续到现代,例如在现代英语“rough”中,“gh”听起来像 -f- 或根本不发出声音。在我看来,在关注原始“字符串”时,算法必须对语言和拼写约定的历史关系不可知,这会在字符组合与单个音素相关时导致一些任意的度量。如何衡量“粗糙”到“ruf”?还是“通过”到“通过”? 或者德语的 o 元音变音“oe”?
在您的情况下,-y- 可以在语音和拼写上与 -ij- 交换。那么根据算法,两次删除后插入,还是一次删除 -j- 或 -i- 然后将剩余字符转置为 -y- 是什么?或者 -ij- 被合并并且合并之后是转置?
我建议您在应用算法之前为 -ij- 使用另一个未使用的组合字符,也许是 U00EC,带有重音符号的拉丁小写字母 i。
该算法如何处理多码点字符?
关于compare - 语言特定怪癖的 Damerau–Levenshtein 距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4593930/