Как определить, какими должны быть идентификаторы левого и правого контекста при создании пользовательского словаря MeCab 0.996 с помощью UniDic 2.3.0?

Я пытаюсь создать пользовательский словарь MeCab 0.996 с UniDic CWJ 2.3.0 в Ubuntu 20.10, используя следующую команду терминала:

$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/unidic/unidic-cwj-2.3.0 -u ~/foo/bar/foo.dic -f utf8 -t utf8 ~/foo/bar/foo.csv

где foo.csv:

ダイバーシティ,,,-200,名詞,普通名詞,一般,*,*,*,ダイバーシティ,ダイバーシティ-diversity,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,外,*,*,*,*,*,*,体,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,,,,,

Но я получаю такую ​​ошибку:

dictionary.cpp(355) [cid->left_size() == matrix.left_size() && cid->right_size() == matrix.right_size()] Context ID files(/usr/local/lib/unidic/unidic-cwj-2.3.0/left-id.def or /usr/local/lib/unidic/unidic-cwj-2.3.0/right-id.def may be broken

Это сообщение о нерешенной проблеме GitHub, похоже, связано, но выходит у меня из головы: https://github.com/taku910/mecab/issues/42

Я могу создать пользовательский словарь MeCab с помощью более старого unidic-mecab-2.1.2 :

$ /usr/local/libexec/mecab/mecab-dict-index -d ~/mecab/unidic-mecab-2.1.2_src/ -u ~/foo/bar/foo.dic -f utf8 -t utf8 ~/foo/bar/foo.csv
./pos-id.def is not found. minimum setting is used
emitting double-array: 100% |###########################################| 
done!

Я также могу создать пользовательский словарь, используя reiwa.33.csv из документация unidic-py:

/usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/unidic/unidic-cwj-2.3.0 -u ~/foo/bar/reiwa33.dic -f utf8 -t utf8 ~/foo/bar/reiwa.33.csv
/usr/local/lib/unidic/unidic-cwj-2.3.0/pos-id.def is not found. minimum setting is used
reading /home/foo/bar/reiwa.33.csv ... 3
emitting double-array: 100% |###########################################| 
done!

Reiwa.33.csv:

令和,4786,4786,8205,名詞,固有名詞,一般,*,*,*,レイワ,令和,令和,レーワ,令和,レーワ,固,*,*,*,*,*,*,*,レイワ,レイワ,レイワ,レイワ,"1,0",*,*,*,*
㋿,5969,5969,2588,補助記号,一般,*,*,*,*,,㋿,㋿,,㋿,,記号,*,*,*,*,*,*,*,,,,,*,*,*,*,999999
㋿,4786,4786,3992,名詞,固有名詞,一般,*,*,*,レイワ,令和,㋿,レーワ,㋿,レーワ,固,*,*,*,*,*,*,*,レイワ,レイワ,レイワ,レイワ,"1,0",*,*,*,*

Таким образом, разница между двумя CSV-файлами заключается в том, что идентификаторы левого и правого контекста указываются для каждой формы поверхности (а также aType и lemma_id для некоторых, но не для всех записей) в reiwa.33.csv, но не в foo. csv.

Согласно инструкциям для MeCab, mecab-dict-index автоматически назначит левую и правильные идентификаторы, и это похоже на unidic-mecab-2.1.2, но не на UniDic 2.3.0.

Итак, я думаю, возникает вопрос: как определить, какими должны быть идентификаторы левого и правого контекста? Есть где-нибудь объяснение?


person koyakun    schedule 21.02.2021    source источник


Ответы (1)


Мне удалось найти ответ в этом сообщении Qiita.

Чтобы определить идентификаторы левого и правого контекста:

  1. Просмотрите файлы left-id.def и right-id.def соответственно:
    $ gedit /usr/local/lib/unidic/unidic-cwj-2.3.0/left-id.def

    $ gedit /usr/local/lib/unidic/unidic-cwj-2.3.0/right-id.def
  1. Найдите строку, которая соответствует характеристикам слова.

    Для общих иностранных существительных заимствований (например, ダ イ バ ー シ テ ィ) без указанного типа ударения (aType) или типа изменения ударения (aConType) значения следующие:

    left-id: 15917 名詞,普通名詞,一般,*,*,*,*,*,外,*,*,*,*,*,*

    right-id: 17160 名詞,普通名詞,一般,*,*,*,*,*,外,*,*,*,*,*,*
  1. Таким образом, foo.csv должен быть:
    ダイバーシティ,15917,17160,-200,名詞,普通名詞,一般,*,*,*,ダイバーシティ,ダイバーシティ-diversity,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,外,*,*,*,*,*,*,体,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,*,*,*,*,*
  1. Компиляция словаря MeCab с UniDic CWJ 2.3.0 из foo.csv затем работает без левого или правого id.def может быть нарушена ошибка:
    $ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/unidic/unidic-cwj-2.3.0/ -u ~/foo/bar/foo.dic -f utf8 -t utf8 ~/foo/bar/foo.csv
    /usr/local/lib/unidic/unidic-cwj-2.3.0/pos-id.def is not found. minimum setting is used
    reading /home/foo/bar/foo.csv ... 1
    emitting double-array: 100% |###########################################| 
    done!

Примечание. Значения в reiwa.33.csv относятся к UniDic 2.1.2.

Подробное объяснение того, почему возникает ошибка left / right-id.def и как поменять местами все значения left и right в matrix.def, см. В это сообщение о переполнении стека на японском языке.

person koyakun    schedule 22.02.2021
comment
Здравствуйте, рад, что вы придумали кое-что, что заставляет его работать. Теоретически у вас должна быть возможность оставить идентификаторы контекста пустыми ... Их следует использовать только при обучении с HMM, если я правильно помню, что означает, что на практике они вообще никогда не используются. - person polm23; 22.02.2021
comment
Спасибо! Сначала я попытался оставить их пустыми, но, похоже, это не сработает с UniDic 2.3.0 - person koyakun; 23.02.2021
comment
@ polm23 Согласно объяснению на этой странице, идентификаторы левого и правого контекста используются при разборе текста. Автор неверен? - person koyakun; 23.02.2021
comment
Чтобы обновить то, что я сказал здесь: я был неправ, и используются идентификаторы контекста. Я неправильно запомнил заявление дизайнера MeCab о том, что они не нужны с точки зрения дизайна. - person polm23; 30.03.2021