mecaby関数 の履歴(No.6)
mecabyとは†
Rから形態素解析器のMeCabを起動して形態素解析を行う関数です(より正確には,MeCabのpythonパッケージであるmecab-python3を呼び出します)。
mecabyのファイル†
下のアイコンをクリックしてファイルを保存してください。
保存用のポップアップが表示されない場合は,右クリックして“名前を付けてリンク先を保存”を選んでください。
この関数を適用すると,以下のように分析結果が出力されます。
> mecaby("メロスは激怒した。")
Surface_Value Part_of_Speech Part_of_Speech1 Part_of_Speech2
1 メロス 名詞 一般 *
2 は 助詞 係助詞 *
3 激怒 名詞 サ変接続 *
4 し 動詞 自立 *
5 た 助動詞 * *
6 。 記号 句点 *
Part_of_Speech3 Conjugation Inflection Root_Form Reading Pronunciation
1 * * * * <NA> <NA>
2 * * * は ハ ワ
3 * * * 激怒 ゲキド ゲキド
4 * サ変・スル 連用形 する シ シ
5 * 特殊・タ 基本形 た タ タ
6 * * * 。 。 。
環境の構築†
最初に使用する前に1回だけ行ってください。
すでにreticulateを利用中で,既存のPython環境にパッケージを追加したい場合は,4以降を実行してください。
Pythonやreticulateにくわしい方は必ずしも以下の手順通りでなくてもかまいません(要は,使用するPython環境にパッケージが導入されていれば問題ありません)。
1. Rstudioを起動してreticulateパッケージをインストールしてください。
※まず,RとRstudioを現時点での最新版にしておくことをお勧めします(パッケージのバージョンとの不整合が起こりにくくなり,トラブルの可能性が低くなります)。
2. reticulateパッケージを起動してpy_config関数を実行してください(Rstudioのコンソールに以下を入力してください)。
library(reticulate) install_miniconda()
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 mecab-python3 pip install unidic-lite
すべてインストールが終了して再びキー入力できる状態になったら終了です。
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:~」といったコードが表示されます。特にエラーメッセージなどが出なければ,読み込み成功です。
関数の実行†
以下のような形でコードを入力してください。
mecaby(文字列, dic = システム辞書, udic = ユーザー辞書, header = ヘッダ)
- 文字列・・・分析したい文字列,または,文字列を格納した変数名。文字列を直接入力する場合は,Rの通常の書き方通り,""で囲んでください。
- システム辞書・・・システム辞書として使用する辞書のパスを指定してください。パス区切りはWindowsの場合は「\」か「//」にしてください(「/」は通りません)。デフォルトはunidicです(インストール済みの場合)。
- ユーザー辞書・・・ユーザー辞書として使用する辞書のパスを指定してください。パス区切りはWindowsの場合は「\」か「//」にしてください(「/」は通りません)。デフォルトでは指定されません。
- ヘッダ・・・ヘッダとして指定したい文字列を文字列ベクトルの形で入力してください。
※補足説明
mecabyはRから辞書を切り替えながら使用することを想定しています。
MeCabは使用する辞書によって出力の列数が異なります。
そのため,ヘッダ情報を適切に推測できない場合がありえます。
そのようなときは,ご自身でヘッダとして適切なラベルを付けてください。
また,mecab-python3は辞書が見つからないときやアップデートのタイミングで,ユーザーの意図によらずデフォルトの辞書をUniDicに設定することがあります。
誤りなく意図した辞書を使って分析をするためには,mecaby.Rの「dic = NA」をデフォルトで使用したい辞書のパスに書き換えておくことをお勧めします(dic = "C://hoge//~")。
なお,pythonパッケージ版でなく,オリジナルの辞書ファイルを指定したほうがより多くの情報を出力できる傾向があります(UniDic,IPA辞書)。
辞書による解析結果の違い†
デフォルトのUniDicでは以下のような感じです。
> mecaby("東京特許許可局で領収書を探して飛びまわる。")
sufrace pron lForm lemma pos cType
1 東京 トーキョー トウキョウ トウキョウ 名詞-固有名詞-地名-一般
2 特許 トッキョ トッキョ 特許 名詞-普通名詞-一般
3 許可 キョカ キョカ 許可 名詞-普通名詞-サ変可能
4 局 キョク キョク 局 名詞-普通名詞-助数詞可能
5 で デ デ で 助詞-格助詞
6 領収 リョーシュー リョウシュウ 領収 名詞-普通名詞-サ変可能
7 書 ショ ショ 書 接尾辞-名詞的-一般
8 を オ ヲ を 助詞-格助詞
9 探し サガシ サガス 探す 動詞-一般 五段-サ行
10 て テ テ て 助詞-接続助詞
11 飛びまわる トビマワル トビマワル 飛び回る 動詞-一般 五段-ラ行
12 。 。 補助記号-句点
cForm aType1 aType2 aModType
1 0 <NA> <NA>
2 1 0 <NA>
3 1 <NA> <NA>
4 1 <NA> <NA>
5 <NA> <NA> <NA>
6 0 <NA> <NA>
7 <NA> <NA> <NA>
8 <NA> <NA> <NA>
9 連用形-一般 0 <NA> <NA>
10 <NA> <NA> <NA>
11 終止形-一般 4 <NA> <NA>
12 <NA> <NA> <NA>
MeCabといえばIPA辞書ですね。
UniDicによる解析結果と分割のしかたは同じですが,品詞体系が異なるため細かいところには違いがあります。
> mecaby("東京特許許可局で領収書を探して飛びまわる。", dic = "C:\\Program Files\\MeCab\\dic\\ipadic")
Surface_Value Part_of_Speech Part_of_Speech1 Part_of_Speech2 Part_of_Speech3 Conjugation
1 東京 名詞 固有名詞 地域 一般 *
2 特許 名詞 サ変接続 * * *
3 許可 名詞 サ変接続 * * *
4 局 名詞 接尾 一般 * *
5 で 助詞 格助詞 一般 * *
6 領収 名詞 サ変接続 * * *
7 書 名詞 接尾 一般 * *
8 を 助詞 格助詞 一般 * *
9 探し 動詞 自立 * * 五段・サ行
10 て 助詞 接続助詞 * * *
11 飛びまわる 動詞 自立 * * 五段・ラ行
12 。 記号 句点 * * *
Inflection Root_Form Reading Pronunciation
1 * 東京 トウキョウ トーキョー
2 * 特許 トッキョ トッキョ
3 * 許可 キョカ キョカ
4 * 局 キョク キョク
5 * で デ デ
6 * 領収 リョウシュウ リョーシュー
7 * 書 ショ ショ
8 * を ヲ ヲ
9 連用形 探す サガシ サガシ
10 * て テ テ
11 基本形 飛びまわる トビマワル トビマワル
12 * 。 。 。
新語や固有表現に強いNEologd(mecab-ipadic-neologd 2020-08-20)を使った場合の結果です。
「東京特許許可局」が一単位となっているために他の辞書とは大きく違った雰囲気ですね。
> mecaby("東京特許許可局で領収書を探して飛びまわる。", dic = "C:\\Program Files\\MeCab\\dic\\mecab-ipadic-neologd")
Surface_Value Part_of_Speech Part_of_Speech1 Part_of_Speech2 Part_of_Speech3 Conjugation
1 東京特許許可局 名詞 固有名詞 一般 * *
2 で 助詞 格助詞 一般 * *
3 領収 名詞 サ変接続 * * *
4 書 名詞 接尾 一般 * *
5 を 助詞 格助詞 一般 * *
6 探し 動詞 自立 * * 五段・サ行
7 て 助詞 接続助詞 * * *
8 飛びまわる 動詞 自立 * * 五段・ラ行
9 。 記号 句点 * * *
Inflection Root_Form Reading Pronunciation
1 * 東京特許許可局 トウキョウトッキョキョカキョク トーキョートッキョキョカキョク
2 * で デ デ
3 * 領収 リョウシュウ リョーシュー
4 * 書 ショ ショ
5 * を ヲ ヲ
6 連用形 探す サガシ サガシ
7 * て テ テ
8 基本形 飛びまわる トビマワル トビマワル
9 * 。 。 。
同じUniDicでもダウンロード版を使った場合はpythonライブラリ版の場合と詳細が違います。
goshu(語種)の情報が出力されるのが分析の目的によってはありがたいところです。
> mecaby("東京特許許可局で領収書を探して飛びまわる。", dic = "C:\\Program Files\\MeCab\\dic\\unidic-cwj-202302")
surface pos1 pos2 pos3 pos4 cType cForm lForm
1 東京 名詞 固有名詞 地名 一般 * * トウキョウ
2 特許 名詞 普通名詞 一般 * * * トッキョ
3 許可 名詞 普通名詞 サ変可能 * * * キョカ
4 局 名詞 普通名詞 助数詞可能 * * * キョク
5 で 助詞 格助詞 * * * * デ
6 領収 名詞 普通名詞 サ変可能 * * * リョウシュウ
7 書 接尾辞 名詞的 一般 * * * ショ
8 を 助詞 格助詞 * * * * ヲ
9 探し 動詞 一般 * * 五段-サ行 連用形-一般 サガス
10 て 助詞 接続助詞 * * * * テ
11 飛びまわる 動詞 一般 * * 五段-ラ行 終止形-一般 トビマワル
12 。 補助記号 句点 * * * * *
lemma orth pron orthBase pronBase goshu iType iForm fType fForm
1 トウキョウ 東京 トーキョー 東京 トーキョー 固 * * * *
2 特許 特許 トッキョ 特許 トッキョ 漢 * * * *
3 許可 許可 キョカ 許可 キョカ 漢 * * * *
4 局 局 キョク 局 キョク 漢 * * * *
5 で で デ で デ 和 * * * *
6 領収 領収 リョーシュー 領収 リョーシュー 漢 * * * *
7 書 書 ショ 書 ショ 漢 * * * *
8 を を オ を オ 和 * * * *
9 探す 探し サガシ 探す サガス 和 * * * *
10 て て テ て テ 和 * * * *
11 飛び回る 飛びまわる トビマワル 飛びまわる トビマワル 和 * * * *
12 。 。 * 。 * 記号 * * * *
iConType fConType lType kana kanaBase form formBase aType
1 * * 地名 トウキョウ トウキョウ トウキョウ トウキョウ 0
2 * * 体 トッキョ トッキョ トッキョ トッキョ "1,0"
3 * * 体 キョカ キョカ キョカ キョカ 1
4 * B1S6SjShS 体 キョク キョク キョク キョク 1
5 * * 格助 デ デ デ デ *
6 * * 体 リョウシュウ リョウシュウ リョウシュウ リョウシュウ 0
7 * * 接尾体 ショ ショ ショ ショ *
8 * * 格助 ヲ ヲ ヲ ヲ *
9 * * 用 サガシ サガス サガシ サガス 0
10 * * 接助 テ テ テ テ *
11 * * 用 トビマワル トビマワル トビマワル トビマワル 4
12 * * 補助 * * * * *
aConType aModType lid lemma_id
1 * * 7129242085237248 25936
2 C1 * 7276576576250368 26472
3 C3 * 2571216565182976 9354
4 C3 * 2572590954717696 9359
5 "動詞%F2@0,名詞%F1" * 7014343053025792 25518
6 C2 * 11064119256031744 40251
7 C4 * 4542366035878400 16525
8 "動詞%F2@0,名詞%F1,形容詞%F2@-1" * 11381878116459008 41407
9 C2 * 3832081591444097 13941
10 "動詞%F1,形容詞%F2@-1" * 6837321680953856 24874
11 C1 * 7302964855317163 26568
12 * * 6880571302400 25