我知道SOUNDEX和(双)音位,但这些并不让我测试单词的相似性作为一个整体 - 例如“你好”的声音非常相似,“再见”,但是这两种方法将它们标记为完全不同的。

是否有任何的Ruby库,或你知道的任何方法中,能够确定两个单词之间的相似性? (任一个布尔是/不相似的,或数值40%相似)

编辑:如果有一个简单的方法,以不同的方言或语言“在下降”额外奖励积分

有帮助吗?

解决方案

我觉得你描述Levenshtein距离。是的,还有该宝石。如果你到纯Ruby去的文本宝石。

$ gem install text

有更多的细节,但这里的问题的症结所在文档:

Text::Levenshtein.distance('test', 'test')    # => 0
Text::Levenshtein.distance('test', 'tent')    # => 1

如果你真行与原生扩展...

$ gem install levenshtein

它的用法类似于。它的表现非常好。 (它处理在我的系统每分钟〜1000点拼写校正。)

如果您需要了解两个词的相似程度,超过字长使用距离。

如果你想要一个简单的相似性测试,考虑是这样的:

未经测试,但直线前进:

String.module_eval do
   def similar?(other, threshold=2)
    distance = Text::Levenshtein.distance(self, other)
    distance <= threshold
  end
end

其他提示

您可能首先使用进行预处理同义词数据库,这将字转换类似含义的同一个词的话。有各种不同的词库数据库在那里,不幸的是我无法找到一个体面的免费的英语( HTTP:/ /www.gutenberg.org/etext/3202 是我找到了一个,但是这并不能显示什么关系的特定的词有(像类似;相反,交替意义,等等),所以对所有的字同一行有部分的关系,但你不会知道,关系是什么)

但例如匈牙利有一个很好的免费词库数据库,但是你没有同音/音位匈牙利文本...

如果您有数据库编写预处理文本是不是太狠了计划(最终这是一个简单的搜索替换,但你可能使用单面或methaphone太想预处理词库数据库)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top