pymorphy2 icon indicating copy to clipboard operation
pymorphy2 copied to clipboard

Проблема с компиляцией актуальных словарей из XML в DAWG

Open V-ctor opened this issue 8 years ago • 7 comments

Как откомпилировать актуальные версии словарей? Делаю так: 1 компилирую питон 3.5.1 (требование совместимости) в домашний каталог 2 через его pip3 ставлю pymorhy2 3 Скачиваю исходный словарь в виде xml 4 Компилирую командой pymorphy dict compile 5 получаю словари в каталоге dict 6 подсовываю их в /site-packages//pymorphy2_dicts 7 ругается на meta.json 8 все ломается на этапе ввода >>> morph = pymorphy2.MorphAnalyzer(path="/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2_dicts/data.compiled") с выводом Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2/analyzer.py", line 174, in __init__ self.dictionary = opencorpora_dict.Dictionary(path) File "/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2/opencorpora_dict/wrapper.py", line 18, in __init__ self._data = load_dict(path) File "/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2/opencorpora_dict/storage.py", line 45, in load_dict meta = _load_meta(_f('meta.json')) File "/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2/opencorpora_dict/storage.py", line 148, in _load_meta meta = json_read(filename, parse_float=str) File "/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2/utils.py", line 96, in json_read with codecs.open(filename, 'r', 'utf8') as f: File "/home/victor/DevelopTools/python-3.5.1/lib/python3.5/codecs.py", line 895, in open file = builtins.open(filename, mode, buffering) FileNotFoundError: [Errno 2] No such file or directory: '/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2_dicts/data.compiled/meta.json' 9 Понятно что проблема с meta.json сравнивая его с тем что скачан по зависимостям , я вношу в него нужные коррективы и на него ругани больше нет, но оно все равно все падает с таким выводом. Тут, я так понял, что-то не пошло с двоичными словарями. Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2/analyzer.py", line 177, in __init__ self.prob_estimator = probability_estimator_cls(path) File "/home/victor/DevelopTools/python-3.5.1/lib/python3.5/site-packages/pymorphy2/analyzer.py", line 65, in __init__ self.p_t_given_w = ConditionalProbDistDAWG().load(cpd_path) File "dawg.pyx", line 394, in dawg.CompletionDAWG.load (src/dawg.cpp:8095) OSError: It's not possible to read file stream

При работе со словарем скаченным по зависимостям все хорошо. Запускаю в jmorphy - та же история (библиотека dawg общая?).

Может кто-то сказать в чем дело?

V-ctor avatar Mar 28 '18 16:03 V-ctor

через его pip3 ставлю pymorhy2

pip3 install pymorphy2 или pip3 install git+https://github.com/kmike/pymorphy2? Первая команда ставит старую версию 0.8.

ghost avatar Mar 28 '18 16:03 ghost

я первый вариант делал попробую второй

V-ctor avatar Mar 28 '18 17:03 V-ctor

попробовал второй вариант, но там, как я понял, из кода убрана возможность компиляции словаря через cli, для этого отдельный скрипт https://github.com/kmike/pymorphy2-dicts . Но с их помощью так же не удается откомпилировать:

PC:~/Developing/pymorphy2-dicts$ python3 build-dict.py dict.opcorpora.xml data
DEBUG  2018-03-29 01:11:42  Creating output folder data
INFO   2018-03-29 01:11:42  dictionary v0.92, rev405410
INFO   2018-03-29 01:11:42  parsing XML dictionary
Ошибка сегментирования (стек памяти сброшен на диск)

V-ctor avatar Mar 28 '18 20:03 V-ctor

That's Python for you. Похоже на баг в lxml 4.2.x:

Thread 1 "python3.5" received signal SIGSEGV, Segmentation fault.
0x00007ffff2d29f14 in __pyx_tp_dealloc_4lxml_5etree__ParserContext ()
   from /home/opennota/.local/lib64/python3.5/site-packages/lxml/etree.cpython-35m-x86_64-linux-gnu.so

С lxml 4.1.1 вроде работает:

pip3.5 install --user 'lxml<4.2.0'
python3.5 build-dict.py ~/dict.opcorpora.xml compiled-dicts --lang ru --corpus ~/annot.corpus.xml --clear

ghost avatar Mar 28 '18 23:03 ghost

Да, спасибо, все заработало, откомпилированные словари понимает и pymorphy2 и jmorphy. Единственное, если я верно понял, pymorphy2-dicts в виде пакета не компилирует и его надо брать только из исходников да?

V-ctor avatar Mar 29 '18 08:03 V-ctor

@V-ctor Не знаю.

/cc @kmike

ghost avatar Mar 29 '18 09:03 ghost

На Travis CI тоже что-то сегфолтится на тесте, который связан со словарями. Детально не смотрел.

kmike avatar Mar 29 '18 14:03 kmike