有没有更快的方法来实现 CoreNLPParser
,或者我应该通过另一个库与API进行交互?还是我应该重新看一下Java书?
我有一个包含6500个句子的语料库,我正在使用nltk.parse.corenlp
中的CoreNLPParser
方法运行它。为了测试我之前编写的tree_height
函数,我已经将与主项目有关的所有其他内容隔离开来。然而,速度仍然很慢——事实上,这个过程需要超过15分钟才能完成。
这是我的tree_height
函数:
from nltk.parse.corenlp import CoreNLPParser
Parser = CoreNLPParser(url='http://localhost:9000')
def tree_height(tokenized_sent):
ddep = Parser.raw_parse(tokenized_sent)
for i in ddep:
sent_height = i.height()
return sent_height
我正在解析西班牙语句子,并使用以下命令启动了CoreNLP服务器:
java -mx10g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -serverProperties StanfordCoreNLP-spanish.properties -port 9000 -timeout 15000
我也试过将mx3g
部分改为mx5g
,但似乎没有太大的区别。
我看到了GitHub上的这个讨论,并且正在运行最新版本的StanfordCoreNLP。
--- 更新 ---
我担心我的脚本执行缓慢是因为效率低下或代码编写不好,所以我尝试找出代码中的低效之处:
- 在不调用任何NLP函数的情况下,遍历所有数据(从pandas dataframe中)需要大约20秒。
- 遍历所有数据并仅对句子进行分词需要约30秒。
- 在我的最新尝试中,我将所有分词后的句子添加到一个变量中,并逐个调用
tree_height
函数,发现速度没有差别(与我开始隔离代码之前一样长)。