MeCabを使って姓名の分かち書きを試してみる


はじめに

株式会社hokanにて代理店様の導入をお手伝いしています。既存のシステムからhokanへ大切なデータを移行することがメインのタスクとなっています。
その中で氏名が姓名や住所が一つのカラムとして連携されたりしてくるのでそれを分割するのが課題となることがあります。
今回はMeCabを使って姓名の分かち書きを試してみたいと思います。

MeCabのインストール

まずはMeCabと辞書をインストールします。

$ brew install mecab
$ brew install mecab-ipadic

ひとまず何も考えずのそのまま分かち書きを試してみる

テストデータはFakerを使って10件程度で実験します。以下のようなファイルを作成しました。

test.txt
佐々木さゆり
伊藤裕太
吉田花子
小林里佳
長谷川直人
池田知実
山崎英樹
加藤智也
吉田加奈
三浦智也

早速実行してみます。

$ mecab -O wakati test.txt > output.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
output2.csv
佐々木 さゆり  
伊藤 裕太  
吉田 花子  
小林 里佳 
長谷川 直人  
池田 知実  
山崎 英樹  
加藤 智也  
吉田 加奈 
三浦 智也

想定通りの結果が出ました!

最後に

テストデータを10,000件ほどに増やして実行してみましたが、まだまだ完璧と言うわけでありませんでした。ただ、これまでの手順で辞書を更新していけば精度は上がってくることがわかりました。
こんな感じで住所なんかも都道府県、市区郡、町村とかにうまく分割できそうですね。