Pocket

Pythonでmecabを使いたかったのですが、面倒なことが多すぎてインストールに挫折しました。

ということで、私みたいな「mecab-pythonのインストールに挫折した人向け」のクラスを書きましたので、使いたい人は使ってみてください。
最低限の機能しかないですが、一応やりたいことはできるのではないでしょうか。

この記事末尾のコードをコピペして「mecab.py」とか名前を付けて保存して、モジュールとして読み込んでもらうと以下のように使うことができます。

[python]
import mecab
string = "国境の長いトンネルを抜けるとそこは雪国だった。"
m = mecab.Mecab(string)

# ただの分かち書きのリストを返す
m.wakachi()
#=> [‘国境’, ‘の’, ‘長い’, ‘トンネル’, ‘を’, ‘抜ける’, ‘と’, ‘そこ’, ‘は’, ‘雪国’, ‘だっ’, ‘た’, ‘。’]

# 普通表記のリストを返す
m.futsu_hyouki()
#=> [‘国境’, ‘の’, ‘長い’, ‘トンネル’, ‘を’, ‘抜ける’, ‘と’, ‘そこ’, ‘は’, ‘雪国’, ‘だ’, ‘た’, ‘。’]
[/python]

という感じです。
今後改良していこうと思います。

Mecabクラスのソースコード

[python]
# -*- coding: utf-8 -*-

class Mecab:
"""mecab-pythonのインストールに挫折した人用
"""

def __init__(self, string=""):
self.ma_list = self.cmd_mecab(string)

def wakachi(self):
"""分かち書きの結果を返す(list)
"""
wakachi_list = []
for word_ma in self.ma_list:
wakachi_list.append(word_ma.split(‘\t’)[0])
return wakachi_list

def futsu_hyouki(self):
"""普通表記の結果を返す(list)
"""
futsu_hyouki_list = []
for word_ma in self.ma_list:
word, ma_info = word_ma.split(‘\t’)
futsu_hyouki_info = ma_info.split(‘,’)[6]
word_futsu = ”
if futsu_hyouki_info == ‘*’:
word_futsu = word
else:
word_futsu = futsu_hyouki_info
futsu_hyouki_list.append(word_futsu)
return futsu_hyouki_list

def cmd_mecab(self, string=”, opt=”):
"""
Shell経由でmecabを実行して結果を取得
(引き数)
string str: 解析したい文字列
opt str: mecabの解析オプション
(返り値)
stdout str: 解析した結果そのまま
"""
import subprocess
cmd = ‘echo %s | mecab’ % string.replace(‘\n’, ”)
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout_data, stderr_data = p.communicate()
stdout = str(stdout_data, encoding=’Shift-JIS’)
words_with_ma_info = stdout.split("\r\n")
words_with_ma_info.remove(‘EOS’)
words_with_ma_info.remove(”)
return words_with_ma_info
[/python]

Pocket