一个有趣的问题,属于文本挖掘和信息检索的主题。通常,您可以使用词干(词形还原)算法甚至通过更简单的启发式方法来实现描述的匹配。
1.) 后一种情况是处理两个字符串以获取每个字符串的标准化版本,然后进行比较。我们可以用一个空格替换较大的空格,并将两个字符串上的所有字符都小写。字符串规范化示例:
string.gsub(/\s+/, ' ').downcase
这不适用于艰难的缩写。
2.) 如果您使用词干分析器将每个单词标记标准化为通用基本形式,您可以获得更好的结果。词干的几个例子:words=>word,foot=>foot,construction=>construct,... 一旦你得到了词库(也称为 lemas),你可以将它们连接成一个字符串。然后做个对比。通常,词干分析器会为你做小写,所以你可以跳过这一步。
所以这两个字符串:
"Hazard Const. Company"
"hazard construction company"
转换为:
"hazard construct company"
代码取决于实际使用的词干分析器。比如你可以看看这个:https ://github.com/aurelian/ruby-stemmer
词干的实际输出也取决于使用的词干分析器。词干分析器 (lemmatizers) 的工作方式不仅仅是通过某种修剪规则,而且它们还尝试将单词与内部词库 (lemas) 进行匹配。因此,一个好的词形还原器会识别 Const。缩写并将其与构造引理匹配。
由于不是所有的缩写都能被识别(例如只有 90%),所以最好不要匹配确切的字符串。但是尝试通过距离计算(如@7stud 建议的那样)计算它们的相似度,并根据测试数据结果调整可接受相似度的阈值。这是信息检索中的常用方法。您可以自定义和专业化您的文本处理的越多,您将获得更好的结果。反之亦然——你尝试构建通用处理的次数越多,它就越难,结果也会更糟。