我正在使用stanford posttager工具包来标记学术论文中的单词列表。这是我的这部分代码:
st = StanfordPOSTagger(stanford_tagger_path, stanford_jar_path, encoding = 'utf8', java_options = '-mx2048m')
word_tuples = st.tag(document)
文件是从nltk.word_tokenize派生的单词列表,它们来自正常的学术论文,所以通常有几千个单词(大多数是3000 - 4000)。我需要处理超过10000个文件,所以我一直在调用这些函数。我的程序在一个包含270个文件的小测试集上很好,但是当文件数量变大时,程序会发出这个错误(Java堆空间2G):
raise OSError('Java command failed : ' + str(cmd))
OSError: Java command failed
请注意,执行后不会立即发生此错误,它会在运行一段时间后发生。我真的不知道原因。这是因为我的3000 - 4000字太多了吗?非常感谢您的帮助!(对不好的版本,错误信息太长了)
答案 0 :(得分:0)
我假设您已尝试通过Tagger设置增加Java堆栈,如此
stanford.POSTagger([...], java_options="-mxSIZEm")
如果docs,默认值为1000:
def __init__(self, [...], java_options='-mx1000m')
为了测试数据集的大小是否有问题,您可以将文本标记为句子,例如:使用Punkt Tokenizer并在标记后立即输出。
答案 1 :(得分:0)
在我遇到错误之后,这是我对代码的解决方案。基本上增加JAVA heapsize解决了它。
import os
java_path = "C:\\Program Files\\Java\\jdk1.8.0_102\\bin\\java.exe"
os.environ['JAVAHOME'] = java_path
from nltk.tag.stanford import StanfordPOSTagger
path_to_model = "stanford-postagger-2015-12-09/models/english-bidirectional-distsim.tagger"
path_to_jar = "stanford-postagger-2015-12-09/stanford-postagger.jar"
tagger=StanfordPOSTagger(path_to_model, path_to_jar)
tagger.java_options='-mx4096m' ### Setting higher memory limit for long sentences
sentence = 'This is testing'
print tagger.tag(sentence.split())