Malt解析器引发类未找到异常[英] Malt Parser throwing class not found exception

问题描述

我正在尝试使用 NLTK 中的 Malt Parser 解析句子.当我执行 raw_parse(sent) 时,它给出了退出代码 1 的错误.我在终端上执行了 java 命令,它给出了类 Not Found 异常,我不明白现在出了什么问题?

<块引用>

java -Xmx1024m -jar/usr/local/bin/malt.jar -w/home/abc/maltparser-1.7.2 -c engmalt.linear-1.7 -i/home/abc/maltparser-1.7.2/malt_input.conllrPZgwc -o/home/abc/maltparser-1.7.2/malt_output.conllDMSKpg -m 解析线程"main"中的异常 java.lang.NoClassDefFoundError: org/apache/log4j/Layout

推荐答案

您的工作目录设置不正确.Log4j 是 Malt Parser 使用的一个包(参见:maltparser-1.7.2/lib/log4j.jar).用于逻辑记录.

为了在 NLTK 中运行 maltparser,应将工作目录设置为此文件夹(在您的情况下为:/home/abc/maltparser-1.7.2).

所以,第一步是从 git 获取最新的 NLTK:

<块引用>

git 克隆 https://github.com/nltk/nltk.git

安装 NLTK:

<块引用>

sudo python setup.py install

要使用 NLTK 运行 Malt Parser,请尝试以下代码示例:

import os
import nltk

os.environ['MALTPARSERHOME']="/home/abc/maltparser-1.7.2"
verbose = False
maltParser = nltk.parse.malt.MaltParser(working_dir="/home/abc/maltparser-1.7.2", 
    mco="engmalt.linear-1.7",
    additional_java_args=['-Xmx512m'])
print(maltParser.raw_parse('This is a test sentence', verbose=verbose).tree().pprint())

您可能会注意到,我使用的是预先学习的 mco 文件 (engmalt.linear-1.7),可以从这里下载:http://www.maltparser.org/mco/english_parser/engmalt.html

将此 mco 文件移动到:/home/abc/maltparser-1.7.2 目录.

最后只有 NLTK,除了 malt.jar.所以创建一个副本(或重命名):

<块引用>

cp maltparser-1.7.2.jar malt.jar

它仍然可以位于您的/home/abc/maltparser-1.7.2.jar 目录中.

希望你能让它运行起来!

本文地址:https://www.itbaoku.cn/post/978415.html