我对如何完成此任务缺乏想法。我正在计算单词的频率,实际上是单词的基本形式(例如,运行将被视为运行)。我查看了Levenshtein距离的一些实现(我遇到的一个实现是from dotnerperls)。
我也试过双重Metaphone,但这不是我想要的。
所以,请给我一些关于如何调整Levenshtein距离算法对语言相似单词进行分类的一些想法,因为该算法仅用于确定编辑的数量,而不考虑它们在语言上是否相似
实施例: 1.“运行”将被视为“运行”一词的一次出现 2.“字”同样也会出现“字” 3.“恐惧”不会被视为“装备”的出现
另外,我在C#中实现它。
提前致谢。
编辑:我按照Rene的建议编辑了它。 另一个说明: 我试图考虑考虑一个单词是否是另一个单词的子串,但该实现不会那么动态。 我认为另一个想法是:“如果将-s或-ing添加到string1,string1 == string2,则string2会出现string1。”然而,事实并非如此,因为有些词语具有不规则的复数形式。
答案 0 :(得分:5)
您尝试解决的任务称为Stemming或Lemmatisation。
正如你已经想到的那样,Levenshtein-Distance不是这里的方式。 英语的常见词干算法包括Porter-和Snowball-Stemmer。 如果你谷歌,我相信你会找到一个C# - 实现其中一个。