php - 用php访问python nltk失败

标签 php shell python-2.7 nltk

我试图从我的 php 文件中调用一个包含句子/单词标记生成器的 python 文件,如下所示:

$output = shell_exec('python tokenizer.py $sentence')

我尝试过单个 exec、python 和 tokenizer.py 的完整路径,并将 $sentence 用双引号括起来。但从逻辑上讲,这不应该是问题,因为在 python 开头调用 print(1) ,Python 代码在实际使用任何 nltk 包之前会使 $output 等于“1”。所以我得出的结论是,这里的问题是 nltk 本身,比如模块的路径不正确或者其他什么......

但是,使用与上面相同的命令从 shell 调用 python 可以提供完全标记化的输出! 总结:看起来从 php 调用 python 时神奇地“关闭”了 nltk,而从 shell 执行时它完全可以工作。

这是我正在使用的Python代码的一部分:

import sys
import nltk
from nltk.tokenize import sent_tokenize

sample_text2 = sys.argv[1]
gust = sent_tokenize(sample_text2)
#print(1) here doesn't work, but everywhere above (before calling sent_tokenize) it does.

服务器在 CentOS (Linux) 上运行,我通过 SSH 访问它。

明显的问题:我在 PHP 中做错了什么?还是一般情况下?还有其他选择吗?

编辑 从 dvhh 的回答及其评论中可以看出,发生这种情况是因为服务器上安装了两个版本(2.6 和 2.7),而 www 用户可以通过控制台访问 2.6,默认版本是2.7.解决方案是将这两种情况的默认 python 更改为 2.7,并将 nltk 模块放入依赖项文件夹之一。 (或者使用sys.path.append附加依赖目录)

最佳答案

您的 php 脚本由 www 用户执行。

  • 您可以检查python脚本解释器是否被正确调用,它通常位于PATH环境变量中的目录之一(例如/usr/bin/python),但 www 用户没有设置 PATH 环境变量。
    解决方案shell_exec 调用中指定 python 解释器的完整路径(在执行脚本时还要指定脚本的完整路径)

  • nltk 库的安装路径怎么样,您可以通过查看 sys 来检查 python 解释器是否正确查找它使用 www 用户运行 python 时的 .path
    诊断:使用shell_exec调用运行python脚本来打印sys.path解决方案:在import nltk

  • 之前将库路径附加到Python脚本中的sys.path

考虑到问题中提供的信息,这些将是最明显的解决方案。

更新:
由于安装了 2 个版本的 python(尚未安装库),建议指定所需解释器的路径。第一个解决方案有助于纠正问题。 在类 Unix 系统中,我建议使用 which python 命令来确定默认 python 解释器的路径。

关于php - 用php访问python nltk失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491545/

相关文章:

shell - 如何使用 CURL 将现有文件 append 到文件中?

linux - 字符串过滤! shell Linux

python - 如何在 Tensorflow 中创建优化器

qt - 拖放按钮和下拉菜单 PyQt/Qt designer

php - 使用 PHP 和 mySQL 生成产品页面

php - 使用 php 在网格/表格上​​编辑图像

php - 选择最新记录时选择速度慢得多

shell - SUS/POSIX shell 兼容的 '-nt' 测试替换

php - magento 连接到两个数据库

python - 返回前打印值