2013-02-22 29 views
0

我有兴趣用Perl编写的计算两个字符串之间的距离(或相似)的哈罗 - 温克勒模块:什么是Text :: JaroWinkler :: strcmp95的第三个参数?

http://search.cpan.org/~scw/Text-JaroWinkler-0.1/JaroWinkler.pm

函数的语法,我不清楚;我找不到任何明确的文件。

下面是示例代码:

#!/usr/bin/perl 

use 5.10.0; 
use Text::JaroWinkler qw(strcmp95); 
print strcmp95("it is a dog","i am a dog.",11); 

究竟的11代表什么?我收集它是一个长度。哪个长度?我想检查的字符数量的长度?它需要在那里吗?

+0

我最近实际上一直在使用该模块。我不确切知道11是什么。我所学到的是当我将它设置为两个字符串的最大长度时,我获得了最佳结果。 – Alex 2013-02-22 01:42:07

+0

谢谢@亚历克斯! “最佳结果”是什么意思? – paso 2013-02-22 02:03:33

+0

我不记得确切发生了什么,当它不是最大的时候,我把它全部设置在我的工作电脑上,所以我现在无法检查。我认为它只是返回不准确的结果(无论是0还是1)。所以这个说法可能会告诉它有多少字母匹配。在他们的例子中,两个字符串的长度完全相同,这对于一个示例来说很好,但对于任何真实世界的应用程序来说都不太好。如果我冒险猜测,我会说这意味着“最多匹配这么多人物”,但这只是一个猜测。 – Alex 2013-02-22 02:15:11

回答

2

查看the source为您的问题的答案。它包含这一行:

$ying = sprintf("%*.*s", -$y_length, $y_length, $ying); 

所以$y_length被用来重新格式化的字符串,如果必要的填充它们,并将它们修整到一个相同的长度。然后将这些等长字符串输入到实际的比较函数中。这表明亚历克斯是正确的,给予长度为max(length $ying, length $yang)将在大多数情况下给出最好的结果。

阅读源代码还会发现,如果您无法提供$y_length,则不会提供默认值。所以你会将空字符串与空字符串进行比较。那些应该有一个非常短的JW距离。

+0

谢谢你的发现和发布!你是否说示例代码中的“11”意在比较多达11个字符?如果这个数字大于给这个函数的两个字符串的长度,什么会被“填充”? – paso 2013-02-22 12:01:11

+0

是的,该数字指定要比较多少字符串。如果它大于原始字符串的长度,则这些字符串将用空格填充到指定的长度。有关'sprintf'参数在一般情况下如何工作的详细信息,请参阅'perldoc -f sprintf'。 – darch 2013-02-22 18:18:52

+0

谢谢!你知道“空间”如何影响比分?它们会不同于说随机断言的X或说随机插入的P? – paso 2013-02-22 18:37:20

相关问题