Stanford Parser内存不足

时间:2015-03-30 17:09:36

标签: java python ubuntu jvm stanford-nlp

我正在尝试使用python代码在Ubuntu中运行Stanford解析器。我的文本文件是500 Mb,我试图解析。我有一个32GB的RAM。我正在增加JVM大小,但我不知道它是否实际增加或不是因为我每次都收到此错误。请帮帮我

WARNING!! OUT OF MEMORY! THERE WAS NOT ENOUGH  ***
***  MEMORY TO RUN ALL PARSERS.  EITHER GIVE THE    ***
***  JVM MORE MEMORY, SET THE MAXIMUM SENTENCE      ***
***  LENGTH WITH -maxLength, OR PERHAPS YOU ARE     ***
***  HAPPY TO HAVE THE PARSER FALL BACK TO USING    ***
***  A SIMPLER PARSER FOR VERY LONG SENTENCES.      ***
Sentence has no parse using PCFG grammar (or no PCFG fallback).  Skipping...
Exception in thread "main" edu.stanford.nlp.parser.common.NoSuchParseException
    at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.getBestParse(LexicalizedParserQuery.java:398)
    at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.getBestParse(LexicalizedParserQuery.java:370)
    at edu.stanford.nlp.parser.lexparser.ParseFiles.processResults(ParseFiles.java:271)
    at edu.stanford.nlp.parser.lexparser.ParseFiles.parseFiles(ParseFiles.java:215)
    at edu.stanford.nlp.parser.lexparser.ParseFiles.parseFiles(ParseFiles.java:74)
    at edu.stanford.nlp.parser.lexparser.LexicalizedParser.main(LexicalizedParser.java:1513)

1 个答案:

答案 0 :(得分:7)

您应该将文本文件分成小块,并一次一个地分配给解析器。由于解析器为整个"文档创建了一个内存中表示"它是在一个时间给出的(比磁盘上的文件大几个数量级),尝试在一个gulp中给它一个500 MB的文件是一个非常糟糕的主意。

你还应该避免使用超长的句子,如果随意或网页文字缺少句子分隔符,或者你正在为它们提供大桌子或乱码,这很容易发生。避免此问题的最安全方法是设置限制最大句子长度的参数,例如-maxLength 100

您可能想要尝试神经网络依赖解析器,它可以更好地扩展到大型任务:http://nlp.stanford.edu/software/nndep.shtml