Java 错误:尝试使用python和Stanford CoreNLP解析xml

Java 错误:尝试使用python和Stanford CoreNLP解析xml,java,python,xml-parsing,nlp,stanford-nlp,Java,Python,Xml Parsing,Nlp,Stanford Nlp,我很难用python和StanfordCorenlp解析xml文件。我想做的是用Stanford Core nlp分析nlp.txt并将其输出到xml文件。我的代码在这里: import os import subprocess import xml.etree.ElementTree as ET fname = 'nlp.txt' fname_parsed = 'nlp.txt.xml' def parse_nlp(): '''Analyze nlp.txt with Sta

我很难用python和StanfordCorenlp解析xml文件。我想做的是用Stanford Core nlp分析nlp.txt并将其输出到xml文件。我的代码在这里:

import os
import subprocess
import xml.etree.ElementTree as ET

fname = 'nlp.txt'
fname_parsed = 'nlp.txt.xml'


def parse_nlp():


    '''Analyze nlp.txt with Stanford Core NLP and output it to xml file.
     Do not execute if result file already exists.
    '''
    if not os.path.exists(fname_parsed):

        # Execute StanfordCoreNLP, output standard error to parse.out
        subprocess.run(
            'java -cp "/usr/local/lib/stanford-corenlp-full-2017-06-09/*"'
            ' -Xmx2g'
            ' edu.stanford.nlp.pipeline.StanfordCoreNLP'
            ' -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref'
            ' -file ' + fname + ' 2>parse.out',
            shell=True,     # execute with shell
            check=True      # error check
        )


# analyze nlp.txt
parse_nlp()

# parse xml of result
root = ET.parse(fname_parsed)

# take only word
for word in root.iter('word'):
    print(word.text)
然后,我得到了标准误差,如:

    Traceback (most recent call last):
  File "stanford.py", line 30, in <module>
    parse_nlp()
  File "stanford.py", line 25, in parse_nlp
    check=True      # error check
  File "/anaconda/lib/python3.6/subprocess.py", line 418, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command 'java -cp "/usr/local/lib/stanford-corenlp-full-2017-06-09/*" -Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref -file nlp.txt 2>parse.out' returned non-zero exit status 1.
回溯(最近一次呼叫最后一次):
文件“stanford.py”,第30行,在
parse_nlp()
parse_nlp中的文件“stanford.py”,第25行
检查=正确#错误检查
文件“/anaconda/lib/python3.6/subprocess.py”,第418行,运行中
输出=标准输出,标准输出=标准输出)
subprocess.CalledProcessError:Command'java-cp”/usr/local/lib/stanford-corenlp-full-2017-06-09/*“-Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP-注释器令牌化、ssplit、pos、引理、ner、parse、dcoref-文件nlp.txt 2>parse.out”返回非零退出状态1。
虽然我认为我一直在解析文件,但我无法理解发生了什么以及如何解决这个问题。 我是一个比较初级的程序员,刚刚进入NLP分析。
如果对此进行详细解释,我们将不胜感激。

您的java命令没有正确地输入到
subprocess.run()
。如果创建一个字符串作为完整的java命令,并将其用作
subprocess.run()
的第一个参数,那么它应该可以工作

命令行文档:


您的java命令未正确输入到
子流程中。run()
。如果创建一个字符串作为完整的java命令,并将其用作
subprocess.run()
的第一个参数,那么它应该可以工作

命令行文档:


希望还不算太晚:p

我写的代码和你的几乎一样,遇到了同样的问题

翻了一页,, 我发现
-Xmx2g
用于为java子进程指定2GB内存。
虽然我的MBP只有8G内存,但我将
-Xmx2g
更改为
-Xmx3g
。成功了

希望不会太晚:p

我写的代码和你的几乎一样,遇到了同样的问题

翻了一页,, 我发现
-Xmx2g
用于为java子进程指定2GB内存。
虽然我的MBP只有8G内存,但我将
-Xmx2g
更改为
-Xmx3g
。成功了

如果仍然出现错误,则应验证该命令是否在命令行上工作。请原谅我的无知,换句话说,您的意思是使用python读取xml文件吗?通过使用subprocess调用该命令,您是否能够使该命令在命令行和python脚本中工作?命令:“java-cp”/usr/local/lib/stanford-corenlp-full-2017-06-09/*”-Xmx2g-edu.stanford.nlp.pipeline.StanfordCoreNLP-annotators-tokenize、ssplit、pos、引理、ner、parse、dcoref-file-nlp.txt 2>parse.out“那么你还没能在Python脚本中运行吗?如果是这样,我建议只制作一个字符串作为完整的命令,然后执行子进程(cmd_string,shell=True),看看是否有效如果仍然出现错误,您应该验证命令在命令行上是否有效。请原谅我的无知,换句话说,您的意思是使用python读取xml文件吗?您是否能够通过使用subprocess调用此命令,使其在命令行和python脚本中工作?命令:“java-cp”/usr/local/lib/stanford-corenlp-full-2017-06-09/*”-Xmx2g-edu.stanford.nlp.pipeline.StanfordCoreNLP-annotators-tokenize、ssplit、pos、引理、ner、parse、dcoref-file-nlp.txt 2>parse.out“那么你还没能在Python脚本中运行吗?如果是这样,我建议只制作一个字符串作为完整的命令,然后执行子流程(cmd_string,shell=True),看看这是否可行!感谢您分享您的解决方案。我以后也会试试。好的!感谢您分享您的解决方案。我以后也会试试。