mecab使って姓名を分かち書きしてみたらすこぶる良かった
どうも、前処理班 @geeorgeyです。
数日前にこんな事を書きました。
Salesforceを1年半運用したら重複データだらけで死んだのですが、便利な機能がありまして
一年程度運用してみて、その活用の勘所などもわかってくると、社内にあるいろんなデータをすべてインポートして統合したくなるものです。
それで、やってるんですけどね。2万レコードを超すレコードがあるのだけど、姓名がスペース等の区切り文字が無い状態になっているリストが発掘された訳です。しかもすでにSalesforceに入ってるものとの重複状態がわからないんですよ。死ねる。
それで、とりあえず苗字を切り分けましょうと。やってみた
日本人の8割の人は苗字が2文字。いや、正確な値は知らないけどまぁそんなイメージ。
— 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 10
佐々木を排除。 — 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 10
長谷川を排除
— 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 10
結局ターゲットになる情報がどんなゆらぎを持っているかが見えないので俺が学習する必要があるのであった。死にたい — 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 10
ほぼ手作業だよねこの方法。ってことで死にたくなったのでやめた。駄目だこりゃと思って数日放置。
苗字の全パターンのDBがあれば姓名がくっついた名前フィールドの分割が簡単にできるのになぁ。。。
— 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 10
そうかそうか、、、11万種か、、、http://t.co/KnHtv1rQeT — 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 10
簡単にできねーよ
— 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 10
自暴自棄になった。そりゃなるよ。 2日たったら神が降りてきた。
mecabでやりゃいいのか。 — 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 12
ああそうか、mecabなんてものがあったじゃないかと。
最初からこうしていればよかったんや。。。
— 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 12
金曜の夕方だったので途中までやって放置。 今日続きをやってみたらだいたい解決しちゃってナイスな感じでしたよと。
mecabに何をやらせたのか
http://qiita.com/awakia/items/9a0dec41d91c997c74b4 基本的にはここに書いてあることをそのままやってる。 Macにmecabインストールして、人名辞書をダウンロード→mecabの辞書用に若干修正してmecabに喰わせる。
俺のmecabが賢くなってゆく — 吉田丈治 イカ→geeorgey (@geeorgey) 2015, 6月 15
こうやって賢くなったmecabに、最初の2万件超の人名リストを喰わせると9割程度がいい感じに姓名分割される。ヒャッハー、素敵。
詳細な手順
mecabとipadicのインストール。
リンク先では一発でやってたけど、エラー出たので分離して実行。
brew install mecab
brew install mecab-ipadic
ここはそのままやる
からオリジナルをダウンロードしてきて内容を置き換える。
cp Download/mecab-ipadic-2.7.0-20070801/* /usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic/
必要な辞書データをダウンロードしてこよう
人名辞書一覧
http://www.mwsoft.jp/programming/munou/ime_dictionary_link.html#person
加工する。UTF-8とeuc-jpを行ったり来たりしたのがちょっと面倒だった。
lhaの展開はstuffit expanderとか入れとけばダブルクリックでできます。コマンドラインでやってもいいけどそのへんは好みで。
直視,,,10000,名詞,固有名詞,人名,名,*,*,なおよし,ナオヨシ,ナオヨシ
左から,
http://www.vector.co.jp/soft/data/writing/se066951.html
コマンドは
$ mecab -O wakati 入力ファイル名.csv > 出力ファイル名.csv
というかんじ。やってみると、スペースで区切られた名前ファイルに変換されている。
素晴らしい…素晴らしいよmecab。ITってのはこうやって使うもんだよ…
ディープラーニングとかやってみたいと思いつつ時間がとれてない@geeorgeyでした。それでは