[python] mecab-pythonを使ってみた。

2020年04月27日 00:51

最近またpythonを覚えだしたのですが、その中の事例にmecabを使うものがでてきました。この手のものは、単語ごとに改行を除去したりとか、またはtabで分割されている場合には、tabでsplitしたりとかいろいろあるので、今回は今回で使った関数とかに関して調べたものを記録しておきます。


rsplit 最後の改行を取り除くケース(lsplitは先頭から)

色々使う道があるらしいけど、こんな感じのものらしい


#そのまま使うと、最後の改行が消えるらしい
rstrip()

#最後からチェックしていって、aとeとfが消えていくらしい
str='bbbbaaeeff'
str.rstrip("aef")

結果:bbbb

Mecabの単語分解するTagger

引数を与えると色々返す結果が変わるらしい


str="すもももももももものうち"

#引数なしで実行してみた
result=MeCab.Tagger().parse(str)
print(result)

・・結果・・
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

#Chasen形式で出力する
result=MeCab.Tagger("-Ochasen").parse(str)
print(result)

・・結果・・
すもも  スモモ  すもも  名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
の      ノ      の      助詞-連体化
うち    ウチ    うち    名詞-非自立-副詞可能
EOS

Chasen形式ってのがどうもあるらしい。elasticSearchのtokenizerとどことなく似てるような…。品詞の部分とか。

#わかち書き形式で出力する
result=MeCab.Tagger("-Owakati").parse(str)
print(result)

・・結果・・
すもも も もも も もも の うち 

なるほど…。これはmysqlのfulltext indexの時に似たようなことをした気がしますね…。

n-gramと併用しましたけども。

#読みだけで出力する
result=MeCab.Tagger("-Oyomi").parse(str)
print(result)

・・結果・・
スモモモモモモモモノウチ

ちょっと何の役に立つかは不明ですが、検索フォームの入力途中のレコメンドとかに使えるのかもしれませんね。知らんけど。

#単語の全情報を出力する
result=MeCab.Tagger("-Odump").parse(str)
print(result)

・・結果・・
0 BOS BOS/EOS,*,*,*,*,*,*,*,* 0 0 0 0 0 0 2 1 0.000000 0.000000 0.000000 0
9 すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ 0 9 1285 1285 38 6 0 1 0.000000 0.000000 0.000000 7263
19 も 助詞,係助詞,*,*,*,*,も,モ,モ 9 12 262 262 16 6 0 1 0.000000 0.000000 0.000000 7774
25 もも 名詞,一般,*,*,*,*,もも,モモ,モモ 12 18 1285 1285 38 6 0 1 0.000000 0.000000 0.000000 15010
31 も 助詞,係助詞,*,*,*,*,も,モ,モ 18 21 262 262 16 6 0 1 0.000000 0.000000 0.000000 15521
37 もも 名詞,一般,*,*,*,*,もも,モモ,モモ 21 27 1285 1285 38 6 0 1 0.000000 0.000000 0.000000 22757
46 の 助詞,連体化,*,*,*,*,の,ノ,ノ 27 30 368 368 24 6 0 1 0.000000 0.000000 0.000000 23131
59 うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ 30 36 1313 1313 66 6 0 1 0.000000 0.000000 0.000000 23729
62 EOS BOS/EOS,*,*,*,*,*,*,*,* 36 36 0 0 0 0 3 1 0.000000 0.000000 0.000000 21245

うーん、この。たぶん、辞書に登録されてるデータじゃないですかね。
https://taku910.github.io/mecab/bindings.html
こちらに全メソッドがあるので、その中からチェックです。

#neologdを使った形態素解析を実施する
str2='ファーウェイのスマホ'
result=MeCab.Tagger("-d /usr/lib64/mecab/dic/mecab-ipadic-neologd").parse(str2)
print(result)

result=MeCab.Tagger().parse(str2)
print(result)

ファーウェイ    名詞,固有名詞,組織,*,*,*,ファーウェイ,ファーウェイ,ファーウェイ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
スマホ  名詞,固有名詞,一般,*,*,*,スマホ,スマホ,スマホ
EOS

ファー  名詞,一般,*,*,*,*,ファー,ファー,ファー
ウェイ  名詞,一般,*,*,*,*,ウェイ,ウェイ,ウェイ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
スマホ  名詞,一般,*,*,*,*,*
EOS

neologdは優秀ですね。デフォルトだとやたらウェイ系になってます。

mecabが中心になったけど、このページに今後追記しようと思った

おわり


category:
Python,

スポンサードサーチ

コメント



作成支援

新着

タグ一覧