2010-08-10 93 views
1

我一直在使用斯坦福解析器“AWT-EventQueue的-1” java.lang.OutOfMemoryError:Java堆空间

每个句子我加载EnglishPCFGrammer文件,找到使用斯坦福解析器标签来标记句子,它的工作原理适合单一句话,但是当我给多个句子,我得到这个例外..有人帮


Loading parser from serialized file englishPCFG.ser.gz ... done [7.7 sec]. 
Exception in thread "AWT-EventQueue-1" java.lang.OutOfMemoryError: Java heap space 
     at edu.stanford.nlp.parser.lexparser.ExhaustivePCFGParser.createArrays(ExhaustivePCFGParser.java:2056) 
     at edu.stanford.nlp.parser.lexparser.ExhaustivePCFGParser.considerCreatingArrays(ExhaustivePCFGParser.java:2027) 
     at edu.stanford.nlp.parser.lexparser.ExhaustivePCFGParser.parse(ExhaustivePCFGParser.java:315) 
     at edu.stanford.nlp.parser.lexparser.LexicalizedParser.parse(LexicalizedParser.java:375) 
     at edu.stanford.nlp.parser.lexparser.LexicalizedParser.apply(LexicalizedParser.java:279) 
     at finalproj.logic.SentenceTagger.tagSentence(SentenceTagger.java:25) 
     at finalproj.logic.SentenceToXMLWriter.addSentence(SentenceToXMLWriter.java:62) 
     at finalproj.logic.SentenceSplitter.splitFile(SentenceSplitter.java:24) 
     at finalproj.ui.LoadReqFile.jBtnSentenceSplitActionPerformed(LoadReqFile.java:126) 
     at finalproj.ui.LoadReqFile.access$200(LoadReqFile.java:21) 
     at finalproj.ui.LoadReqFile$3.actionPerformed(LoadReqFile.java:70) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
     at java.awt.Component.processMouseEvent(Component.java:6038) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) 
     at java.awt.Component.processEvent(Component.java:5803) 
     at java.awt.Container.processEvent(Container.java:2058) 
     at java.awt.Component.dispatchEventImpl(Component.java:4410) 
     at java.awt.Container.dispatchEventImpl(Container.java:2116) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) 
     at java.awt.Container.dispatchEventImpl(Container.java:2102) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) 
+0

为什么你需要一次解析多个句子的语法?他们当然是离散单位? – Catchwa 2010-08-10 06:49:04

回答

0

您需要启动额外的参数Java来增加堆空间。初始空间是64MB,这显然是不够的:

java -Xms128m -Xmx256m 

将开始与128兆字节(初始堆尺寸),并允许256Myte的最大堆。您可能需要一些实验。


注意 - 在'about'页面斯坦福解析器包含一个简短的Java命令行示例(最后一行),他们使用200MByte的堆大小。我认为这是解析器本身需要更多64MByte内存的暗示。 (附加说明:这个命令行示例有一个语法错误,我上面的示例是正确的)。

1

for each sentence i load the EnglishPCFGrammer file

您绝对不想为每个句子加载文件。您只需要加载一次 - 在解析过程的开始阶段,只需为每个句子引用它即可。
听起来像为每个句子加载File肯定会导致OutOfMemoryError

相关问题