Parsing 在调用服务器时,有没有办法给Stanza(StanfordCorenlp客户端)一个输入文件,而不是一段文本?

Parsing 在调用服务器时,有没有办法给Stanza(StanfordCorenlp客户端)一个输入文件,而不是一段文本?,parsing,nlp,stanford-nlp,Parsing,Nlp,Stanford Nlp,我有一个由Imdb情绪分析数据集组成的.csv文件。每个实例都是一个段落。我使用节获取每个实例的解析树 text = "Chris Manning is a nice person. Chris wrote a simple sentence. He also gives oranges to people." with CoreNLPClient( annotators=['tokenize','ssplit','pos','lemma','ner', 'pars

我有一个由Imdb情绪分析数据集组成的.csv文件。每个实例都是一个段落。我使用节获取每个实例的解析树

text = "Chris Manning is a nice person. Chris wrote a simple sentence. He also gives oranges to people."

with CoreNLPClient(
    annotators=['tokenize','ssplit','pos','lemma','ner', 'parse', 'depparse','coref'],
    timeout=30000,
    memory='16G') as client:
ann = client.annotate(text)
现在,我必须为每个实例重新运行服务器,因为我有50k个实例,这需要花费很多时间

1
Starting server with command: java -Xmx16G -cp /home/wahab/treeattention/stanford-corenlp- 
4.0.0/* edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 1200000 -threads 
5 -maxCharLength 100000 -quiet True -serverProperties corenlp_server-a74576b3341f4cac.props 
-preload parse
2
Starting server with command: java -Xmx16G -cp /home/wahab/treeattention/stanford-corenlp- 
4.0.0/* edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 1200000 -threads 
5 -maxCharLength 100000 -quiet True -serverProperties corenlp_server-d09e0e04e2534ae6.props 
-preload parse

有没有办法传递文件或进行批处理?

您应该只启动服务器一次。用Python加载文件、提取每个段落并提交段落是最简单的。您应该将IMDB中的每个段落传递给
annotate()
方法。服务器将处理句子拆分。

一旦创建了客户端,就可以在不同的文本值上调用它,这样就不必为每个段落重新启动服务器。是的,这就是我现在正在做的。调用服务器一次,并在循环中逐个传递我的实例/段落。但这仍然需要很多时间。我能够在一个晚上注释大约8k个段落。有没有办法把一个完整的文件传递给段落,而不是一次只传递一个段落。我曾经尝试过这样的命令行java:“java-Xmx100G-cp”$CORENLP/*“edu.stanford.nlp.pipeline.StanfordCoreNLP-annotators parse-file untitled.txt”。但是我不知道第节给出的输出格式。我想要相同的输出格式。你问题中的输出建议多个服务器启动。您应该只在应用程序中看到一次“使用命令启动服务器”。但是,假设您没有为每个段落重复重新启动服务器,那么一次提交多个段落不会提高速度。大部分时间花在parse和coref上。您可以尝试使用englishSR解析器,这将提高吞吐量。将“parse.model”设置为“edu/stanford/nlp/models/srparser/englishSR.ser.gz”,这可以显著加快速度。