Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jumanの出力が止まったとき無限ループに入る #56

Open
Ina299 opened this issue Sep 29, 2021 · 3 comments
Open

jumanの出力が止まったとき無限ループに入る #56

Ina299 opened this issue Sep 29, 2021 · 3 comments

Comments

@Ina299
Copy link

Ina299 commented Sep 29, 2021

while True:

EOSを検知してループから抜ける処理だと思われるんですがjumanが長い文章の場合たまに\n\n\nを無限に出力して抜けれなくなる場合がある
ループ回数を入力の文字数などで上限を決めるか同じ文字列が一定数連続したらbreakするなどの処理がないと例外すら出ず止まってしまう

@nobu-g
Copy link
Member

nobu-g commented Oct 3, 2021

不具合が再現される実例を載せてもらえると助かります.

@Ina299
Copy link
Author

Ina299 commented Oct 4, 2021

※厚労省の平成18年の事故事例で実際にあるパブリックな文章です
出典:https://anzeninfo.mhlw.go.jp/anzen/shisyo_xls/sisyou_db_h18_05.xls

from pyknp import KNP
knp = KNP(option='-tab -anaphora')     # Default is JUMAN++. If you use JUMAN, use KNP(jumanpp=False)
text = "店舗後方青果加工室にて、レタス用のコンテナを片付けるため台車にコンテナを4段重ね、右手で台車を押し、左手でコンテナを支えながら荷捌き所へ移動中、同所入口の足踏みの鉄板にさしかかった時、コンテナが水濡れのため滑り、崩れそうになるのを防ぐのに、左手に力を入れ、身体の重心を前方に向けた際、コンテナが崩れ転倒し、コンテナに顔面を打ちつけ負傷した。"
result = knp.parse(text)

しばらく何も返さずctrl-cで止めると以下で止まってることがわかります
$ python3 test.py
^CTraceback (most recent call last):
File "test.py", line 5, in
result = knp.parse(text)
File "/Users/xxxx/.pyenv/versions/3.7.1/lib/python3.7/site-packages/pyknp/knp/knp.py", line 90, in parse
return self.parse_juman_result(juman_str, juman_format)
File "/Users/xxxx/.pyenv/versions/3.7.1/lib/python3.7/site-packages/pyknp/knp/knp.py", line 104, in parse_juman_result
knp_lines = self.analyzer.query(juman_str, pattern=r'^%s$' % self.pattern)
File "/Users/xxxx/.pyenv/versions/3.7.1/lib/python3.7/site-packages/pyknp/utils/analyzer.py", line 49, in query
return self.subprocess.query(input_str, pattern=pattern)
File "/Users/xxxx/.pyenv/versions/3.7.1/lib/python3.7/site-packages/pyknp/utils/process.py", line 81, in query
line = self.process.stdout.readline().decode('utf-8').rstrip()
KeyboardInterrupt
とりあえずprint(line)で出力を見ると
した した する 動詞 2 * 0 サ変動詞 16 タ形 10 "代表表記:する/する 付属動詞候補(基本) 自他動詞:自:成る/なる"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS

のあと延々と改行を行う出力が得られる。コマンドラインでjumanppに渡す場合はEOSで止まる。subprocessが問題?

@nobu-g nobu-g closed this as completed in 088c89d Oct 8, 2021
@nobu-g
Copy link
Member

nobu-g commented Oct 8, 2021

長い文を入力した場合 KNP が異常終了してしまうことが問題のようです.コマンドラインでも確認できました.

$ echo "店舗後方青果加工室にて、レタス用のコンテナを片付けるため台車にコンテナを4段重ね、右手で台車を押し、左手でコンテナを支えながら荷捌き所へ移動中、同所入口の足踏みの鉄板にさしかかった時、コンテナが水濡れのため滑り、崩れそうになるのを防ぐのに、左手に力を入れ、身体の重心を前方に向けた際、コンテナが崩れ転倒し、コンテナに顔面を打って負傷した。" | jumanpp | knp -tab -anaphora
[1]    88586 done                echo  |
       88587 done                jumanpp |
       88588 segmentation fault  knp -tab -anaphora
$ jumanpp --version
Juman++ Version: 2.0.0-rc3 / Dictionary: 20190731-356e143 / LM: K:20190430-7d143fb L:20181122-b409be68 F:20171214-9d125cb
$ knp -v
knp 5.0 (Revision.825c01b7 on 2021-02-06)

長文が解析できない問題は解決していませんが,子プロセスが終了した場合にループから抜けるように修正しました.

@nobu-g nobu-g reopened this Oct 8, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants