Python malt解析器在与nltk一起使用时出现断言错误

Python malt解析器在与nltk一起使用时出现断言错误,python,parsing,nlp,nltk,malt-parser,Python,Parsing,Nlp,Nltk,Malt Parser,我将malt解析器与python nltk结合使用。我已成功下载培训数据并更新了最新的nltk。当我调用malt解析器时,它会给我一个启动错误。下面是来自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

我将malt解析器与python nltk结合使用。我已成功下载培训数据并更新了最新的nltk。当我调用malt解析器时,它会给我一个启动错误。下面是来自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
>>> 
mp=MaltParser(“C:/Users/mustufain/Desktop/Python Files/MaltParser-1.8.1”,“C:/Users/mustufain/Desktop/Python Files/MaltParser-1.7.2”,附加参数=['-Xmx512m'])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
mp=MaltParser(“C:/Users/mustufain/Desktop/Python Files/MaltParser-1.8.1”,“C:/Users/mustufain/Desktop/Python Files/MaltParser-1.7.2”,附加参数=['-Xmx512m'])
文件“C:\Python34\lib\site packages\nltk\parse\malt.py”,第131行,在\uuu init中__
self.malt\u jars=find\u maltparser(parser\u dirname)
文件“C:\Python34\lib\site packages\nltk\parse\malt.py”,第72行,位于find\u maltparser中
assert malt_dependencies.issubset(_jars)
断言错误
>>> 

如果所有下载和环境变量设置都正确完成,很可能是文件/dir路径在
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)
该缺陷已修复,正在进行合并

更改此行:

_jars = set(jar.rpartition('/')[2] for jar in _malt_jars)
这样做应该可以解决您的问题=)



有关与代码本身无关,但与您如何设置环境变量或下载并保存malt解析器目录或文件无关的答案,请参见

TL;DR
(在PYTHON3中):

然后:


你设置好了吗:?你在
C:/Users/mustufain/Desktop/Python Files/maltparser-1.8.1
中有['log4j.jar'、'libsvm.jar'、'liblinear-1.8.jar']吗?命令提示符下的
dir C:/Users/mustufain/Desktop/Python Files/maltparser-1.8.1/
的输出是什么,第二个参数是经过训练的
.mco
文件,而不是另一个malt解析器,请看@alvas我现在没有遇到异常我发现了,因为我已将maltparser-1.8.1.jar的名称更改为malt.jar文件,但当我查看导致此断言错误的行代码时,我将其重命名为maltparser-1.8.1.jar,它运行正常。我已更改了malt.py中的行并重新启动它,当我加载malt解析器时,它仍然会给我一个断言erorr。在更改malt.py:assert any(filter(lambda i:i.startswith('maltparser-')和i.endswith('.jar'),_jars))断言错误中的行后,RIT会给我这个新的断言错误。它在这一行引发异常:malt_dependencidentials=set(['log4j.jar','libsvm.jar','liblinear-1.8.jar'])谢谢@L3viathan的编辑!关于:也有一个广泛的答案。也许你也应该在你的答案中链接。跟我问候Saarbrücken!@L3viathan没问题;P
_jars = set(os.path.split(jar)[1] for jar in _malt_jars)
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()