はじめに
株式会社hokanにて代理店様の導入をお手伝いしています。既存のシステムからhokanへ大切なデータを移行することがメインのタスクとなっています。
その中で氏名が姓名や住所が一つのカラムとして連携されたりしてくるのでそれを分割するのが課題となることがあります。
今回はMeCabを使って姓名の分かち書きを試してみたいと思います。
MeCabのインストール
まずはMeCabと辞書をインストールします。
$ brew install mecab
$ brew install mecab-ipadic
ひとまず何も考えずのそのまま分かち書きを試してみる
テストデータはFakerを使って10件程度で実験します。以下のようなファイルを作成しました。
佐々木さゆり
伊藤裕太
吉田花子
小林里佳
長谷川直人
池田知実
山崎英樹
加藤智也
吉田加奈
三浦智也
早速実行してみます。
$ mecab -O wakati test.txt > output.txt
その結果です。これだけでもそれっぽい結果が返ってきますが、もう少し精度を上げたい。
佐々木 さゆり
伊藤 裕 太
吉田 花子
小林 里佳
長谷川 直人
池田 知 実
山崎 英樹
加藤 智也
吉田 加奈
三浦 智也
人名辞書を作成して使ってみる
人名の辞書を作成してそれを使って実行を試してみます。
人名の元データは下記から適当にダウンロードして使わせてもらいました。
辞書を作成するにあたり、まずは下記フォーマットのCSVに変換します。
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分3,活用形,活用型,原形,読み,発音
佐々木,,,8500,名詞,固有名詞,人名,名,*,*,ささき,ササキ,ササキ
表層形は対象の単語そのものです。コストが比較的重要な気がしました。コストは低い方が基本的には優先されるようですので、今回は適当に「10000 - 単語の文字数 * 500」とかで設定しました。うまくいかない場合はこの辺りを調整すると良いのかもしれません。
次に下記のコマンドでCSVを辞書に変換します。jinmei_dict.csvをoriginal.dicに変換をかけています。パスについてはそれぞれの環境に合わせて修正してください。
$ /usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u original.dic -f utf-8 -t utf-8 jinmei_dict.csv
そして作成された辞書を/usr/local/lib/mecab/dic/originalを作成し、そこにコピーする。
$ cp original.dic /usr/local/lib/mecab/dic/original
最後に/usr/local/etc/mecabrcに以下の一文を追加する。
userdic = /usr/local/lib/mecab/dic/original/original.dic
作成した辞書を使って再度分かち書きを実行してみます。
$ mecab -u /usr/local/lib/mecab/dic/original/original.dic -O wakati test.csv > output2.csv
佐々木 さゆり
伊藤 裕太
吉田 花子
小林 里佳
長谷川 直人
池田 知実
山崎 英樹
加藤 智也
吉田 加奈
三浦 智也
想定通りの結果が出ました!
最後に
テストデータを10,000件ほどに増やして実行してみましたが、まだまだ完璧と言うわけでありませんでした。ただ、これまでの手順で辞書を更新していけば精度は上がってくることがわかりました。
こんな感じで住所なんかも都道府県、市区郡、町村とかにうまく分割できそうですね。