Java 内存不足

Java 内存不足,java,python,ubuntu,jvm,stanford-nlp,Java,Python,Ubuntu,Jvm,Stanford Nlp,我正在尝试使用python代码在Ubuntu中运行斯坦福解析器。我的文本文件是500MB,我正试图解析它。我有32GB的RAM。我正在增加JVM的大小,但我不知道它是否真的在增加,因为每次我都会遇到这个错误。请帮帮我 WARNING!! OUT OF MEMORY! THERE WAS NOT ENOUGH *** *** MEMORY TO RUN ALL PARSERS. EITHER GIVE THE *** *** JVM MORE MEMORY, SET THE MAXI

我正在尝试使用python代码在Ubuntu中运行斯坦福解析器。我的文本文件是500MB,我正试图解析它。我有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)

您应该将文本文件分成小块,然后一次一小块地交给解析器。由于解析器为一次给定的整个“文档”创建一个内存中的表示(比磁盘上的文档大几个数量级),因此尝试一口吞下一个500 MB文档是一个非常糟糕的主意

您还应该避免使用超长的“句子”,如果随意或网络浏览的文本缺少句子分隔符,或者您正在给它输入大表格或胡言乱语,那么很容易出现超长的“句子”。避免此问题的最安全方法是设置限制最大句子长度的参数,例如
-maxLength 100


您可能想试用神经网络依赖关系解析器,它可以更好地扩展到大型任务:。

您如何将文件提供给解析器?作为一个文件或一个包含内容的巨大字符串?巨大字符串@TritonManRight,您需要传入一个文件名或流或其他内容。如果将整个文件加载到一个500 MB的字符串中,将占用太多的RAM。32位JVM在启动时只能处理大约1.5 GB或RAM,您需要64位JVM或其他解决方案。在命令行上传递它,例如:java-Xmx1024mIf如果使用64位JVM,可以将堆大小设置为
-Xmx30G
,并使用机器的所有内存。32位JVM无法处理您拥有的所有内存。在准备数据集时,我无法避免使用长句。内存不是问题,因为我有32GB的内存。只是我不能利用它。你能告诉我如何增加JVM的大小吗?使用64位JVM。然后
java-Xmx12g…
@ChristopherManning,我正在使用CoreNLP,如何在java代码中指定
-maxLength
?使用类似
-parse.maxlen 100的属性a;请参阅。@ChristopherManning,我将句子长度限制为200个字符,并将Java堆大小增加到40GB(通过
-Xmx40g
),但有时仍会
解析句子,因为内存不足(长度=82)
。我怎样才能纠正这样的错误?我使用的注释器:
标记化、ssplit、解析、情绪化