Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Embulkで日本語をお手軽に形態素解析

More than 5 years have passed since last update.

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も作ったのですが、こちらは別の機会に書こうと思います。

参考

toyama0919
Data Engineer.
dena_coltd
    Delight and Impact the World
https://dena.com/jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away