embulk-filter-kuromojiという日本語解析するプラグインを作りました。
kuromojiを使えば漢字を読みがなに変換したり形態素解析したりすることが出来ます。
今回はサンプルに従って幾つか代表的なユースケースを書きます。
使い方
今回のサンプルデータ
title |
---|
GMが燃料電池車の開発状況について講演、ホンダとの共同研究にも言及 |
コンピュータエンターテインメントが向かう先 |
Linear Technology、140V入力が可能な最大400mA出力の降圧型DC-DCコンバーターICを発売 |
三菱電機、非飽和電圧検出機能を搭載した1200V耐圧のパワー半導体駆動用ICを発売 |
東芝とSK Hynixがナノインプリントリソグラフィを共同開発、2017年の量産目指す |
スマホと連携できる超小型FPGA開発キット、IoT向けにマクニカが量産出荷 |
ICチップの「指紋」をIoTのセキュリティ基盤に使う、三菱電機が遅延ベースのPUF技術を発表 |
ユーザーが操作アプリや周辺アクセサリーを開発、オリンパスのレンズ交換型カメラ |
「インドネシアをもっと骨太の拠点にしていきたい」、スズキ常務役員の長尾氏 |
インドネシアとタイの不振で営業利益は横ばい、スズキの2014年度第3四半期決算 |
読みがなに変換
漢字を読みがなに変換したいだけの場合
in:
type: mysql
host: localhost
user: root
database: hoge
query: |
select title from article limit 10
filters:
- type: kuromoji
keep_input: false
key_names:
- title
settings:
- { # 読みに変換、delimiterを空文字列にしているので形態素解析せず「読み」に変換するだけ
suffix: '_reading_only', method: 'reading', delimiter: ''
}
out:
type: stdout
methodをreadingにすると、カタカナに変換して出力されます。
$ embulk preview yml/kuromoji.yml
2015-12-03 14:30:13.117 +0900: Embulk v0.7.7
2015-12-03 14:30:15.343 +0900 [INFO] (preview): Loaded plugin embulk-input-mysql (0.6.0)
2015-12-03 14:30:15.385 +0900 [INFO] (preview): Loaded plugin embulk-filter-kuromoji (0.2.0)
2015-12-03 14:30:15.444 +0900 [INFO] (preview): Fetch size is 10000. Using server-side prepared statement.
2015-12-03 14:30:16.620 +0900 [INFO] (preview): Fetch size is 10000. Using server-side prepared statement.
2015-12-03 14:30:16.629 +0900 [INFO] (preview): SQL: select title from article limit 10
2015-12-03 14:30:16.633 +0900 [INFO] (preview): > 0.00 seconds
+---------------------------------------------------------------------------+
| title_reading_only:string |
+---------------------------------------------------------------------------+
| GMガネンリョウデンチシャノカイハツジョウキョウニツイテコウエン、ホンダトノキョウドウケンキュウニモゲンキュウ |
| コンピュータエンターテインメントガムカウサキ |
| Linear Technology、140Vニュウリョクガカノウナサイダイ400mAシュツリョクノコウアツガタDC-DCコンバーターICヲハツバイ |
| ミツビシデンキ、ヒホウワデンアツケンシュツキノウヲトウサイシタ1200VタイアツノパワーハンドウタイクドウヨウICヲハツバイ |
| トウシバトSK Hynixガナノインプリントリソグラフィヲキョウドウカイハツ、2017ネンノリョウサンメザス |
| スマホトレンケイデキルチョウコガタFPGAカイハツキット、IoTムケニマクニカガリョウサンシュッカ |
| ICチップノ「シモン」ヲIoTノセキュリティキバンニツカウ、ミツビシデンキガチエンベースノPUFギジュツヲハッピョウ |
| ユーザーガソウサアプリヤシュウヘンアクセサリーヲカイハツ、オリンパスノレンズコウカンガタカメラ |
| 「インドネシアヲモットホネブトノキョテンニシテイキタイ」、スズキジョウムヤクインノナガオシ |
| インドネシアトタイノフシンデエイギョウリエキハヨコバイ、スズキノ2014ネンドダイ3シハンキケッサン |
+---------------------------------------------------------------------------+
形態素解析
形態素解析して、名詞だけ取り出すケースです。
in:
type: mysql
host: localhost
user: root
database: hoge
query: |
select title from article limit 10
filters:
- type: kuromoji
keep_input: false
ok_parts_of_speech:
- 名詞
key_names:
- title
settings:
- {
suffix: _surface_form, method: 'surface_form', delimiter: '###'
}
out:
type: stdout
- 特定の品詞だけ出力してほしい(名詞だけ欲しいなど)というケースの場合はok_parts_of_speechを設定します
$ embulk preview yml/kuromoji_keitaiso.yml
2015-12-03 16:42:02.276 +0900: Embulk v0.7.7
2015-12-03 16:42:04.597 +0900 [INFO] (preview): Loaded plugin embulk-input-mysql (0.6.0)
2015-12-03 16:42:04.632 +0900 [INFO] (preview): Loaded plugin embulk-filter-kuromoji (0.2.0)
2015-12-03 16:42:04.693 +0900 [INFO] (preview): Fetch size is 10000. Using server-side prepared statement.
2015-12-03 16:42:05.818 +0900 [INFO] (preview): Fetch size is 10000. Using server-side prepared statement.
2015-12-03 16:42:05.826 +0900 [INFO] (preview): SQL: select title from article limit 10
2015-12-03 16:42:05.829 +0900 [INFO] (preview): > 0.00 seconds
+--------------------------------------------------------------------------------------------------------+
| title_surface_form:string |
+--------------------------------------------------------------------------------------------------------+
| GM###燃料###電池###車###開発###状況###講演###ホンダ###共同###研究###言及 |
| コンピュータ###エンターテインメント###先 |
| Linear###Technology###140###V###入力###可能###最大###400###mA###出力###降圧###型###DC###-###DC###コンバーター###IC###発売 |
| 三菱電機###飽和###電圧###検出###機能###搭載###1200###V###耐圧###パワー###半導体###駆動###用###IC###発売 |
| 東芝###SK###Hynix###ナノインプリントリソグラフィ###共同###開発###2017###年###量産 |
| スマ###ホ###連携###小型###FPGA###開発###キット###IoT###向け###マクニカ###量産###出荷 |
| IC###チップ###指紋###IoT###セキュリティ###基盤###三菱電機###遅延###ベース###PUF###技術###発表 |
| ユーザー###操作###アプリ###周辺###アクセサリー###開発###オリンパス###レンズ###交換###型###カメラ |
| インドネシア###骨太###拠点###スズキ###常務###役員###長尾###氏 |
| インドネシア###タイ###不振###営業###利益###横ばい###スズキ###2014###年度###3###四半期###決算 |
+--------------------------------------------------------------------------------------------------------+
- 形態素解析された結果が
###
に区切られて出力されました - 現状、形態素解析した結果は文字列にdelimiterを挟んでますが、EmbulkにJSON型がサポートされれば配列にして出力する予定です。
- methodをsurface_formにすると、形態素解析と正規化だけされます。
辞書を適用する場合
上記の場合ですが辞書に網羅されていない日本語が変なところで区切られています
- スマホ
- 燃料電池
- ICチップ
などです。
こういった場合は独自辞書を適用できます。
以下のような辞書を作ってみます。
kuromoji.txt
ICチップ,ICチップ,アイシーチップ,カスタム名詞
燃料電池,燃料電池,ネンリョウデンチ,カスタム名詞
スマホ,スマホ,スマホ,カスタム名詞
in:
type: mysql
host: localhost
user: root
database: hoge
query: |
select title from article limit 10
filters:
- type: kuromoji
keep_input: false
dictionary_path: txt/kuromoji.txt
key_names:
- title
settings:
- {
suffix: _surface_form, method: 'surface_form', delimiter: '###'
}
out:
type: stdout
dictionary_pathに辞書のPathを指定します
$ embulk preview yml/kuromoji_keitaiso.yml
2015-12-03 17:04:15.141 +0900: Embulk v0.7.7
2015-12-03 17:04:17.389 +0900 [INFO] (preview): Loaded plugin embulk-input-mysql (0.6.0)
2015-12-03 17:04:17.438 +0900 [INFO] (preview): Loaded plugin embulk-filter-kuromoji (0.2.0)
2015-12-03 17:04:17.506 +0900 [INFO] (preview): Fetch size is 10000. Using server-side prepared statement.
2015-12-03 17:04:18.701 +0900 [INFO] (preview): Fetch size is 10000. Using server-side prepared statement.
2015-12-03 17:04:18.709 +0900 [INFO] (preview): SQL: select title from article limit 10
2015-12-03 17:04:18.714 +0900 [INFO] (preview): > 0.00 seconds
+--------------------------------------------------------------------------------------------------------------------------------+
| title_surface_form:string |
+--------------------------------------------------------------------------------------------------------------------------------+
| GM###が###燃料電池###車###の###開発###状況###について###講演###、###ホンダ###と###の###共同###研究###に###も###言及 |
| コンピュータ###エンターテインメント###が###向かう###先 |
| Linear### ###Technology###、###140###V###入力###が###可能###だ###最大###400###mA###出力###の###降圧###型###DC###-###DC###コンバーター###IC###を###発売 |
| 三菱電機###、###非###飽和###電圧###検出###機能###を###搭載###する###た###1200###V###耐圧###の###パワー###半導体###駆動###用###IC###を###発売 |
| 東芝###と###SK### ###Hynix###が###ナノインプリントリソグラフィ###を###共同###開発###、###2017###年###の###量産###目指す |
| スマホ###と###連携###できる###超###小型###FPGA###開発###キット###、###IoT###向け###に###マクニカ###が###量産###出荷 |
| ICチップ###の###「###指紋###」###を###IoT###の###セキュリティ###基盤###に###使う###、###三菱電機###が###遅延###ベース###の###PUF###技術###を###発表 |
| ユーザー###が###操作###アプリ###や###周辺###アクセサリー###を###開発###、###オリンパス###の###レンズ###交換###型###カメラ |
| 「###インドネシア###を###もっと###骨太###の###拠点###に###する###て###いく###たい###」###、###スズキ###常務###役員###の###長尾###氏 |
| インドネシア###と###タイ###の###不振###だ###営業###利益###は###横ばい###、###スズキ###の###2014###年度###第###3###四半期###決算 |
+--------------------------------------------------------------------------------------------------------------------------------+
まとめ
- お手軽に形態素解析したいと用途に。
- デフォルト辞書の精度がneologd/mecab-ipadic-neologdがかなり凄いことがわかったので、辞書はこちらに差し替えるかも。
- もう一つ日本語を正規化するtoyama0919/embulk-filter-icu4jも作ったのですが、こちらは別の機会に書こうと思います。