我試圖使用斯坦福POS惡搞(http://nlp.stanford.edu/downloads/tagger.shtml#Download),而是試圖通過斯坦福POS標註器的OutOfMemoryError閱讀惡搞
MaxentTagger tagger = new MaxentTagger("english-left3words-distsim.tagger");
初始化惡搞我總是得到這個錯誤時:
Reading POS tagger model from stanford-postagger-2013-11-12/models/english-left3words-distsim.tagger ... Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.io.ObjectInputStream$HandleTable.grow(ObjectInputStream.java:3443)
at java.io.ObjectInputStream$HandleTable.assign(ObjectInputStream.java:3250)
at java.io.ObjectInputStream.readString(ObjectInputStream.java:1628)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1320)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
at java.util.HashMap.readObject(HashMap.java:1029)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:979)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1873)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1895)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1685)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1895)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.readExtractors(MaxentTagger.java:582)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:808)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:755)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:289)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:253)
我在Eclipse中運行此操作,並根據http://nlp.stanford.edu/downloads/pos-tagger-faq.shtml#oom的鏈接指令(使用-vmargs -Xms4096M -Xmx4096M -mx4096m
)爲jvm分配4gb堆空間。
我在搜索中發現了這個bug:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6525563這似乎是相關的,但我認爲斯坦福標記器是如此廣泛的使用,我懷疑如果它是由於那個錯誤,我會成爲第一個發現這個OutOfMemoryError的...
更新:似乎Eclipse實際上並沒有獲得我想分配的內存。 Runtime.getRuntime()。maxMemory()報告它只有123Mb可用,而同一工作空間中的其他項目有1個可用的演出。