Проблема с компиляцией актуальных словарей из XML в DAWG
Как откомпилировать актуальные версии словарей?
Делаю так:
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 общая?).
Может кто-то сказать в чем дело?
через его pip3 ставлю pymorhy2
pip3 install pymorphy2 или pip3 install git+https://github.com/kmike/pymorphy2? Первая команда ставит старую версию 0.8.
я первый вариант делал попробую второй
попробовал второй вариант, но там, как я понял, из кода убрана возможность компиляции словаря через 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
Ошибка сегментирования (стек памяти сброшен на диск)
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
Да, спасибо, все заработало, откомпилированные словари понимает и pymorphy2 и jmorphy. Единственное, если я верно понял, pymorphy2-dicts в виде пакета не компилирует и его надо брать только из исходников да?
@V-ctor Не знаю.
/cc @kmike
На Travis CI тоже что-то сегфолтится на тесте, который связан со словарями. Детально не смотрел.