LoginSignup
6
6

More than 3 years have passed since last update.

PythonからMeCabを使う

Last updated at Posted at 2018-11-14

はじめに

 pirkaを作ってる最中に形態素解析をJanomeでさせてたらフリーズしたので、mecab-pythonで高速に解析できるプログラムを作った。紹介する。

環境

 PC:Raspberry Pi 3 Model B+
 OS:Raspbian GNU/Linux 9.4 (stretch)

必要なモジュールのインストール

 ターミナルを開いて以下のコマンドを入力する。


$ sudo pip3 install mecab-python3

作ったプログラム

 こんな感じ。

import MeCab

def tokenizer(text):
    t = MeCab.Tagger("")
    t.parse("")
    m = t.parseToNode(text)
    tokens = []
    while m:
        tokenData = m.feature.split(",")
        token = [m.surface]
        for data in tokenData:
            token.append(data)
        tokens.append(token)
        m = m.next
    tokens.pop(0)
    tokens.pop(-1)
    return tokens

tokenizer("ぼんやりとした花曇りの白い空。百人が乗った車輛、千人を運ぶ列車、その千本が流れる街。") #『小説 君の名は。』より

 これで実行する。

$ python3 analyzer.py
[
['ぼんやり', '名詞', 'サ変接続', '*', '*', '*', '*', 'ぼんやり', 'ボンヤリ', 'ボンヤリ'], 
['と', '助詞', '格助詞', '一般', '*', '*', '*', 'と', 'ト', 'ト'], 
['し', '動詞', '自立', '*', '*', 'サ変・スル', '連用形', 'する', 'シ', 'シ'], 
['た', '助動詞', '*', '*', '*', '特殊・タ', '基本形', 'た', 'タ', 'タ'], 
['花曇り', '名詞', '一般', '*', '*', '*', '*', '花曇り', 'ハナグモリ', 'ハナグモリ'], 
['の', '助詞', '格助詞', '一般', '*', '*', '*', 'の', 'ノ', 'ノ'], 
['白い', '形容詞', '自立', '*', '*', '形容詞・アウオ段', '基本形', '白い', 'シロイ', 'シロイ'], 
['空', '名詞', '一般', '*', '*', '*', '*', '空', 'ソラ', 'ソラ'], 
['。', '記号', '句点', '*', '*', '*', '*', '。', '。', '。'], 
['百', '名詞', '数', '*', '*', '*', '*', '百', 'ヒャク', 'ヒャク'], 
['人', '名詞', '接尾', '助数詞', '*', '*', '*', '人', 'ニン', 'ニン'], 
['が', '助詞', '格助詞', '一般', '*', '*', '*', 'が', 'ガ', 'ガ'], 
['乗っ', '動詞', '自立', '*', '*', '五段・ラ行', '連用タ接続', '乗る', 'ノッ', 'ノッ'], 
['た', '助動詞', '*', '*', '*', '特殊・タ', '基本形', 'た', 'タ', 'タ'], 
['車輛', '名詞', '一般', '*', '*', '*', '*', '車輛', 'シャリョウ', 'シャリョー'], 
['、', '記号', '読点', '*', '*', '*', '*', '、', '、', '、'], 
['千', '名詞', '数', '*', '*', '*', '*', '千', 'セン', 'セン'], 
['人', '名詞', '接尾', '助数詞', '*', '*', '*', '人', 'ニン', 'ニン'], 
['を', '助詞', '格助詞', '一般', '*', '*', '*', 'を', 'ヲ', 'ヲ'], 
['運ぶ', '動詞', '自立', '*', '*', '五段・バ行', '基本形', '運ぶ', 'ハコブ', 'ハコブ'], 
['列車', '名詞', '一般', '*', '*', '*', '*', '列車', 'レッシャ', 'レッシャ'], 
['、', '記号', '読点', '*', '*', '*', '*', '、', '、', '、'], 
['その', '連体詞', '*', '*', '*', '*', '*', 'その', 'ソノ', 'ソノ'], 
['千', '名詞', '数', '*', '*', '*', '*', '千', 'セン', 'セン'], 
['本', '名詞', '接尾', '助数詞', '*', '*', '*', '本', 'ホン', 'ホン'], 
['が', '助詞', '格助詞', '一般', '*', '*', '*', 'が', 'ガ', 'ガ'], 
['流れる', '動詞', '自立', '*', '*', '一段', '基本形', '流れる', 'ナガレル', 'ナガレル'], 
['街', '名詞', '一般', '*', '*', '*', '*', '街', 'マチ', 'マチ'], 
['。', '記号', '句点', '*', '*', '*', '*', '。', '。', '。']
]

 全ての項目をリストにした。ここから品詞や読みを取得できる。

終わりに

 Janomeが重すぎて困っていたときに「MeCab速いよ」と教えてくださった東京工業大学の方、ありがとうございます。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6