我正在尝试使用PHP中的exec()运行Python脚本。当我使用cmd
窗口直接运行它时,我的命令工作正常,但是当我在PHP中从exec()
运行它时会产生错误。
我的Python脚本使用NTLK来查找专有名词。示例命令:
"C:\Python25\python.exe" "C:\wamp\projects\python\trunk\tests\find_proper_nouns.py" "I went to London this morning"
当我从[London]
运行它时,返回cmd
,但是当我从exec()
运行相同的命令时,会在Apache日志中抛出错误。该脚本无法正常运行 - 如果我将python脚本更改为print "Hello World"
,返回正常。
我知道任何人都知道如何解决这个NLTK错误是一个很大的问题,但我真的可以做任何关于为什么从exec
运行它与cmd
不同的指针。 (命令相同)。
我正在使用Apache 2.2.11在Windows 7上运行WAMP。
以下是Apache日志中的错误:
Traceback (most recent call last):
File "C:\wamp\projects\python\trunk\tests\find_proper_nouns_command_line.py", line 6, in <module>
parts = nltk.pos_tag(text)
File "C:\Python25\lib\site-packages\nltk\tag\__init__.py", line 62, in pos_tag
tagger = nltk.data.load(_POS_TAGGER)
File "C:\Python25\lib\site-packages\nltk\data.py", line 590, in load
resource_val = pickle.load(_open(resource_url))
File "C:\Python25\lib\site-packages\nltk\data.py", line 669, in _open
return find(path).open()
File "C:\Python25\lib\site-packages\nltk\data.py", line 451, 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:
- 'C:\\nltk_data'
- 'D:\\nltk_data'
- 'E:\\nltk_data'
- 'C:\\Python25\\nltk_data'
- 'C:\\Python25\\lib\\nltk_data'
- 'C:\\Windows\\system32\\config\\systemprofile\\AppData\\Roaming\\nltk_data'
**********************************************************************
答案 0 :(得分:31)
您必须运行nltk.download()
并选择“maxent_treebank_pos_tagger”。你必须制作一个python脚本并放在其中:
#!/usr/bin/python
import nltk
nltk.download('maxent_treebank_pos_tagger');
然后从命令行运行它。它将安装尚未安装的POS标签的数据文件。
执行此操作后,它应该可以正常工作。
答案 1 :(得分:2)
您的网络服务器可能使用除您自己以外的其他权限运行。可能的问题包括:
提示:在命令提示符和PHP进程中执行 set 并检查差异。
答案 2 :(得分:1)
从shell /终端,您可以使用:
sudo python -m nltk.downloader maxent_treebank_pos_tagger
它将安装maxent_treebank_pos_tagger
(即NLTK中的标准树库POS标记器)。