環境はWindowsとPython
Pythonを2022年9月から始めた初心者です。
「MeCab」を使って形態素解析をすること、ユーザー辞書として「NEologd」を使うことを目的に色々と調べ始めました。
複数の書籍やサイトを参考にしたのですが、経験不足が影響し、思い通りには進められなかったため、手順をメモとして残しました。
OSは「Windows 10」、「Python」バージョンは「3.9.12」、「Juypterb Notebook」は「6.4.8」です。
NEologdをダウンロード
「GitHub」から「NEologd」をダウンロードします。
画面右上の「Code」をクリックして「Download Zip」を選ぶと、「mecab-ipadic-neologd-master.zip」(約58Mバイト)をダウンロードできます。
自分の環境では「MeCab」を「C:¥Program Files¥MeCab」でなく「C:¥MeCab」にインストールしています。
「mecab-ipadic-neologd-master.zip」を解凍したファイルも「C:¥mecab-ipadic-neologd-master」と、同じ階層に置きました。
辞書ファイルをコンパイル
解凍すると、「C:¥mecab-ipadic-neologd-master¥seed」 の下に「mecab-user-dict-seed.20200910.csv.xz」(39.2Mバイト)ファイルが解凍されます。
解凍し、コンパイルして辞書ファイルとして使用します。
「mecab-user-dict-seed.20200910.csv.xz」を解凍すると、「mecab-user-dict-seed.20200910.csv」(493Mバイト)を取得できます。
「mecab-dict-index」コマンドを使い、 この CSV を辞書ファイル (.dic)にコンパイルします。
C:¥MeCab¥dic¥ipadic>mecab-dict-index -d "C:¥MeCab¥dic¥ipadic" -u "C:¥MeCab¥dic¥NEologd.dic" -f utf-8 -t utf-8 C:¥mecab-ipadic-neologd-master¥seed¥mecab-user-dict-seed.20200910.csv
上記を実行し、文字コード「utf-8」形式の「NEologd.dic」という名称のファイルを生成しました。
「NEologd.dic」は指定した「C:¥MeCab¥dic」に置かれます。
「C:¥MeCab¥dic」に置いた後、フォルダ名称でも区別したくなったので、「C:¥MeCab¥dic/Neologd」というフォルダを作り「NEologd.dic」を移動しました。
mecabrcを編集
「NEologd.dic」ユーザー辞書として指定するために「mecabrc」ファイルを編集しました。
「mecabrc」は「C:¥MeCab¥etc」にあります。
※mecabrcはコマンドプロンプトから「MeCab」を動かすときに必要な設定のようです。
元から記載されていた記述を
;userdic = /home/foo/bar/user.dic
とコメントアウトし、代わりに
userdic = $(rcpath)¥..¥dic¥Neologd
を追記しました。
「$(rcpath)¥・・・」でなく
userdic = C:¥MeCab¥dic¥NEologd¥NEologd.dic
と記載しても「NEologd.dic」は使用できました。
↓「mecabrc」の内容です。
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir = $(rcpath)\..\dic\ipadic
;userdic = /home/foo/bar/user.dic
userdic = $(rcpath)\..\dic\NEologd
; output-format-type = wakati
; input-buffer-size = 8192
; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n
引数「-d」「-u」
ただ、「Jupyter Notebook」で「MeCab」を実行する際、
tagger = MeCab.Tagger('-d "C:/MeCab/dic/ipadic" -u "C:/MeCab/dic/NEologd.dic"')
と、システム辞書を指定する「-d」とユーザー辞書をしている「-u」と両方のパラメータ(引数)を使っています。
色々調べたところ、
tagger = MeCab.Tagger("-u C:/mecab/ipadic/user.dic")
と、ユーザー辞書を指定するだけで済むそうなのですが、「RunTimeError」が出てしまいました。
調べたのですがわからず、「-d」と「-u」の併用を続けています。
WIndowの「コマンドプロンプト」から「MeCab」&「NEologd」の実行例です。
echo 五条悟と夏油傑の高専時代の物語 | mecab -u "C:\MeCab\dic\NEologd\NEologd.dic"
五条悟 名詞,固有名詞,人名,一般,*,*,五条悟,ゴジョウサトル,ゴジョーサトル
と 助詞,並立助詞,*,*,*,*,と,ト,ト
夏油傑 名詞,固有名詞,人名,一般,*,*,夏油傑,ゲトウスグル,ゲトウスグル
の 助詞,連体化,*,*,*,*,の,ノ,ノ
高専 名詞,一般,*,*,*,*,高専,コウセン,コーセン
時代 名詞,一般,*,*,*,*,時代,ジダイ,ジダイ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
物語 名詞,一般,*,*,*,*,物語,モノガタリ,モノガタリ
「NEologd」を使わない場合、「五条」「悟」、「夏」「油」「傑」と別れて識別されます。
形態素解析実行
「Jupyter Notebook」ーで「NEologd.dic」を指定してMeCabを実行します。
import MeCab
tagger = MeCab.Tagger('-d "C:/MeCab/dic/ipadic" -u "C:/MeCab/dic/NEologd.dic"')
result = tagger.parse("呪術廻戦2023年放送予定のTVアニメ第2期では。五条悟と夏油傑の高専時代のエピソードが描かれる。")
print(result)
#(結果)
呪術廻戦 名詞,固有名詞,一般,,,,呪術廻戦,ジュジュツカイセン,ジュジュツカイセン 2023年 名詞,固有名詞,一般,,,,2023年,ニセンニジュウサンネン,ニセンニジュウサンネン
放送予定 名詞,固有名詞,一般,,,,放送予定,ホウソウヨテイ,ホーソーヨテイ の 助詞,連体化,,,,,の,ノ,ノ TVアニメ 名詞,固有名詞,一般,,,,TVアニメ,テレビアニメ,テレビアニメ
第 接頭詞,数接続,,,,,第,ダイ,ダイ
2期 名詞,固有名詞,一般,,,,2期,ニキ,ニキ で 助詞,格助詞,一般,,,,で,デ,デ
は 助詞,係助詞,,,,,は,ハ,ワ
。 記号,句点,,,,,。,。,。
五条悟 名詞,固有名詞,人名,一般,,,五条悟,ゴジョウサトル,ゴジョーサトル
と 助詞,並立助詞,,,,,と,ト,ト
夏油傑 名詞,固有名詞,人名,一般,,,夏油傑,ゲトウスグル,ゲトウスグル
の 助詞,連体化,,,,,の,ノ,ノ
高専 名詞,一般,,,,,高専,コウセン,コーセン
時代 名詞,一般,,,,,時代,ジダイ,ジダイ
の 助詞,連体化,,,,,の,ノ,ノ
エピソード 名詞,一般,,,,,エピソード,エピソード,エピソード
が 助詞,格助詞,一般,,,,が,ガ,ガ 描か 動詞,自立,,,五段・カ行イ音便,未然形,描く,エガカ,エガカ れる 動詞,接尾,,,一段,基本形,れる,レル,レル 。 記号,句点,,,,*,。,。,。
EOS
「NEologd.dic」を使わずに標準辞書を使うと、こうなりました。
import MeCab
tagger = MeCab.Tagger()
# tagger = MeCab.Tagger("-d C:/MeCab/dic/ipadic")
result = tagger.parse("呪術廻戦2023年放送予定のTVアニメ第2期では。五条悟と夏油傑の高専時代のエピソードが描かれる。")
print(result)
#(結果)
呪術 ジュジュツ ジュジュツ 呪術 名詞-普通名詞-一般 1,0
廻 メグル メグル メグル 名詞-固有名詞-人名-名 0
戦 セン セン 戦 接尾辞-名詞的-一般
2023 2023 2023 2023 名詞-数詞 0
年 ネン ネン 年 名詞-普通名詞-助数詞可能 1
放送 ホーソー ホウソウ 放送 名詞-普通名詞-サ変可能 0
予定 ヨテー ヨテイ 予定 名詞-普通名詞-サ変可能 0
の ノ ノ の 助詞-格助詞
TV TV TV TV 名詞-普通名詞-一般 0
アニメ アニメ アニメ アニメ-animation 名詞-普通名詞-一般 1,0
第 ダイ ダイ 第 接頭辞
2 2 2 2 名詞-数詞 0
期 キ キ 期 名詞-普通名詞-助数詞可能 1
で デ デ で 助詞-格助詞
は ワ ハ は 助詞-係助詞
。 。 補助記号-句点
五条 ゴジョー ゴジョウ ゴジョウ 名詞-固有名詞-人名-姓 1
悟 サトル サトル サトル 名詞-固有名詞-人名-名 0
と ト ト と 助詞-格助詞
夏 ナツ ナツ 夏 名詞-普通名詞-副詞可能 2
油 アブラ アブラ 油 名詞-普通名詞-一般 0
傑 ケツ ケツ 傑 接尾辞-名詞的-一般
の ノ ノ の 助詞-格助詞
高専 コーセン コウセン 高専 名詞-普通名詞-一般 0
時代 ジダイ ジダイ 時代 名詞-普通名詞-一般 0
の ノ ノ の 助詞-格助詞
エピソード エピソード エピソード エピソード-episode 名詞-普通名詞-一般 1,3
が ガ ガ が 助詞-格助詞
描か エガカ エガク 描く 動詞-一般 五段-カ行 未然形-一般 2
れる レル レル れる 助動詞 助動詞-レル 終止形-一般
。 。 補助記号-句点
EOS
参考
部分的に参考にさせて頂きました。
今後学習しながら読み込んでいきたいと思っています。