1

Jaro-Winkler 分数应该有多大才能说这两个字符串可能相似,是否有行业标准?

我有一个字符串列表,我想看看它们中的任何一个是否是詹姆斯这个名字的合理印刷错误。我使用了用 C 编写的 perl 模块,反过来,我从 stata 中的数据集中收到了它的字符串。(所以如果有一个Stata模块,我会全神贯注!)

这是到目前为止我在 perl 中编写的用于与字符串 James 进行比较的代码。

   #!/usr/bin/perl

   use 5.10.0;
   use Text::JaroWinkler qw( strcmp95 );
   use List::Util qw(min max);

   open( my $l,  '<', 'Strings.txt' )          or die "Can't open locations: $!";
   open( my $o,  '>', 'JW.txt' )          or die "Can't open locations: $!";

   while ( my $line = <$l> ) {
    chomp($line);
    my $length = min(length($line),length('James'));
    my $jarow = strcmp95($line, 'JAMES', $length);
    print "$line,'JAMES',$jarow,\n" ;
    print( $o ("$line,'JAMES',$jarow"),"\n" );

  }
close $o;

我也不确定我是否正确或有效地解释了 Jaro-Winkler 函数的第三个参数。也许我应该做 length('JAMES') ?

4

1 回答 1

2

尝试从 SSC 用户编写的使用Levenshtein distancestrgroup进行匹配。它带有另一个命令,您可以使用它来执行此操作。一些玩具代码给你一个想法:levenshtein

ssc install strgroup

input str8 names
Bob
James
Jim
Jameson
end

gen james = "James"

levenshtein names james, gen(LD)

然后,您可以按 LD 进行排序,以了解在您的情况下什么可能有效。

另一种方法是这样做,它为您创建组:

strgroup names , gen(group) threshold(0.5)

玩弄门槛。

我认为不存在标准,这些程序仍然需要大量的手工工作。

于 2013-02-22T17:39:55.880 回答