gpt4 book ai didi

NLTK Stanford POS 标记器中的 Java 命令失败

转载 作者:行者123 更新时间:2023-11-29 03:15:09 24 4
gpt4 key购买 nike

我请求您的帮助和协助解决“Java 命令失败”的错误,每当我尝试标记大小为 2 兆字节的阿拉伯文语料库时,该错误就会不断抛出。我搜索了网络和 stanford POS tagger 邮件列表。但是,我没有找到解决方案。看了一些类似问题的帖子,提示是内存用完了。我不确定。我还有 19GB 的可用内存。我尝试了所有可能的解决方案,但仍然出现相同的错误。

我在 Python 上的命令一般,在 Linux 上的命令很好。我正在使用 LinuxMint17 KDE 64 位、Python3.4、NLTK alpha 和 Stanford POS tagger model for Arabic 。这是我的代码:

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!

我打算标记 3 亿个单词以用于我的博士学位。研究项目。如果我继续一次标记 10 万个单词,我将不得不重复该任务 3000 次。它会杀了我!

非常感谢您的帮助。

最佳答案

在您的导入行之后添加此行:

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

这将增加 java 允许 Stanford POS Tagger 使用的最大 RAM 大小。 '-xmx2G' 将最大允许 RAM 更改为 2GB,而不是默认的 512MB。

参见 What are the Xms and Xmx parameters when starting JVMs?了解更多信息


如果您对如何调试代码感兴趣,请继续阅读。

所以我们看到命令在处理大量数据时失败所以首先要看的是在调用 Stanford 标记器之前如何在 NLTK 中初始化 Java,来自 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 的内存分配添加值。

关于NLTK Stanford POS 标记器中的 Java 命令失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27116495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com