1

2 つの文字列が類似している可能性が高いと判断するために、Jaro-Winkler スコアがどれくらい大きくなければならないかについての業界標準はありますか?

文字列のリストがあり、それらの中に James という名前のタイプミスがあるかどうかを確認したいと考えています。私は C で書かれた perl モジュールを使用しました。これは、stata のデータセットから受け取った文字列です。(だから Stata モジュールがあれば、私はすべての耳になります!)

文字列 James と比較するためにこれまでに perl で書いたコードを次に示します。

   #!/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 関数の 3 番目のパラメーターを適切に、または効果的に解釈しているかどうかもわかりません。おそらく、 length('JAMES') を実行する必要がありますか?

4

1 に答える 1

2

レーベンシュタイン距離strgroupを使用したマッチングのために、SSC からユーザー作成を試みます。これを行うために使用できる別のコマンドが付属しています。あなたにアイデアを与えるためのいくつかのおもちゃのコード:levenshtein

ssc install strgroup

input str8 names
Bob
James
Jim
Jameson
end

gen james = "James"

levenshtein names james, gen(LD)

次に、LD で並べ替えて、自分のケースで何がうまくいくかを知ることができます。

もう 1 つの方法は、これを行うことです。これにより、グループが作成されます。

strgroup names , gen(group) threshold(0.5)

しきい値をいじってみましょう。

標準は存在しないと思いますし、これらの手順には依然として多くの手作業が必要です。

于 2013-02-22T17:39:55.880 に答える