Ubuntu14.04で日本語構文・格・照応解析システムKNPをpythonから使えるようにする方法をお伝えする。

Python2系

まずはKNP – KUROHASHI-KAWAHARA LABよりpyknp-0.1.zipをダウンロードしておく。
ダウンロードしたあと、端末を開いてダウンロードしたディレクトリに移動しておく。
あとは、次のコマンドを順に実行すればインストールは完了する。


# zip解凍
$ unzip pyknp-0.1.zip

# カレントディレクトリの移動
$ cd ku_nlp-pyknp-a32529dbce0d/

# pyknpのインストール
$ sudo python setup.py install

pyknpは「/usr/local/lib/python2.7/dist-packages/」配下にインストールされる。

最後にpyknpを試してみる。
適当にファイルを作成して


$ vim test.py

次の内容を保存して閉じる。


# -*- coding: utf-8 -*-
from pyknp import Juman

juman = Juman()
res = juman.analysis('今日は晴れです')

for mrph in res.mrph_list():
    print mrph.midasi

このファイルを実行すると、次のように表示される。


$ python test.py
今日
は
晴れ
です

Python3系

まずはKNP – KUROHASHI-KAWAHARA LABよりpyknp-0.1.zipをダウンロードしておく。
ダウンロードしたあと、端末を開いてダウンロードしたディレクトリに移動しておく。


# zip解凍
$ unzip pyknp-0.1.zip

# カレントディレクトリの移動
$ cd ku_nlp-pyknp-a32529dbce0d/

ソースコードをPython2系からPython3系に変更する。


$ 2to3 -w ./

次に、pyknp/juman/juman.pyとpyknp/juman/morpheme.pyを修正する。
手動で修正する場合は次のようになる。

pyknp/juman/juman.pyとpyknp/juman/morpheme.pyを手動で修正

pyknp/juman/juman.pyを修正する。


#38行目あたり削除
#        subproc_args = {'stdin': subprocess.PIPE, 'stdout': subprocess.PIPE,
#                        'stderr': subprocess.STDOUT, 'cwd': '.', 'close_fds' : True}

#追加
        subproc_args = {'stdin': subprocess.PIPE, 'stdout': subprocess.PIPE,
                        'stderr': subprocess.STDOUT, 'cwd': '.', 'close_fds' : True,
                        'universal_newlines': True}

#54行目あたり削除
#    def query(self, sentence, pattern):
#        assert(isinstance(sentence, unicode))
#        self.process.stdin.write("%s\n" % sentence.encode('utf-8'))
#        result = ""
#        while True:
#            line = self.stdouterr.readline()[:-1]
#            if re.search(pattern, line):
#                break
#            result = "%s%s\n" % (result, line.decode('utf-8'))
#        return result

#追加
    def query(self, sentence, pattern):
        assert(isinstance(sentence, unicode))
        outs, errs = self.process.communicate(input="{}\n".format(sentence))
		result = ""
        for line in outs.split('\n'):
            if re.search(pattern, line):
                break
            result = "%s%s\n" % (result, line)
        return result

pyknp/juman/morpheme.pyを修正する。


#15行目あたり削除
#        parts = map(lambda s: s.decode('utf-8'), shlex.split(spec.encode('utf-8')))

#追加
        parts = [s for s in shlex.split(spec)]

pyknp/juman/juman.pyとpyknp/juman/morpheme.pyをパッチファイルで修正

上記の手動で行った修正をパッチファイルpyknp-0.1-python3.zipにまとめたので、ダウンロードして解凍する。


$ unzip pyknp-0.1-python3.zip

解凍したしたpyknp-0.1-python3.diffをku_nlp-pyknp-a32529dbce0d/ディレクトリに移動しておく。

パッチファイルを適用する。


$ patch -p1 < pyknp-0.1-python3.diff

インストール

インストールは次のコマンド実行すればよい。
このpyknpは「/usr/local/lib/python3.4/dist-packages/」配下にインストールされる。


$ sudo python3 setup.py install

最後にpyknpをPython3で試してみる。
適当にファイルを作成して


$ vim test.py

次の内容を保存して閉じる。


# -*- coding: utf-8 -*-
from pyknp import Juman

juman = Juman()
res = juman.analysis('今日は晴れです')

for mrph in res.mrph_list():
    print(mrph.midasi)

このファイルを実行すると、次のように表示される。


$ python3 test.py
今日
は
晴れ
です

参考

関連する記事

  • R dplyrパッケージのgroup_by_関数で複数の文字列を指定する方法R dplyrパッケージのgroup_by_関数で複数の文字列を指定する方法 Rのdplyrパッケージのgroup_by関数は指定した列をグルーピングできるので便利ですが、文字列を指定できません。 このパッケージのgroup_by_関数は文字列を指定できますが、複数の文字列を指定する場合には少し工夫が必要になります。 ここでは、異なるダイエットの雛の体重と年齢が収められているChickWeightをサンプルデータとします。 > […]
  • R 関数に時間制限を設ける方法 ある処理にとても時間が掛かるため、一定時間経過後はその処理を途中で打ち切りたいときがある。 例えば、for文で、あるループだけが重いため全体として時間が掛かってしまう場合、その処理を一旦スキップしてfor文の先に処理を進めたい、などである。 ここでは、そのひとつの解決策として、関数に時間制限を設けて、一定時間経過後はその関数を強制終了するコードをご紹介する。 ただし […]
  • Ubuntu apt-getでRがアップデートできない場合の対処法Ubuntu apt-getでRがアップデートできない場合の対処法 apt-getコマンドでRがアップデートできない理由はいくつか考えられる。ここでは、アップデートできない原因別に対処法をお伝えする。 接続できない 「apt-get […]
  • Bioconductor Workflowパッケージ一覧Bioconductor Workflowパッケージ一覧 BioconductorのWorkflowパッケージの一覧をご紹介します。英語での説明文をgoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。パッケージを探す参考にしていただければ幸いです。 パッケージ確認日:2022/11/01 パッケージ数:29 1. liftOver Changing genomic coordinate […]
  • Ubuntu16.04でElectronの配布アプリケーションを作成する方法Ubuntu16.04でElectronの配布アプリケーションを作成する方法 Ubuntu16.04を用いて開発したElectronアプリケーションを配布に適したファイル群で出力する方法をお伝えします。 ここでは、サンプルアプリケーションとして、electron-quick-startを利用させていただき、配布のための環境構築からWindows用アプリケーションとして実行しているところまでをご紹介します。 環境 今回の作業環境を確認し […]
Ubuntu 日本語構文・格・照応解析システムKNPをpythonから使えるようにする