java - 斯坦福解析器内存不足

标签 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)

最佳答案

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

您还应该避免超长的“句子”,如果随意或网络抓取的文本缺少句子分隔符,或者您正在为其提供大表格或乱码,则很容易发生这种情况。避免此问题的最安全方法是设置一个限制最大句子长度的参数,例如 -maxLength 100

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

关于java - 斯坦福解析器内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352149/

相关文章:

java - 如何向按钮添加操作?

java - 如何将 YYYY-MM-DDTHH :mm:ss. SSSZ 格式的时间转换为默认时区?

python - 用 ggplot 绘制 2 geom_line()

python - 尝试从 pygame hello world 创建 Mac OS X 应用程序

ubuntu - .bashrc 文件未反射(reflect)更改

python - 终端集中程序的输出到字符串?

java - 错误: cannot find symbol

java - 将非常小的 double 转换为 String

python - 你如何将 csrf 验证添加到 Pyramid ?

Ubuntu 18.04 登录后卡住