Skip to content
This repository has been archived by the owner on Mar 9, 2023. It is now read-only.

Problem with user defined dictionary #143

Open
JSB97 opened this issue Sep 17, 2020 · 1 comment
Open

Problem with user defined dictionary #143

JSB97 opened this issue Sep 17, 2020 · 1 comment

Comments

@JSB97
Copy link

JSB97 commented Sep 17, 2020

I am making use of sudachipy via ginza, and am trying to annotate the following sentences.

プロ野球の中日で選手、監督を務め、1月4日に70歳で死去した星野仙一氏をしのび、3日、名古屋市東区のナゴヤドームで行われた中日―楽天のオープン戦は追悼試合として開催された。
明治大の後輩、島内宏明外野手は「改めてすごい人だったんだなと思った」と話した。

And in my dictionary I have the following lines, which match 明治 and 楽天 in the above.
There are no other lines in the dictionary that match any substrings in the sentence.

楽天,1288,1288,100,楽天_4755-2018,名詞,固有名詞,組織,上場会社,*,*,RAKUTEN,楽天,*,*,*,*,*
明治,1288,1288,100,明治_2261-2009,名詞,固有名詞,組織,上場会社,*,*,MEIJI,明治,*,*,*,*,*

When I try and run annotations with this configuration, i get the below error:

... 

  File "/Users/jb/.pyenv/versions/3.6.1/lib/python3.6/site-packages/spacy/language.py", line 441, in __call__
    doc = self.make_doc(text)
  File "/Users/jb/.pyenv/versions/3.6.1/lib/python3.6/site-packages/spacy/lang/ja/__init__.py", line 281, in make_doc
    return self.tokenizer(text)
  File "/Users/jb/.pyenv/versions/3.6.1/lib/python3.6/site-packages/spacy/lang/ja/__init__.py", line 144, in __call__
    dtokens = self._get_dtokens(sudachipy_tokens)
  File "/Users/jb/.pyenv/versions/3.6.1/lib/python3.6/site-packages/spacy/lang/ja/__init__.py", line 182, in _get_dtokens
    ) for idx, token in enumerate(sudachipy_tokens) if len(token.surface()) > 0
  File "/Users/jb/.pyenv/versions/3.6.1/lib/python3.6/site-packages/spacy/lang/ja/__init__.py", line 182, in <listcomp>
    ) for idx, token in enumerate(sudachipy_tokens) if len(token.surface()) > 0
  File "/Users/jb/.pyenv/versions/3.6.1/lib/python3.6/site-packages/sudachipy/morpheme.py", line 36, in part_of_speech
    return self.list.grammar.get_part_of_speech_string(wi.pos_id)
  File "/Users/jb/.pyenv/versions/3.6.1/lib/python3.6/site-packages/sudachipy/dictionarylib/grammar.py", line 55, in get_part_of_speech_string
    return self.pos_list[pos_id]
IndexError: list index out of range

Could someone advise me as to what is causing this error please?

I am quite certain the sentence with 明治 is causing the issue,as if i remove the second sentence, the annotation works fine. It therefore seems like 楽天 is being picked up by SudachiPy with the dictionary, but 明治 is not.

Why is this?

@sorami
Copy link
Collaborator

sorami commented Sep 18, 2020

(ちなみに問い合わせは日本語でも問題ないです!)

Could you tell us how you built the user dictionary, and the piece of code which you got that error?

I cannot reproduce your error case; Ideally, we would want a minimal case that causes the error.

Here is a procedure I tried, which DID work without any errors;

$ cat userdict.csv
楽天,1288,1288,100,楽天_4755-2018,名詞,固有名詞,組織,上場会社,*,*,RAKUTEN,楽天,*,*,*,*,*
明治,1288,1288,100,明治_2261-2009,名詞,固有名詞,組織,上場会社,*,*,MEIJI,明治,*,*,*,*,*

$ sudachipy ubuild -o user.dic userdict.csv
reading the source file...2 words
writing the POS table...36 bytes
writing the connection matrix...4 bytes
building the trie...done
writing the trie...1028 bytes
writing the word-ID table...14 bytes
writing the word parameters...16 bytes
writing the word_infos...106 bytes
writing word_info offsets...8 bytes
$ ls -1
char.def
sudachi.json
test.txt
unk.def
user.dic
userdict.csv

$ echo 楽天明治 | sudachipy -r sudachi.json
楽天	名詞,固有名詞,組織,上場会社,*,*	楽天
明治	名詞,固有名詞,組織,上場会社,*,*	明治
EOS

$ cat test.txt
プロ野球の中日で選手、監督を務め、1月4日に70歳で死去した星野仙一氏をしのび、3日、名古屋市東区のナゴヤドームで行われた中日―楽天のオープン戦は追悼試合として開催された。
明治大の後輩、島内宏明外野手は「改めてすごい人だったんだなと思った」と話した。

$ sudachipy -r sudachi.json test.txt
プロ	名詞,普通名詞,一般,*,*,*	プロ
野球	名詞,普通名詞,一般,*,*,*	野球
の	助詞,格助詞,*,*,*,*	の
中日	名詞,固有名詞,一般,*,*,*	中日
で	助詞,格助詞,*,*,*,*	で
選手	名詞,普通名詞,一般,*,*,*	選手
、	補助記号,読点,*,*,*,*	、
監督	名詞,普通名詞,サ変可能,*,*,*	監督
を	助詞,格助詞,*,*,*,*	を
務め	動詞,一般,*,*,下一段-マ行,連用形-一般	勤める
、	補助記号,読点,*,*,*,*	、
1	名詞,数詞,*,*,*,*	1
月	名詞,普通名詞,助数詞可能,*,*,*	月
4	名詞,数詞,*,*,*,*	4
日	接尾辞,名詞的,助数詞,*,*,*	日
に	助詞,格助詞,*,*,*,*	に
70	名詞,数詞,*,*,*,*	70
歳	接尾辞,名詞的,助数詞,*,*,*	歳
で	助詞,格助詞,*,*,*,*	で
死去	名詞,普通名詞,サ変可能,*,*,*	死去
し	動詞,非自立可能,*,*,サ行変格,連用形-一般	為る
た	助動詞,*,*,*,助動詞-タ,連体形-一般	た
星野	名詞,固有名詞,人名,姓,*,*	星野
仙一	名詞,固有名詞,人名,名,*,*	仙一
氏	接尾辞,名詞的,一般,*,*,*	氏
を	助詞,格助詞,*,*,*,*	を
しのび	動詞,一般,*,*,五段-バ行,連用形-一般	しのぶ
、	補助記号,読点,*,*,*,*	、
3	名詞,数詞,*,*,*,*	3
日	接尾辞,名詞的,助数詞,*,*,*	日
、	補助記号,読点,*,*,*,*	、
名古屋市東区	名詞,固有名詞,地名,一般,*,*	名古屋市東区
の	助詞,格助詞,*,*,*,*	の
ナゴヤ	名詞,固有名詞,地名,一般,*,*	ナゴヤ
ドーム	名詞,普通名詞,一般,*,*,*	ドーム
で	助詞,格助詞,*,*,*,*	で
行わ	動詞,一般,*,*,五段-ワア行,未然形-一般	行う
れ	助動詞,*,*,*,助動詞-レル,連用形-一般	れる
た	助動詞,*,*,*,助動詞-タ,連体形-一般	た
中日	名詞,固有名詞,一般,*,*,*	中日
―	補助記号,一般,*,*,*,*	―
楽天	名詞,固有名詞,組織,上場会社,*,*	楽天
の	助詞,格助詞,*,*,*,*	の
オープン戦	名詞,普通名詞,一般,*,*,*	オープン戦
は	助詞,係助詞,*,*,*,*	は
追悼	名詞,普通名詞,サ変可能,*,*,*	追悼
試合	名詞,普通名詞,サ変可能,*,*,*	試合
と	助詞,格助詞,*,*,*,*	と
し	動詞,非自立可能,*,*,サ行変格,連用形-一般	為る
て	助詞,接続助詞,*,*,*,*	て
開催	名詞,普通名詞,サ変可能,*,*,*	開催
さ	動詞,非自立可能,*,*,サ行変格,未然形-サ	為る
れ	助動詞,*,*,*,助動詞-レル,連用形-一般	れる
た	助動詞,*,*,*,助動詞-タ,終止形-一般	た
。	補助記号,句点,*,*,*,*	。
EOS
明治	名詞,固有名詞,組織,上場会社,*,*	明治
大	接尾辞,名詞的,一般,*,*,*	大
の	助詞,格助詞,*,*,*,*	の
後輩	名詞,普通名詞,一般,*,*,*	後輩
、	補助記号,読点,*,*,*,*	、
島内	名詞,固有名詞,人名,姓,*,*	島内
宏明	名詞,固有名詞,人名,名,*,*	宏明
外野手	名詞,普通名詞,一般,*,*,*	外野手
は	助詞,係助詞,*,*,*,*	は
「	補助記号,括弧開,*,*,*,*	「
改めて	副詞,*,*,*,*,*	改めて
すごい	形容詞,一般,*,*,形容詞,連体形-一般	凄い
人	名詞,普通名詞,一般,*,*,*	人
だっ	助動詞,*,*,*,助動詞-ダ,連用形-促音便	だ
た	助動詞,*,*,*,助動詞-タ,連体形-一般	た
ん	助詞,準体助詞,*,*,*,*	の
だ	助動詞,*,*,*,助動詞-ダ,終止形-一般	だ
な	助詞,終助詞,*,*,*,*	な
と	助詞,格助詞,*,*,*,*	と
思っ	動詞,一般,*,*,五段-ワア行,連用形-促音便	思う
た	助動詞,*,*,*,助動詞-タ,終止形-一般	た
」	補助記号,括弧閉,*,*,*,*	」
と	助詞,格助詞,*,*,*,*	と
話し	動詞,一般,*,*,五段-サ行,連用形-一般	話す
た	助動詞,*,*,*,助動詞-タ,終止形-一般	た
。	補助記号,句点,*,*,*,*	。
EOS

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants