2014-11-25 37 views
1

我请求您的善意帮助和帮助,以解决“Java命令失败”的错误,当我尝试标记大小为2 MB的阿拉伯语语料库时,该错误会持续发生。我已经搜索了网站和stanford POS tagger邮件列表。但是,我没有找到解决方案。我阅读了一些关于类似问题的帖子,并建议使用内存。我不确定这一点。我仍然拥有19GB的可用内存。我尝试了所有可能的解决方案,但同样的错误不断显示。Java命令在NLTK Stanford POS Tagger中失败

我有Python的平均命令和Linux上的良好命令。我为阿拉伯语使用LinuxMint17 KDE 64位,Python3.4,NLTK alpha和Stanford POS tagger模型。这是我的代码:

import nltk 
from nltk.tag.stanford import POSTagger 
arabic_postagger = POSTagger("/home/mohammed/postagger/models/arabic.tagger", "/home/mohammed/postagger/stanford-postagger.jar", encoding='utf-8') 

print("Executing tag_corpus.py...\n") 


# Import corpus file 
print("Importing data...\n") 

file = open("test.txt", 'r', encoding='utf-8').read() 
text = file.strip() 

print("Tagging the corpus. Please wait...\n") 

tagged_corpus = arabic_postagger.tag(nltk.word_tokenize(text)) 

如果语句大小小于1MB(= 100,000个单词),则不会有错误。但是当我尝试要标记2MB语料库,那么下面的错误信息显示:

Traceback (most recent call last): 
File "/home/mohammed/experiments/current/tag_corpus2.py", line 17, in <module> 
tagged_lst = arabic_postagger.tag(nltk.word_tokenize(text)) 
File "/usr/local/lib/python3.4/dist-packages/nltk-3.0a3-py3.4.egg/nltk/tag/stanford.py", line 59, in tag 
return self.batch_tag([tokens])[0] 
File "/usr/local/lib/python3.4/dist-packages/nltk-3.0a3-py3.4.egg/nltk/tag/stanford.py", line 81, in batch_tag 
stdout=PIPE, stderr=PIPE) 
File "/usr/local/lib/python3.4/dist-packages/nltk-3.0a3-py3.4.egg/nltk/internals.py", line 171, in java 
raise OSError('Java command failed!') 
OSError: Java command failed! 

我打算标签300万个字我的博士使用研究项目。如果我一次标记10万字,我将不得不重复3000次。它会杀了我!

我真的很感谢你的帮助。

+0

顺便说一句,你过于贪婪地为300多万句子做标记和POS标记。我会分批完成它。尝试每次通话100万次,然后只运行300次。 – alvas 2014-11-25 01:09:01

+0

@alvas感谢您的评论。事实上,我会做你的建议。但是我忘了在问题中清楚地说明。 – Mohammed 2014-11-25 01:17:04

回答

4

您导入行后添加此行:

nltk.internals.config_java(options='-xmx2G') 

这将增加最大内存大小Java允许斯坦福POS标注器使用。 '-xmx2G'将最大容许RAM更改为2GB,而不是默认的512MB。

了解更多信息


如果你有兴趣在如何调试你的代码,阅读见What are the Xms and Xmx parameters when starting JVMs?

所以我们看到,所以看的第一件事是如何在Java中NLTK调用斯坦福恶搞之前初始化命令失败处理大量的数据时,从https://github.com/nltk/nltk/blob/develop/nltk/tag/stanford.py#L19

from nltk.internals import find_file, find_jar, config_java, java, _java_options 

我们看到nltk.internals软件包正在处理不同的Java配置和参数。

然后我们看看https://github.com/nltk/nltk/blob/develop/nltk/internals.py#L65,我们看到没有值被添加到Java的内存分配。

+0

@elvas非常感谢你的回复。我做了你的建议。不幸的是,同样的问题依然存在。等待大约一分钟后,再次抛出相同的错误。 – Mohammed 2014-11-25 01:36:48

+1

你在机器上有多少内存?你尝试过更大的内存大小,看看有多少标记可以标记?不要贪婪,同时做标记和标记。 – alvas 2014-11-25 01:38:55

+0

@elvas,我有4GB的RAM。当我标记100,000个单词时,它工作正常。当我尝试标记200,000个单词时,它会抛出错误。我不贪婪同时进行标记和标记。我不知道如何分开做。你能告诉我怎么做。 – Mohammed 2014-11-25 01:48:06

相关问题