Perlを使ってエクセル表 (CSV) のデータから重複している行を抽出する方法を紹介します。集めた名簿データを名寄せ (同じ人物データが複数あるものを一つにまとめる) するために活用する事を想定しています。

名寄せとは

名簿データで重複する人物のデータを一つに統合する事を「名寄せ (なよせ) 」と呼びますが、これは実務上時間を取られる作業です。

例えば、日本語は表記が多岐に渡りますので、「小澤太郎」さんと「小沢太郎」さんはもしかしたら同一人物かもしれませんし、違う人物かもしれません。氏名、住所、メールアドレス、電話番号などの情報があったとしても、どれか一つの項目だけで同一人物と特定できるものではなく、最終的には機械的に候補を表示させたものから、人間の目で判断してデータを統合して行く事が必要になります。

同一人物かの判定が困難な例

現在、携帯電話の番号が一致するとかなりの確かさで「同一人物」と考えられますが、それ以外の場合に判別が難しい例を少し挙げておきます。

メールアドレスが一致している

メールアドレスが一致していても「同一人物」とは言い切れない場合があります。例えば、会社などでグループアドレスを使っている場合です。info@company-name.co.jp などのアドレスを複数の人で共有して使っている場合がありますので、メールアドレスが同じだからといって単純に氏名を書き換える事ができません。

同姓同名

同姓同名の知り合いが実は別人である事は稀ですが、同姓同名だからといって単純に同一人物としてデータを統合してしまう訳にも行きません。この場合はメールアドレスや電話番号が一致しているかなどを合わせて判別する必要があります。

漢字の違い・苗字の違い

最初に挙げた「小澤」と「小沢」など、データとして判別すれば全く違う字にも関わらず、同じ苗字と考えられる表記があります。また、結婚で姓が変わったり、通常は旧性を使いつつ、支払など公的な処理をする場合は本名を使うなどの使い分けも珍しくありません。この場合も、メールアドレスや電話番号まで比べながら重複かどうかの判別をする必要があります。

その他の実務上の困難

ここに挙げた以外に、せっかく重要な判別要素となる電話番号について、比較項目が決められないといった問題もあります。殆どの人が携帯電話を所持している今日では、「電話番号」と「携帯電話番号」欄があっても、「電話番号」欄に携帯電話番号を記入する事も多いからです。

重複データ判別の基準

上に説明したように名寄せには様々な基準が考えられますが、ここでは下記の場合に重複候補として抽出する事にしました。

  1. 電話番号、携帯電話番号、またはメールアドレスのいずれかが一致(※1)
  2. 「下の名前が一致」かつ以下のいずれか。
    1. 「苗字の先頭または末尾が一致」
    2. 「メールアドレスのドメイン名以降(※2)が一致」
  3. 「苗字が一致」かつ以下のいずれか。
    1. 「下の名前の先頭または末尾が一致」
    2. 「メールアドレスのドメイン名以降(※2)が一致」

※1 リストの中に同じ会社の取引先担当者など、電話番号が同じ他人が多い場合は、電話番号を判別対象から外した方がいいかもしれません。

※2 ここでは「メールアドレスのドメイン名以降が一致した」を「同じ組織の人」と想定していますが、リスト内に Gmail や Hotmail、携帯メールアドレスなどが多い場合は抽出されるデータが多すぎる可能性があります。抽出されてくるデータが多い場合は、この基準は除いた方がいいかもしれません。

プログラム上はこの判別の下準備として、下記の前処理をします。

  • 090、080、070 で始まる電話番号とそれ以外の電話番号を別々の項目に振り分けておく。
  • 電話番号と携帯電話番号のハイフンやカッコ等の記号を除く。
  • メールアドレスの@以降だけを別の項目として保存しておく。
  • 苗字と下の名前のそれぞれ先頭、末尾の文字を別の項目として保存しておく。

CSVファイルのサンプル

プログラムのテストに使ったCSVサンプルは以下の通りです。

1,株式会社山田商事,鈴木,太郎,suzuki@yamada-company.co.jp,090-0987-6543,06-9999-8888
2,株式会社鈴木貿易,鈴木,一郎,suzuki@suzuki-company.co.jp,03-2345-6789,
3,三晃珈琲有限会社,斎藤,隆,saito@sanko-coffee.biz,045-2345-6789,080-2222-1111
4,DECデザイン,田中,洋子,info@somewhere.jp,0422-22-3456,070-2222-3333
5,メキシコ流通株式会社,高瀬,智子,contact@mexico-logistica.co.jp,0476-23-0987,
6,株式会社鈴木貿易,鈴木,一朗,suzuki@suzuki-company.co.jp,090-1111-2222,
7,,斉藤,隆,saitotakashi19720101@gmail.com,080-2222-1111,
8,,木梨,洋子,yoko.t@somewhere.jp,070-2222-3333,
9,メキシコ流通株式会社,ゴンサレス,アントニオ,contact@mexico-logistica.co.jp,52-1-55-6666-7777,
10,スリランカマジック株式会社,三条,隆,takashi@sri-lanka-magick.com,03-9999-2222,

次は:>名寄せのための重複抽出サンプル Perl プログラム