斯坦福解析器内存不足
Stanford Parser out of memory
我正在尝试使用 python 代码在 Ubuntu 中 运行 Stanford 解析器。我的文本文件是 500 Mb,我试图 parse.I 有一个 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)
您应该将文本文件分成小块,一次一个地交给解析器。由于解析器为整个 "document" 创建一个内存中表示,它是一次给出的(比磁盘上的文档大几个数量级),尝试给它一个 500 是一个非常糟糕的主意MB 文档合一 gulp.
您还应避免超长 "sentences",如果随意或网络抓取的文本缺少句子分隔符,或者您正在为其提供大表格或乱码,则很容易发生这种情况。避免此问题的最安全方法是设置一个限制最大句子长度的参数,例如 -maxLength 100
.
您可能想试用神经网络依赖解析器,它可以更好地扩展到大型任务:http://nlp.stanford.edu/software/nndep.shtml。
我正在尝试使用 python 代码在 Ubuntu 中 运行 Stanford 解析器。我的文本文件是 500 Mb,我试图 parse.I 有一个 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)
您应该将文本文件分成小块,一次一个地交给解析器。由于解析器为整个 "document" 创建一个内存中表示,它是一次给出的(比磁盘上的文档大几个数量级),尝试给它一个 500 是一个非常糟糕的主意MB 文档合一 gulp.
您还应避免超长 "sentences",如果随意或网络抓取的文本缺少句子分隔符,或者您正在为其提供大表格或乱码,则很容易发生这种情况。避免此问题的最安全方法是设置一个限制最大句子长度的参数,例如 -maxLength 100
.
您可能想试用神经网络依赖解析器,它可以更好地扩展到大型任务:http://nlp.stanford.edu/software/nndep.shtml。