最終的にやりたいこと
定期的に送られてくる報告書の類(書かれていることは毎回似通っている)を、一定のフォーマット・一定の文体で要約したい、というのが最終的なゴールです。既存の要約アルゴリズムも使うかもしれませんが、元の文は数パターン(ただし色々修飾がついている)のため、情報の優先順位をルールベースで実装しながらきっちり目的の文型に収めたいと思っています。
まずは修飾関係を解析するためのCaboChaをPythonから呼び出せる環境を作ります。
セットアップ後の主要要素 & バージョン
- Windows 10
- Python 3.7.1(32bit)
- Mecab本体:[Mecab 0.996 (32bit Windows用exe版)] (http://taku910.github.io/mecab/)
- MeCab-Pythonバインド:[mecab-python-windows] (https://qiita.com/yukinoi/items/990b6933d9f21ba0fb43)
- CaboCha本体:[CaboCha 0.69 (32bit Windows用exe版)] (https://taku910.github.io/cabocha/)
- CaboCha-Pythonバインド:[CaboCha 0.69 (tarソースコードから作成)] (https://taku910.github.io/cabocha/)
- Pythonのバージョンに応じたC++コンパイラ (今回はBuild Tools for Visual Studio 2017でC++ 14.1をインストール)
(1) MeCabのインストールとPythonからのバインディング
- [Mecab公式サイト] (http://taku910.github.io/mecab/)からWindows用のexeをダウンロードし、UTF8を指定してインストールする。(場所は任意だが、デフォはC:\Program Files (x86)\MeCab)
- Pythonからのバインディングは、先人の恩恵にあずかってpip install mecab-python-windowsを実行する
参考)https://qiita.com/yukinoi/items/990b6933d9f21ba0fb43
※自分でコンパイルする方法は割愛。というかCaboChaが苦戦するので、MeCabは体力温存で。 - Pythonの対話シェルまたは一度ファイルに保存して、以下のコードを実行して結果が返ればOK。
import sys
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("今日もしないとね"))
※以下のような結果が返る
今日 キョウ 今日 名詞-副詞可能
も モ も 助詞-係助詞
し シ する 動詞-自立 サ変・スル 未然形
ない ナイ ない 助動詞 特殊・ナイ 基本形
と ト と 助詞-接続助詞
ね ネ ね 助詞-終助詞
EOS
(2) CaboChaのダウンロードとインストール
- [CaboCha公式サイト] (https://taku910.github.io/cabocha/)から、**Windows用のexe**と**ソースのtar.gz**を両方ダウンロードする。
- MeCab同様、exe形式のインストーラーを起動して、UTF8を指定してインストールする。 (場所は任意だが、デフォはC:\Program Files (x86)\CaboCha)
- ソースのtar.gzを適当な場所に解凍しておく。
- 最後に、環境変数のパスに”C:\Program Files (x86)\CaboCha\bin”を通してcabochaを実行できるようにしておく。
これはpythonがdllにアクセスするためにも必要で、実施しておかないとPythonからCaboChaを実行したときにエラーになる。
(3) Visual C++コンパイル環境を整える
Visual Studio 2017等の統合開発環境、またはBuild Toolsなどのコンパイラが入っていない場合、それらをインストールする必要があります。
Python 3.5以降であれば、Build Tools for Visual Studio 2017でC++ Build ToolsをインストールすればOKです。その他のバージョンを使っている場合、必要なVisual C++のバージョンが異なるため、詳しくは、こちら「WindowsでCaboCha-Python3バインディング」を参考に、パッケージを選択してください。
(4) CaboChaをPython3から使えるようにする
いよいよ環境構築の山場、CaboChaをPython3から扱えるようにバインドをコンパイルします。
-
まず、pip install --upgrade setuptoolsを実行して、setuptoolsを念のため最新化しておきます。
-
次に、ダウンロードしておいたCaboChaソースコード.tar.gzを解凍したフォルダのpythonディレクトリに移動します。
-
pythonディレクトリの下にあるsetup.pyをWindows用に修正します。修正箇所と内容は後述しますが、他にWindowsにCabocha 0.68をいれてPythonで係り受けを解析してみるが参考になると思います。
-
python setup.py installを実行します。
無事に完了すればセットアップは終わりです。
コンパイルエラーが出た場合は、こちら「WindowsでCaboCha-Python3バインディング」を参考にしてください。
> pip install --upgrade setuptools
> cd cabocha-0.69\python
# 解凍したcabochaのソースコード
> (ここでsetup.pyを修正する)
> python setup.py
(5) Python3からCaboChaを使ってみる
CaboChaのサンプルコードを参考に、以下のようなコードを書いて、実行できれば完了です。
※setup.pyと一緒に配布されているtest.pyを参考にPython2系のprint文をprint()に変更・簡易化したもの
import CaboCha
c = CaboCha.Parser()
sentence = "太郎はこの本を二郎を見た女性に渡した。"
print(c.parseToString(sentence))
> python test.py
太郎は-----------D
この-D |
本を---D |
二郎を-D |
見た-D |
女性に-D
渡した。
EOS
参考)setup.pyの修正前・修正後
setup.pyは、下記3つのコメントアウト行で、Windows版にはないcabocha-configを実行して取得する値を直接ハードコードします。
#!/usr/bin/env python
from distutils.core import setup,Extension,os
import string
def cmd1(str):
return os.popen(str).readlines()[0][:-1]
def cmd2(str):
return cmd1(str).split()
setup(name = "cabocha-python",
# ↓下記のように直す version = cmd1("cabocha-config --version"),
version = "0.69",
py_modules=["CaboCha"],
ext_modules = [
Extension("_CaboCha",
["CaboCha_wrap.cxx",],
# ↓下記のように直す include_dirs=cmd2("cabocha-config --inc-dir"),
include_dirs=[r"C:\Program Files (x86)\CaboCha\sdk"],
# ↓下記のように直す library_dirs=cmd2("cabocha-config --libs-only-L"),
library_dirs=[r"C:\Program Files (x86)\CaboCha\sdk"],
libraries=cmd2("cabocha-config --libs-only-l"))
])
参考サイト
MeCab, CaboChaについて
- [MeCab: Yet Another Part-of-Speech and Morphological Analyzer] (http://taku910.github.io/mecab/)
- CaboCha/南瓜: Yet Another Japanese Dependency Structure Analyzer
要約という分野について
- [大自然言語時代のための、文章要約] (https://qiita.com/icoxfog417/items/d06651db10e27220c819)
- [テキスト自動要約メモ Negative/Positive Thinking] (http://d.hatena.ne.jp/jetbead/20130328/1364403521)