Windowsでpythonからjuman++を使う方法

プログラミング,python

まずjuman++をwindowsにインストールする方法は別記事にしてあるので、そちらをご参考ください。だいぶわかりやすく書いたつもりでいます。

Jumanをコマンドラインから使えるようになったので、さっそくPythonからも実行できるようにしていこうと思います。

やはりつまずくポイントがいくつかありましたので解説しておこうと思います。

Juman++をPythonで動かす(pyknpを使う)

jumanを使うためにはpyknpというライブラリが必要なので、pipしましょう。

ちなみに私はpipしようとするとエラーがでました。

もしも同じように、cp932~~というエラー文がでた場合は以下の記事を参考にするとエラーを回避できるかもしれません。

pyknpをインストールしたら、コードを書いていきます。

用意するコードは以下になります。

from pyknp import Juman
juman=Juman(command='jumanpp_v2', option='--config=C:\jumanpp\libexec\jumandic.conf')
mrphs=juman.analysis('体のどこかに当たってくれ')
for m in mrphs:
    print(m.midasi)

と、ここまでは解説している方が多いのですが、windowsではまず間違いなくエラーが発生すると思います。そのエラーの回避方法を書いている人が一人いましたので紹介いたします。

module 'signal' has no attribute 'SIGALRM' のエラーについて

対策方法

まず対策方法ですが、pipしたpyknpの中身を変更する必要があります。

変更するためにまずpyknpが保存されている場所を特定します。

$ pip show pyknp

pyknpの情報が表示されます。

中のLocationのパスにpyknpのpyファイルが保管されています。

その中にある、process.pyを編集しましょう。

編集する部分は3点です。

#import signal
import threading
#signal.signal(signal.SIGALRM, alarm_handler)
#signal.alarm(self.process_timeout)
alarm = threading.Timer(self.process_timeout, alarm_handler)
alarm.start()
#signal.alarm(0)
alarm.cancel()

signalでかかれているコードをコメントアウトして、このように書き換えてください。

そうすれば、サンプルコードは動くようになると思います。

原因

原因ですが、signalというモジュール(ライブラリではないです)がWindowsに搭載されていないのが問題のようです。

そのためsignal使わないコードの書き換える必要があったということでした。

これはhttps://teratail.com/questions/241078 の記事を参考に解決できました。