【问题标题】:What is the third parameter to Text::JaroWinkler::strcmp95 for?Text::JaroWinkler::strcmp95 的第三个参数是什么?
【发布时间】:2013-02-22 21:51:09
【问题描述】:

我对用 Perl 编写的用于计算两个字符串之间的距离(或相似度)的 Jaro-Winkler 模块感兴趣:

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 到底代表什么?我认为它是一个长度。哪个长?我要检查的字符数量的长度?必须在那里吗?

【问题讨论】:

  • 我最近实际上一直在使用该模块。我不知道11到底是做什么的。我学到的是,当我将它设置为两个字符串的最大长度时,我得到了最好的结果。
  • 谢谢@Alex! “最佳结果”是什么意思?
  • 我不记得当它不是最大值时发生了什么,我已经在我的工作计算机上设置了所有这些,所以我现在无法检查。我认为它只是返回了不准确的结果(只有 0 或 1)。所以这个论点可能告诉它要匹配多少个字母。在他们的示例中,两个字符串的长度完全相同,这对于示例来说很好,但对于任何实际应用程序来说都不太好。如果我冒险猜测,我会说它的意思是“最多匹配这么多字符”,但这只是猜测。
  • 谢谢亚历克斯。如果您能检查一下您下次上班的时间,我将不胜感激。我的预感是第三个参数设置比较的长度,使得比较的长度为 min(length(函数中的第一项),长度(函数中的第二项),指定的第三项)。
  • Alex:是否有某种行业标准可以说明 Jaro-Winkler 分数应该有多大才能说这两个字符串可能相似?

标签: c string perl perl-module jaro-winkler


【解决方案1】:

请参阅the source 以获取您问题的答案。它包含这一行:

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

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

阅读源代码还表明,如果您未能提供$y_length,则不会提供默认值。因此,您将比较空字符串和空字符串。那些应该有很短的 JW 距离。

【讨论】:

  • 感谢您找到并发布!您是说示例代码中的“11”意味着最多可以比较 11 个字符吗?如果该数字大于提供给函数的两个字符串的长度,那么将“填充”什么?
  • 是的,数字指定要比较多少字符串。如果它大于原始字符串的长度,则这些字符串将用空格填充到指定的长度。有关sprintf 参数在一般情况下如何工作的详细信息,请参阅perldoc -f sprintf
  • 谢谢!你知道“空格”是如何影响分数的吗?它们与随机断言的 X 或随机插入的 P 不同吗?
  • @user2096518 我没有实际的想法,但从 JW 是一个编辑距离这一事实推测,用于填充的字符应该对函数的值没有影响。但是对于真正的答案,测试它并查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2020-03-21
  • 2020-12-26
  • 2012-05-10
相关资源
最近更新 更多