Perl模块用于文本比较。

5
有没有人能推荐一个可以比较两个字符串并返回它们匹配程度的Perl模块?我在CPAN上做了广泛搜索,虽然有类似的模块如String::Approx和Data::Compare,但它们并不符合我的要求。假设我有两个字符串:“I love you”和“I boht you”。我想要一种功能,它将比较这两个字符串,考虑到许多参数,按正确顺序匹配单词(例如,作为字符串中第一个单词的“love”不应与第二个字符串中第4个单词中的“love”“匹配”,即使两个字符串都具有该单词),单词不匹配但拼写几乎相似(例如说“love”和“loge”),单词数量等,并返回一个指数,比如在1的刻度上从0到1表示两个字符串之间的相似度程度。是否有这样的Perl模块?

2
你是否可以使用 http://search.cpan.org/dist/Text-Levenshtein/Levenshtein.pm 来实现你所需要的功能? - Paul Tomblin
嗯,我不确定,Levenshtein距离的示例和维基百科文章仅涉及单词比较,没有字符串比较。因此,我不知道它如何比较具有某些匹配单词但位置不同的字符串,这不应该被视为匹配。 - SexyBeast
进行这种字符串比较对于人类来说是微不足道的,但对于计算机来说却非常困难。 - Paul Tomblin
是的,我知道,这很雄心勃勃!但是Perl可以做很多美妙的事情,也许像这样的东西已经被设计出来了! - SexyBeast
3
你并没有排除使用Text::Levenshtein。听起来你只是对你想要如何比较这些字符串有一个模糊的想法。Levenshtein距离是将一个字符串转换为另一个字符串所需的字符插入、删除或更改的数量。例如I love youI boht you之间的距离为3,而与I loge you之间的距离为1。那么你希望从中得到什么不同的结果呢? - Borodin
是的,也许可以这样做,我不确定,你说得对,我只有一个模糊的想法,关于我将要进行什么样的比较。我会尝试一下并告诉你!谢谢。 - SexyBeast
1个回答

6

有许多这样的模块。然而,通常情况下,您必须以某种特殊方式利用它们来考虑自己的假设。大多数字符串比较工具只实现了一种算法来比较一个字符串和另一个字符串。大多数假定,如果您需要做出具体的策略决策,您将自己编写它们。

就个人而言,由于存在错误和缺乏ut8支持,我不确定是否推荐Text::Levenshtein。然而,这些搜索将揭示许多潜在的模块,您可以研究并确定哪种方法最适合您的目的(基于常见算法名称进行此类操作):

如果您对口语相似性感兴趣,还可以了解音韵比较。

哇,好多资源,我会查找它们的。谢谢! - SexyBeast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接