2016-05-17 83 views
0

我正在使用stanford posttager工具包来标记学术论文中的单词列表。这是我这部分的代码:python stanford posttager,运行一段时间后java命令失败

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

我假定你已经尝试通过标注器设置增加了Java堆栈像这样

stanford.POSTagger([...], java_options="-mxSIZEm") 

比照docs ,默认值是1000:

def __init__(self, [...], java_options='-mx1000m') 

为了测试它是否与数据集的大小有关,可以将文本标记为句子,例如使用Punkt Tokenizer并在标记后立即输出它们。

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()) 
相关问题