6

我正在尝试使用 Stanford CoreNLP 工具分析一些法语文本(这是我第一次尝试使用任何 StanfordNLP 软件)

为此,我下载了 v3.6.0 jar 和相应的法语模型

然后我运行服务器:

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer

如本答案中所述,我使用以下方法调用 API:

wget --post-data 'Bonjour le monde.' 'localhost:9000/?properties={"parse.model":"edu/stanford/nlp/models/parser/nndep/UD_French.gz", "annotators": "parse", "outputFormat": "json"}' -O -

但我收到以下日志+错误:

 [pool-1-thread-1] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP  
 Adding annotator tokenize
 [pool-1-thread-1] INFO edu.stanford.nlp.pipeline.TokenizerAnnotator - TokenizerAnnotator: No tokenizer type provided. Defaulting to PTBTokenizer.
 [pool-1-thread-1] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP -   Adding annotator ssplit
 [pool-1-thread-1] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator parse
 [pool-1-thread-1] INFO edu.stanford.nlp.parser.common.ParserGrammar - Loading parser from serialized file edu/stanford/nlp/models/parser/nndep/UD_French.gz ... 

 edu.stanford.nlp.io.RuntimeIOException: java.io.StreamCorruptedException: invalid stream header: 64696374
    at edu.stanford.nlp.parser.common.ParserGrammar.loadModel(ParserGrammar.java:188)
    at edu.stanford.nlp.pipeline.ParserAnnotator.loadModel(ParserAnnotator.java:212)
    at edu.stanford.nlp.pipeline.ParserAnnotator.<init>(ParserAnnotator.java:115)
    ...

此处提出的解决方案表明代码和模型版本不同,但我已从同一页面下载它们(并且它们的名称中都有相同的版本号)所以我很确定它们是相同的。

关于我做错了什么的任何其他提示?

(我还应该提到我不是Java专家,所以也许我忘记了一个愚蠢的步骤......)

4

2 回答 2

10

好的,经过大量阅读和不成功的尝试,我找到了一种让它工作的方法(对于v3.6.0)。以下是详细信息,如果他们可能对其他人感兴趣:

  1. http://stanfordnlp.github.io/CoreNLP/index.html#download下载代码和法语模型。解压代码.zip并将法语模型复制.jar到该目录(不要删除英语模型,它们有不同的名称)

  2. cd 到该目录,然后使用以下命令运行服务器:

    java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer
    

(很遗憾,-prop旗帜在这里没有帮助)

  1. 调用 API 重复列出的属性StanfordCoreNLP-french.properties

    wget --header="Content-Type: text/plain; charset=UTF-8"
         --post-data 'Bonjour le monde.' 
         'localhost:9000/?properties={
           "annotators": "tokenize,ssplit,pos,parse", 
           "parse.model":"edu/stanford/nlp/models/lexparser/frenchFactored.ser.gz", 
           "pos.model":"edu/stanford/nlp/models/pos-tagger/french/french.tagger", 
           "tokenize.language":"fr", 
           "outputFormat": "json"}' 
      -O -
    

    最终使用法国模型给出了 200 响应!

(注意:不知道如何使它与 UI 一起工作(同样适用于 utf-8 支持))

于 2016-06-16T10:14:27.840 回答
0

作为对某些人可能有用的补充,德语的完整属性文件如下所示:

# annotators
annotators = tokenize, ssplit, mwt, pos, ner, depparse

# tokenize
tokenize.language = de
tokenize.postProcessor = edu.stanford.nlp.international.german.process.GermanTokenizerPostProcessor

# mwt
mwt.mappingFile = edu/stanford/nlp/models/mwt/german/german-mwt.tsv

# pos
pos.model = edu/stanford/nlp/models/pos-tagger/german-ud.tagger

# ner
ner.model = edu/stanford/nlp/models/ner/german.distsim.crf.ser.gz
ner.applyNumericClassifiers = false
ner.applyFineGrained = false
ner.useSUTime = false

# parse
parse.model = edu/stanford/nlp/models/srparser/germanSR.beam.ser.gz

# depparse
depparse.model = edu/stanford/nlp/models/parser/nndep/UD_German.gz

阿拉伯语中文法语德语西班牙语的完整属性文件都可以在CoreNLP github 存储库中找到。

于 2020-05-05T18:44:22.133 回答