sudachy関数 の履歴(No.4) - 井関龍太のページ

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

sudachy関数 の履歴(No.4)


sudachyとは

Rから日本語形態素解析器のSudachiを起動して形態素解析を行う関数です(より正確には,SudachiのpythonパッケージであるSudachiPyを呼び出します)。

sudachyのファイル

下のアイコンをクリックしてファイルを保存してください。
保存用のポップアップが表示されない場合は,右クリックして“名前を付けてリンク先を保存”を選んでください。

filesudachy.R

この関数を適用すると,以下のように分析結果が出力されます。

> sudachy("メロスは激怒した。")
  surface     POS1       POS2     POS3 POS4      POS5        POS6
1  メロス     名詞   普通名詞     一般    *         *           *
2      は     助詞     係助詞        *    *         *           *
3    激怒     名詞   普通名詞 サ変可能    *         *           *
4      し     動詞 非自立可能        *    *  サ行変格 連用形-一般
5      た   助動詞          *        *    * 助動詞-タ 終止形-一般
6      。 補助記号       句点        *    *         *           *
  normalized_form dictionary_form reading_form dictionary_id
1          メロス          メロス       メロス             0
2              は              は           ハ             0
3            激怒            激怒       ゲキド             0
4            為る            する           シ             0
5              た              た           タ             0
6              。              。           。             0

環境の構築

最初に使用する前に1回だけ行ってください。
すでにreticulateを利用中で,既存のPython環境にパッケージを追加したい場合は,4以降を実行してください。
Pythonやreticulateにくわしい方は必ずしも以下の手順通りでなくてもかまいません(要は,使用するPython環境にパッケージが導入されていれば問題ありません)。

1. Rstudioを起動してreticulateパッケージをインストールしてください。
※まず,RとRstudioを現時点での最新版にしておくことをお勧めします(パッケージのバージョンとの不整合が起こりにくくなり,トラブルの可能性が低くなります)。

2. reticulateパッケージを起動してpy_config関数を実行してください(Rstudioのコンソールに以下を入力してください)。

library(reticulate)
py_config()

3. 「Would you like to install Miniconda?」と尋ねられるので,YESと答えてください。

Y

たくさんメッセージが出てきます(とても長いです)。
すべてが終わって再びキー入力できる状態になったらRstudioを閉じてください。

4. Windowsのスタートメニューから「Anaconda」の中の「Anaconda Prompt (R-MINI~1)」を選んでクリックしてください。

5. コンソール画面が開くので以下を実行してください(Anaconda Promptのコンソールに1行ずつ貼り付け)。

pip install -U sudachipy sudachidict_core
pip install sudachidict-full sudachidict-small

※2行目は必須ではありませんが,辞書のオプションを使用したい場合はインストールしてください。

すべてインストールが終了して再びキー入力できる状態になったら終了です。
Anaconda Promptを閉じてください。

6. Rstudioを起動してください。

7. 「Tools」→「Global Options」→「Python」と展開し「Select」をクリック。

8. 「Conda Environments」のタブをクリック。

9. パッケージをインストールした環境(ここまでの手順通りなら「~/r-miniconda/python.exe」で終わっている候補)を選んでから「Select」ボタンをクリック。

「OK」をクリックしてオプションを閉じてください。
Rstudioの再起動を求められるので「OK」をクリックしてください。
以上で終了です。
お疲れさまでした。

関数の使い方

関数のセット

ダウンロードしたファイルをRに読み込みます。

1. Rstudioを起動します。
2. Rのメニューバーから「Code」をクリックします。
3. 現れたメニューの中から「Source File...」をクリックします。
4. ファイルの選択画面になるので,関数のファイルを選んで「Open」をクリックします。

→Rのコンソールに「source("C:~」といったコードが表示されます。特にエラーメッセージなどが出なければ,読み込み成功です。

関数の実行

以下のような形でコードを入力してください。

sudachy(文字列, mode = 分析モード, dic = 辞書)
  • 文字列・・・分析したい文字列,または,文字列を格納した変数名。文字列を直接入力する場合は,Rの通常の書き方通り,""で囲んでください。
  • 分析モード・・・A,B,Cの3種類が指定できます。Aは語をなるべく詳細に区切る場合,Bは中間,Cは複合名詞などをなるべくまとめる場合です。入力の際は""で囲んでください。デフォルトはBです。
  • 辞書・・・small,core,fullの3種類が指定できます。この並びの順に収録語数が多くなります。それぞれに対応したパッケージをあらかじめインストールする必要があります。入力の際は""で囲んでください。デフォルトはcoreです。

さまざまな分析パターン

Sudachiには3種類の分析モードと3種類の辞書があるので,同じテキストに対して9通りもの分析を行うことができます(詳細については,Sudachi辞書の紹介が参考になります)。
分析モードと辞書は分析の目的によって使い分けることが期待されています。

まず,分析モードによる違いを見てみましょう。
Aモードはできる限り細かく分割して語彙の検索漏れを防ぎます。

> sudachy("東京特許許可局で領収書を探して飛びまわる。", mode = "A")
   surface     POS1       POS2       POS3 POS4      POS5        POS6 normalized_form
1     東京     名詞   固有名詞       地名 一般         *           *            東京
2     特許     名詞   普通名詞       一般    *         *           *            特許
3     許可     名詞   普通名詞   サ変可能    *         *           *            許可
4       局     名詞   普通名詞 助数詞可能    *         *           *              局
5       で     助詞     格助詞          *    *         *           *              で
6     領収     名詞   普通名詞   サ変可能    *         *           *            領収
7       書   接尾辞     名詞的       一般    *         *           *              書
8       を     助詞     格助詞          *    *         *           *              を
9     探し     動詞       一般          *    * 五段-サ行 連用形-一般            探す
10      て     助詞   接続助詞          *    *         *           *              て
11    飛び     動詞       一般          *    * 五段-バ行 連用形-一般            飛ぶ
12  まわる     動詞 非自立可能          *    * 五段-ラ行 終止形-一般            回る
13      。 補助記号       句点          *    *         *           *              。
   dictionary_form reading_form dictionary_id
1             東京   トウキョウ             0
2             特許     トッキョ             0
3             許可       キョカ             0
4               局       キョク             0
5               で           デ             0
6             領収 リョウシュウ             0
7               書         ショ             0
8               を           ヲ             0
9             探す       サガシ             0
10              て           テ             0
11            飛ぶ         トビ             0
12          まわる       マワル             0
13              。           。             0

「東京特許許可局」「領収書」が構成要素ごとに分割されています。
また「飛びまわる」が「飛ぶ」と「まわる」に分割されています。

BモードはAモードの分割に接辞などが付属したもので,国語辞典の見出しに近いものとなることが想定されています(デフォルトはBモードです)。

> sudachy("東京特許許可局で領収書を探して飛びまわる。", mode = "B")
      surface     POS1     POS2       POS3 POS4      POS5        POS6 normalized_form
1        東京     名詞 固有名詞       地名 一般         *           *            東京
2        特許     名詞 普通名詞       一般    *         *           *            特許
3        許可     名詞 普通名詞   サ変可能    *         *           *            許可
4          局     名詞 普通名詞 助数詞可能    *         *           *              局
5          で     助詞   格助詞          *    *         *           *              で
6      領収書     名詞 普通名詞       一般    *         *           *          領収書
7          を     助詞   格助詞          *    *         *           *              を
8        探し     動詞     一般          *    * 五段-サ行 連用形-一般            探す
9          て     助詞 接続助詞          *    *         *           *              て
10 飛びまわる     動詞     一般          *    * 五段-ラ行 終止形-一般        飛び回る
11         。 補助記号     句点          *    *         *           *              。
   dictionary_form     reading_form dictionary_id
1             東京       トウキョウ             0
2             特許         トッキョ             0
3             許可           キョカ             0
4               局           キョク             0
5               で               デ             0
6           領収書 リョウシュウショ             0
7               を               ヲ             0
8             探す           サガシ             0
9               て               テ             0
10      飛びまわる       トビマワル             0
11              。               。             0

「東京特許許可局」はそのままですが,「領収書」は一単位になっています。
また「飛びまわる」も一単位として分析されます。

Cモードは複合語や慣用句なども一単位として数えるもので,オプションの中では最も長い分割形式です。

> sudachy("東京特許許可局で領収書を探して飛びまわる。", mode = "C")
      surface     POS1     POS2       POS3 POS4      POS5        POS6 normalized_form
1        東京     名詞 固有名詞       地名 一般         *           *            東京
2        特許     名詞 普通名詞       一般    *         *           *            特許
3        許可     名詞 普通名詞   サ変可能    *         *           *            許可
4          局     名詞 普通名詞 助数詞可能    *         *           *              局
5          で     助詞   格助詞          *    *         *           *              で
6      領収書     名詞 普通名詞       一般    *         *           *          領収書
7          を     助詞   格助詞          *    *         *           *              を
8        探し     動詞     一般          *    * 五段-サ行 連用形-一般            探す
9          て     助詞 接続助詞          *    *         *           *              て
10 飛びまわる     動詞     一般          *    * 五段-ラ行 終止形-一般        飛び回る
11         。 補助記号     句点          *    *         *           *              。
   dictionary_form     reading_form dictionary_id
1             東京       トウキョウ             0
2             特許         トッキョ             0
3             許可           キョカ             0
4               局           キョク             0
5               で               デ             0
6           領収書 リョウシュウショ             0
7               を               ヲ             0
8             探す           サガシ             0
9               て               テ             0
10      飛びまわる       トビマワル             0
11              。               。             0

この例ではCモードはBモードの分析結果と違いがないようです。
しかし,後述するように,辞書のオプションと組み合わせることで違いが生まれます。

辞書にはsmall,core,fullの3種類があり,主な違いは収録語数にありますが,語数の多い辞書ほど複合語や固有名詞を多く含む傾向があります。

smallは最も収録語数の少ない辞書です。

> sudachy("東京特許許可局で領収書を探して飛びまわる。", dic = "small")
      surface     POS1     POS2       POS3 POS4      POS5        POS6 normalized_form
1        東京     名詞 固有名詞       地名 一般         *           *            東京
2        特許     名詞 普通名詞       一般    *         *           *            特許
3        許可     名詞 普通名詞   サ変可能    *         *           *            許可
4          局     名詞 普通名詞 助数詞可能    *         *           *              局
5          で     助詞   格助詞          *    *         *           *              で
6        領収     名詞 普通名詞   サ変可能    *         *           *            領収
7          書   接尾辞   名詞的       一般    *         *           *              書
8          を     助詞   格助詞          *    *         *           *              を
9        探し     動詞     一般          *    * 五段-サ行 連用形-一般            探す
10         て     助詞 接続助詞          *    *         *           *              て
11 飛びまわる     動詞     一般          *    * 五段-ラ行 終止形-一般        飛び回る
12         。 補助記号     句点          *    *         *           *              。
   dictionary_form reading_form dictionary_id
1             東京   トウキョウ             0
2             特許     トッキョ             0
3             許可       キョカ             0
4               局       キョク             0
5               で           デ             0
6             領収 リョウシュウ             0
7               書         ショ             0
8               を           ヲ             0
9             探す       サガシ             0
10              て           テ             0
11      飛びまわる   トビマワル             0
12              。           。             0

収録語数が少ないと言ってもそれなりに十分な解析結果が得られることがわかります。

coreは収録語数が中程度の辞書です(デフォルトはcoreです)。

> sudachy("東京特許許可局で領収書を探して飛びまわる。", dic = "core")
      surface     POS1     POS2       POS3 POS4      POS5        POS6 normalized_form
1        東京     名詞 固有名詞       地名 一般         *           *            東京
2        特許     名詞 普通名詞       一般    *         *           *            特許
3        許可     名詞 普通名詞   サ変可能    *         *           *            許可
4          局     名詞 普通名詞 助数詞可能    *         *           *              局
5          で     助詞   格助詞          *    *         *           *              で
6      領収書     名詞 普通名詞       一般    *         *           *          領収書
7          を     助詞   格助詞          *    *         *           *              を
8        探し     動詞     一般          *    * 五段-サ行 連用形-一般            探す
9          て     助詞 接続助詞          *    *         *           *              て
10 飛びまわる     動詞     一般          *    * 五段-ラ行 終止形-一般        飛び回る
11         。 補助記号     句点          *    *         *           *              。
   dictionary_form     reading_form dictionary_id
1             東京       トウキョウ             0
2             特許         トッキョ             0
3             許可           キョカ             0
4               局           キョク             0
5               で               デ             0
6           領収書 リョウシュウショ             0
7               を               ヲ             0
8             探す           サガシ             0
9               て               テ             0
10      飛びまわる       トビマワル             0
11              。               。             0

「領収書」といった複合語も一単位になっていることがわかります。
もっともこのことはmodeとも関係しており,Aモードに設定すると辞書がcoreでも「領収」と「書」で分割されます。

fullは収録語数の最も多い辞書です。

> sudachy("東京特許許可局で領収書を探して飛びまわる。", dic = "full")
      surface     POS1     POS2       POS3 POS4      POS5        POS6 normalized_form
1        東京     名詞 固有名詞       地名 一般         *           *            東京
2        特許     名詞 普通名詞       一般    *         *           *            特許
3        許可     名詞 普通名詞   サ変可能    *         *           *            許可
4          局     名詞 普通名詞 助数詞可能    *         *           *              局
5          で     助詞   格助詞          *    *         *           *              で
6      領収書     名詞 普通名詞       一般    *         *           *          領収書
7          を     助詞   格助詞          *    *         *           *              を
8        探し     動詞     一般          *    * 五段-サ行 連用形-一般            探す
9          て     助詞 接続助詞          *    *         *           *              て
10 飛びまわる     動詞     一般          *    * 五段-ラ行 終止形-一般        飛び回る
11         。 補助記号     句点          *    *         *           *              。
   dictionary_form     reading_form dictionary_id
1             東京       トウキョウ             0
2             特許         トッキョ             0
3             許可           キョカ             0
4               局           キョク             0
5               で               デ             0
6           領収書 リョウシュウショ             0
7               を               ヲ             0
8             探す           サガシ             0
9               て               テ             0
10      飛びまわる       トビマワル             0
11              。               。             0

この例ではcoreと分析結果の違いがなく,fullを使ったことの結果がわかりにくいと思います。
そこで,あわせてmodeをCにしてみます。

> sudachy("東京特許許可局で領収書を探して飛びまわる。", mode = "C", dic = "full")
         surface     POS1     POS2 POS3 POS4      POS5        POS6 normalized_form
1 東京特許許可局     名詞 固有名詞 一般    *         *           *  東京特許許可局
2             で     助詞   格助詞    *    *         *           *              で
3         領収書     名詞 普通名詞 一般    *         *           *          領収書
4             を     助詞   格助詞    *    *         *           *              を
5           探し     動詞     一般    *    * 五段-サ行 連用形-一般            探す
6             て     助詞 接続助詞    *    *         *           *              て
7     飛びまわる     動詞     一般    *    * 五段-ラ行 終止形-一般        飛び回る
8             。 補助記号     句点    *    *         *           *              。
  dictionary_form                   reading_form dictionary_id
1  東京特許許可局 トウキョウトッキョキョカキョク             0
2              で                             デ             0
3          領収書               リョウシュウショ             0
4              を                             ヲ             0
5            探す                         サガシ             0
6              て                             テ             0
7      飛びまわる                     トビマワル             0
8              。                             。             0

「東京特許許可局」が一単位になるので,結果の印象が大きく変わってくるのではないでしょうか。
このように,分析モードと辞書のオプションは,それぞれを指定するだけでなく,組み合わせによっても分析結果が違ってくることを意識する必要があるでしょう。

 
このエントリーをはてなブックマークに追加