2013-02-22 61 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

相關問題