kenkovlog

けんこふたんっオフィシャユブヨグッ
アンッ!アンッ!アンッ!アンッ!

subprocess で KyTea

KyTea で自分のモデルをロードするには時間がかかるため、一度プロセスを起動したら それを使い続けたい。例えば

kytea_command = "kytea"
kytea = subprocess.Popen(
    [kytea_command, "-model", "./kovlang.model", "-notag", "2"],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE)

というコードを書いて、

>>> ipt = "今日は疲れたのでもう寝たい\n".encode('utf-8')
>>> morph = kytea.communicate(ipt)[0].decode('utf-8').rstrip().split()

としていたのでは毎回サブプロセスをつくることになり、その度に KyTea がモデルをロードして起動 するため一回一回の解析に時間がかかる。そこで

>>> ipt = "今日は疲れたのでもう寝たい\n".encode('utf-8')
>>> kytea.stdin.write(ipt)
>>> kytea.stdin.flush()
>>> morph = kytea.stdout.readline().decode('utf-8').rstrip().split()

のように kytea.stdinkytea.stdout に対して読み書きすれば一度つくったサブプロセス を使い続けることができ、モデルのロードは初回一回のみでよい。

けんこふたん