Синтаксический анализатор солода выдает ошибку утверждения при использовании его с nltk
Я использую солодовый парсер с python nltk. Я успешно загрузил данные тренировок и обновил последнюю версию nltk. Когда я вызываю синтаксический анализатор, он выдает ошибку подтверждения. Ниже приведен код из Python, который также включает в себя трассировку.
mp = MaltParser("C:/Users/mustufain/Desktop/Python Files/maltparser-1.8.1","C:/Users/mustufain/Desktop/Python Files/maltparser-1.7.2",additional_java_args=['-Xmx512m'])
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
mp = MaltParser("C:/Users/mustufain/Desktop/Python Files/maltparser-1.8.1","C:/Users/mustufain/Desktop/Python Files/maltparser-1.7.2",additional_java_args=['-Xmx512m'])
File "C:\Python34\lib\site-packages\nltk\parse\malt.py", line 131, in __init__
self.malt_jars = find_maltparser(parser_dirname)
File "C:\Python34\lib\site-packages\nltk\parse\malt.py", line 72, in find_maltparser
assert malt_dependencies.issubset(_jars)
AssertionError
>>>
2 ответа
TL;DR
(In PYTHON3!!):
import urllib.request
urllib.request.urlretrieve('http://www.maltparser.org/mco/english_parser/engmalt.poly-1.7.mco', 'C:\\Users\\mustufain\\Desktop\\engmalt.poly-1.7.mco')
urllib.request.urlretrieve('http://maltparser.org/dist/maltparser-1.8.1.zip', 'C:\\Users\\mustufain\\Desktop\\maltparser-1.8.1.zip')
zfile = zipfile.ZipFile('C:\\Users\\mustufain\\Desktop\\maltparser-1.8.1.zip')
zfile.extractall('C:\\Users\\mustufain\\Desktop\\maltparser-1.8.1\\')
Затем:
from nltk.parse import malt
mp = malt.MaltParser('C:\\Users\\mustufain\\Desktop\\maltparser-1.8.1\\', "C:\\Users\\mustufain\\Desktop\\engmalt.poly-1.7.mco")
mp.parse_one('I shot an elephant in my pajamas .'.split()).tree()
Если все настройки загрузки и переменных среды выполнены правильно, наиболее вероятно, что путь к файлу / директории разделяется в nltk.parse.malt.py
по адресу https://github.com/nltk/nltk/blob/develop/nltk/parse/malt.py который разделяет каталог и имя файла специально для linux:
def find_maltparser(parser_dirname):
"""
A module to find MaltParser .jar file and its dependencies.
"""
if os.path.exists(parser_dirname): # If a full path is given.
_malt_dir = parser_dirname
else: # Try to find path to maltparser directory in environment variables.
_malt_dir = find_dir(parser_dirname, env_vars=('MALT_PARSER',))
# Checks that that the found directory contains all the necessary .jar
malt_dependencies = ['','','']
_malt_jars = set(find_jars_within_path(_malt_dir))
_jars = set(jar.rpartition('/')[2] for jar in _malt_jars)
malt_dependencies = set(['log4j.jar', 'libsvm.jar', 'liblinear-1.8.jar'])
assert malt_dependencies.issubset(_jars)
assert any(filter(lambda i: i.startswith('maltparser-') and i.endswith('.jar'), _jars))
return list(_malt_jars)
Ошибка была исправлена и в процессе слияния на https://github.com/nltk/nltk/pull/1292
Изменение этой строки:
_jars = set(jar.rpartition('/')[2] for jar in _malt_jars)
чтобы это решило вашу проблему =)
_jars = set(os.path.split(jar)[1] for jar in _malt_jars)
Ответ, не связанный с самим кодом, но с тем, как вы настроили переменные среды или скачали и сохранили каталоги или файлы синтаксического анализатора солода, см. По https://github.com/nltk/nltk/issues/1294