php使用nltk,关于php:NLTK找不到文件

我遇到了一个PHP脚本问题,该脚本说找不到文件/root/nltk_data/tokenizers/punkt/english.pickle。 但是我确认文件在这里。 II下载了整个数据集多次)

php脚本实际上运行一个python脚本,而nltk(一个python模块)说它找不到/root/nltk_data/tokenizers/punkt/english.pickle

$dir = dirname(__FILE__);

$command = "/usr/bin/python". $dir ."/test.py";

exec($command, $output);

另一方面,当我从命令行运行python脚本时,它工作得很好,并且能够访问该文件。

python test.py

是否可以启用php来查看那些文件? 我将文件更改为chmod 777,但这没有帮助。

该脚本包含:

#!/usr/bin/env/ pythonimport  nltk

try:

tokens = nltk.word_tokenize("I like apples.")

tagged = nltk.pos_tag(tokens)

print"OK!"

#print ' * '.join(tokens)except Exception:

print"error!"

pass

错误日志:

Traceback (most recent call last):

File"/var/zpanel/hostdata/zadmin/public_html/my_domain_com/test.py", line 39, in

tagged = nltk.pos_tag(tokens)

File"/usr/local/lib/python2.7/site-packages/nltk-2.0.4-py2.7.egg/nltk/tag/__init__.py", line   99, in pos_tag

tagger = load(_POS_TAGGER)

File"/usr/local/lib/python2.7/site-packages/nltk-2.0.4-py2.7.egg/nltk/data.py", line 605, in load

resource_val = pickle.load(_open(resource_url))

File"/usr/local/lib/python2.7/site-packages/nltk-2.0.4-py2.7.egg/nltk/data.py", line 686, in _open

return find(path).open()

File"/usr/local/lib/python2.7/site-packages/nltk-2.0.4-py2.7.egg/nltk/data.py", line 467, in find

raise LookupError(resource_not_found)

LookupError:

Resource taggers/maxent_treebank_pos_tagger/english.pickle not found. Please use the NLTK Downloader to obtain the resource:

>>> nltk.download()

Searched in:

- '/root/nltk_data'

- '/usr/share/nltk_data'

- '/usr/local/share/nltk_data'

- '/usr/lib/nltk_data'

- '/usr/local/lib/nltk_data'

请发布完整的追溯错误消息。 php脚本是否以与从命令行运行时不同的用户身份运行?

回显$command变量并检查它是否正确。

是的$ command是正确的,它适用于除nltk以外的其他python模块

一个已经添加了错误日志

我很确定运行php ius的用户与从命令行运行的usee不同,但是我不知道如何检查它。

我已经在我的PHP本地计算机服务器上尝试了您的代码,它可以正确地运行带有nltk库的python。

我正在centos vps上运行它,php 5.3.3。 你用什么?

Resource ... not found错误有两个原因:

nltk_data的路径设置不正确或未下载nltk_data

nltk_data目录已过时。

解:

您的问题是因为您的原因2。所以最简单的方法是删除nltk_data目录中的所有内容,然后使用python -c"import nltk; nltk.download('all')"重新下载所有内容。

另外,您正在使用过时的nltk代码,因此我建议您更新到NLTK 3.x版,因为从NLTK 2.x到NLTK 3.x有重大变化

问题:

nltk_data目录的数据结构如下:

nltk_data/tokenizers/punkt/english.pickle

但是最新的nltk_data是:

nltk_data/taggers/maxent_treebank_pos_tagger/english.pickle

这表明尽管您正在使用更高版本的NLTK代码,但您的nltk_data没有更新。

对于原因1,请参见下文

这些路径上没有nltk_data目录:

- '/root/nltk_data'

- '/usr/share/nltk_data'

- '/usr/local/share/nltk_data'

- '/usr/lib/nltk_data'

- '/usr/local/lib/nltk_data'

为了确保您具有后置技巧:

$ python

>>> import nltk

>>> nltk.download('maxent_treebank_pos_tagger')

[nltk_data] Downloading package maxent_treebank_pos_tagger to

[nltk_data]     /home/alvas/nltk_data...

[nltk_data]   Package maxent_treebank_pos_tagger is already up-to-

[nltk_data]       date!

True

现在您将看到nltk保存数据的位置,对我来说,这是/home/alvas/nltk_data

要知道nltk会搜索目录的路径:

$ python

>>> import nltk

>>> nltk.data.path

['/home/alvas/nltk_data', '/usr/share/nltk_data', '/usr/local/share/nltk_data', '/usr/lib/nltk_data', '/usr/local/lib/nltk_data']

您还可以手动找到nltk_data目录在系统上的保存位置,并将其添加到nltk.data.path中,例如如果nltk_data保存在/home/alvas/work_stuff/中:

>>> nltk.data.path.append(`/home/alvas/work_stuff/`)

为确保您具有集中安装,请执行以下操作:

sudo python -m nltk.downloader -d /usr/share/nltk_data all

另请参阅使用nltk.download()的下载错误

没有任何区别

您的nltk版本是什么?

我使用2.0.4,因为似乎3.0不适用于python 2.7.3

nltk从py2.6-py2.7支持。如果您发现nltk的任何部分不支持py2.7.3,可以在github上提出问题,开发人员将尽快解决。

您是否尝试过删除nltk_data目录并重新下载它?

会尝试类似的东西。也许要手动加载文件。

如果不尝试使用nltk.data.append技巧,它将起作用。

希望会。我重做服务器安装,所以现在我以不同的方式使用python安装,但问题仍然存在。我会使用3.0版本,但它根本不起作用,甚至连字解析器也不能。

sudo python -m nltk.downloader -d / usr / share / nltk_data所有这些解决了我的问题,谢谢

我已经在我的PHP本地计算机服务器上尝试了您的代码,并且该代码正确地运行了带有NLTK库的python。

我最好的猜测是:

通过执行此操作,检查哪个用户正在运行PHP。正在运行:

echo exec('whoami');

在Linux环境下为我工作。如果您使用的是Apache Web服务器,则通常运行php的用户为apache。

检查运行PHP的用户是否具有对/root/nltk_data文件夹(或放置NLTK数据的文件夹)的读取权限。

2)你的意思是chmod?

1)用户是Apache,我刚刚检查过。

实际上,我现在不怎么检查2,因为我只能在根文件夹中执行" ls -l"命令。我将nltk_data文件夹设为777。

777可以使用吗?

不,不是。谁知道为什么:)

只是注意到您只创建了777文件夹。您应该将文件夹及其中的所有内容制作为777。在目录上执行chmod -R 777。

刚检查完-一样。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值