斯坦福解析器处理时间和内存消耗

时间:2013-06-12 15:04:31

标签: nlp stanford-nlp

我在命令行中使用Stanford解析器:

java -mx1500m -cp stanford-parser.jar;stanford-parser-models.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat "penn"  edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz {file}

当我在27个单词的单个句子上运行命令时,Java进程占用100MB内存,解析需要1.5秒。 当我在148个单词的单个句子上运行命令时,Java进程占用1.5GB的内存,解析需要1.5分钟。

我正在使用的机器是带有intel i5 2.53GH的Windows 7。

这些处理时间是否合理? 是否有解析器的官方性能基准?

1 个答案:

答案 0 :(得分:2)

如评论所述,您的问题在于句子分段,因为您的数据允许任何输入(有/没有正确的标点符号)。但不知何故,你有资本化是很好的。因此,您可以尝试下面的方法来按大小写分割句子。

免责声明:如果您的句子以I开头,则下面的食谱不会有多大帮助=)

  

“有些东西需要改变它必须重新安排我很抱歉,我没有   意味着要伤害我的小女孩这超出了我的能力   沉重的世界那么晚安,晚安,晚安,晚安   晚安,晚安,晚安,晚安,晚安,希望如此   事情很好,很多爱,很多东西要学习但是我   不会在那里教你哦,我知道我可以接近但我试试我的   最好的到达你我很抱歉我并不是故意伤害我的小事   女孩它超越了我,我无法承受沉重世界的重量   晚安,晚安,晚安,晚安,晚安,晚安,   晚安,晚安,晚安,晚安,晚安,晚安,   晚安,希望事情能够正常运作,是的,谢谢。“

在Python中,您可以尝试将其分段:

sentence = "Something gotta change It must be rearranged I'm sorry, I did not mean to hurt my little girl It's beyond me I cannot carry the weight of the heavy world So good night, good night, good night, good night Good night, good night, good night, good night, good night Hope that things work out all right So much to love, so much to learn But I won't be there to teach you Oh, I know I can be close But I try my best to reach you I'm so sorry I didn't not mean to hurt my little girl It's beyond me I cannot carry the weight of the heavy world So good night, good night, good night, good night Good night, good night, good night, good night Good night, good night, good night good night, good night Hope that things work out all right, yeah Thank you."

temp = []; sentences = []
for i in sentence.split():
  if i[0].isupper() and i != "I":
      sentences.append(" ".join(temp))
      temp = [i]
  else:
    temp.append(i)
sentences.append(" ".join(temp))
sentences.pop(0)
print sentences

然后,请按照此Stanford Parser and NLTK来解析句子。