環境
- Windows10 64bit
- Python3.8 64bit
- MeCab 0.996 64bit version
- 書いた日は2019-12-28
MeCab(64bit)のインストール
Pythonから扱うので辞書はUTF-8を使用するように選択
デフォルトだとProgram Filesに入れようとしますが、できればc:\dev\mecab64
やc:\usr\mecab64
などスペースの入らないディレクトリしたほうがいいです
試しに使ってみる
辞書がUTF-8なのでcp932だと文字化けします
コマンドプロンプトからmecabを起動して文字列を入力してみる
chcp 65001
C:\usr\MeCab64>bin\mecab.exe
吾輩は猫である
EOS
だめです
echoを使ってパイプで渡すとコマンドプロンプト環境でも動いた
chcp 65001
C:\usr\MeCab64>echo 吾輩は猫である | bin\mecab.exe
吾輩 名詞,代名詞,一般,*,*,*,吾輩,ワガハイ,ワガハイ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
猫 名詞,一般,*,*,*,*,猫,ネコ,ネコ
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある 助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
EOS
gitbashなどUTF-8を扱える環境だと普通にmecabを起動して使える
boku@hihi MINGW64 /c/usr/MeCab64
$ bin/mecab
吾輩は猫である
吾輩 名詞,代名詞,一般,*,*,*,吾輩,ワガハイ,ワガハイ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
猫 名詞,一般,*,*,*,*,猫,ネコ,ネコ
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある 助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
EOS
PythonからMeCabを使えるようにする
pip install mecab
Pythonから試しに使ってみる
import MeCab
tagger = MeCab.Tagger()
text = 'こんな夢を見た。'
parsed = tagger.parse(text)
print(parsed)
print('----------')
node = tagger.parseToNode(text)
while node:
print(node.surface, node.feature)
node = node.next
こんな 連体詞,*,*,*,*,*,こんな,コンナ,コンナ
夢 名詞,一般,*,*,*,*,夢,ユメ,ユメ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
----------
BOS/EOS,*,*,*,*,*,*,*,*
こんな 連体詞,*,*,*,*,*,こんな,コンナ,コンナ
夢 名詞,一般,*,*,*,*,夢,ユメ,ユメ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
BOS/EOS,*,*,*,*,*,*,*,*
mecab-ipadic-NEologd導入
WindowsでNEologd辞書を比較的簡単に入れる方法を参考にUTF-8辞書を作成して適当なディレクトリに配置する
試してみる
-u
で使用する辞書を指定する
C:\usr\MeCab64>echo 吾輩は猫である | bin\mecab.exe -u dic\NEologd.20190829-u.dic
吾輩は猫である 名詞,固有名詞,一般,*,*,*,吾輩は猫である,ワガハイハネコデアル,ワ ガハイワネコデアル
EOS
NEologdをPythonから使う
import MeCab
text = '南阿蘇水の生まれる里白水高原駅'
tagger = MeCab.Tagger()
parsed = tagger.parse(text)
print(parsed)
tagger = MeCab.Tagger('-u c:/usr/MeCab64/dic/NEologd.20190829-u.dic')
parsed = tagger.parse(text)
print(parsed)
南 名詞,一般,*,*,*,*,南,ミナミ,ミナミ
阿蘇 名詞,固有名詞,地域,一般,*,*,阿蘇,アソ,アソ
水 名詞,接尾,一般,*,*,*,水,スイ,スイ
の 助詞,格助詞,一般,*,*,*,の,ノ,ノ
生まれる 動詞,自立,*,*,一段,基本形,生まれる,ウマレル,ウマレル
里 名詞,一般,*,*,*,*,里,サト,サト
白水 名詞,一般,*,*,*,*,白水,シロミズ,シロミズ
高原 名詞,固有名詞,地域,一般,*,*,高原,タカハル,タカハル
駅 名詞,接尾,地域,*,*,*,駅,エキ,エキ
EOS
南阿蘇水の生まれる里白水高原駅 名詞,固有名詞,一般,*,*,*,南阿蘇水の生まれる里白水高原駅,ミナミアソミズノウマレルサトハクスイコウゲンエキ,ミナミアソミズノウマレルサトハクスイコウゲンエキ
EOS
前半が普通のMecab
後半がNEologd
有名な駅をちゃんと知っててえらい
詰まった話
Taggerにスペースの入った引数を渡す方法がわからない
tagger = MeCab.Tagger('-u c:/space dir/MeCab/dic/NEologd.20190829-u.dic')
tagger = MeCab.Tagger('-u "c:/space dir/MeCab/dic/NEologd.20190829-u.dic"')
書き方これぐらいしか思いつかないけどどちらもRuntimeErrorと言われて動かない
なのでスペースの入ってないディレクトリを使うようにする
0 件のコメント:
コメントを投稿