python stanford posttager,java命令运行一段时间后失败

时间:2016-05-17 01:42:53

标签: java python nltk

我正在使用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字太多了吗?非常感谢您的帮助!(对不好的版本,错误信息太长了)

2 个答案:

答案 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())