2

約 100 万レコードの管理データの大きなファイルがあります。このデータセットでは、個々の人を複数回表すことができます。記録の約半分には、記録を個人にマッピングする識別コードがあります。そうでない半分については、名前をあいまい一致させて、同一人物に属する可能性のあるレコードにフラグを付ける必要があります。

識別コードを含む記録を見て、同じ個人の名前の記録で発生した違いのリストを作成しました。

  • ジョン・スノウ vs ジョン・ターガリエン・スノウなど、ミドルネームを含める
  • 2 番目の姓を含める 例: Jon Snow vs Jon Targaryen-Snow
  • ニックネーム / 名の短縮形 例: Jonathon Snow vs Jon Snow
  • ジョン・スノウ vs スノー・ジョンなどの名前の反転
  • スペルミス/タイプミス/バリアント: 例: Samual/Samuel、Monica/Monika、Rafael/Raphael

私が求めている試合の種類を考えると、Rで簡単に実装できるagrep()/levenshteinの距離を使用するよりも良いアプローチはありますか?

編集: R の agrep() は、この問題に対してあまりうまく機能しません。名前が異なる方法で記録されることを考慮して、多数の挿入と置換を許可する必要があるため、多くの誤った一致がスローされます。 .

4

2 に答える 2

1

私は複数のパスを作成します。

"Jon .* Snow"- ミドルネーム

"Jon .*Snow"- 2 番目の姓

ニックネームには、長い形式から短い形式へのマッピングの辞書が必要です。ニックネームを処理する正規表現はありません。

"Snow Jon"- 反転 (当たり前)

agrep は軽微なスペルミスを処理します。

また、名前をファースト、ミドル、ラストにトークン化することもできます。

于 2017-07-28T04:06:13.913 に答える