首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python-CGI环境设置?

Python-CGI环境设置?
EN

Stack Overflow用户
提问于 2013-10-18 18:08:40
回答 2查看 432关注 0票数 1

我正在使用python中的nltk做一个自然语言处理的项目。项目的砌块结构如下:

  1. 接口(in php) ->
  2. NLP发动机 ->
  3. API调用(在php中) ->
  4. 结果(在php中)

输入应该通过GET方法从PHP接口传递到Python引擎。

背景:

我使用Easy (url=/linguistics/)创建了一个虚拟主机(url=/linguistics/)服务器.我启用了它,以便它能够执行Test.py,以便在输入linguistics/Test.py时执行。

发行:

基本CGI已经成功执行,我可以在Chrome中看到输出。但是,一旦导入了另一个模块,它就会返回以下错误:

服务器错误! 服务器遇到内部错误,无法完成请求。 错误消息:标题之前的脚本输出结束: engine.py 如果您认为这是服务器错误,请与网站管理员联系。 错误500语言Apache/2.4.4 (Win32) PHP5.5.0

当我不导入nltk (或任何其他非标准包)时,它可以工作。

--我确实做了网络搜索来找到解决方案,并且意识到我必须设置一些环境变量才能使它工作。但是,我不知道如何.

我的代码:

代码语言:javascript
复制
#!C:/Python27/python.exe
import nltk
from nltk import *
import re
import cgi, cgitb

inpt=cgi.FieldStorage() 
str_in = inpt.getvalue('query')

def is_noun (str):
    tags=nltk.pos_tag(nltk.word_tokenize(str))
    for i in tags:
        if i[1][1]=='N' or i[1][1]=='V':                            #Finding out the Nouns and the Verbs.
            print "<h5>%s is a noun.<h5>" %i[0]

is_noun(str_in)

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
is_noun(str_in)
print "</body>"
print "</html>"
EN

回答 2

Stack Overflow用户

发布于 2013-11-01 15:54:35

因为我没有得到任何答案(没有责备任何人!)我看了更多的文件。正如我在上面的问题陈述中所描述的,只有NLP引擎是用Python编写的。而且,这个问题只存在于CGI环境中。因此我的解决方案:

我修改了engine.py以接收作为命令行参数的输入,然后对其进行处理。它将处理过的数据(以准确的格式)返回到缓冲区流。我在PHP中使用了exec()命令来做到这一点。

这个项目是在GitHub上,所以如果有人想看它,他是最受欢迎的!

PS:我还是不知道这个错误的原因。我敢肯定所有的环保道路都是正确的。所以我认为这个答案是一个解决方案,而不是一个解决方案。

PPS:我正在回答我自己的问题,所以如果有人有同样的问题,他们可以考虑一下这个问题。

票数 0
EN

Stack Overflow用户

发布于 2013-11-01 17:13:38

问题是您运行了两次is_noun,第一次在发送任何头之前。因此,错误。

另一个问题是str_instr,但我认为nltk.pos_tag期望unicode。也就是说,您需要解码str_in值(如果您使用普通ASCII之外的任何符号)。也就是说,您无论如何都应该这样做,但是只有当输入中有这样一个字符时,您才会注意到):

代码语言:javascript
复制
str_in = unicode(inpt.getfirst('query', ''), 'utf-8')

然后,当您打印unicode时,需要对它进行回编码:

代码语言:javascript
复制
print "<h5>%s is a noun.<h5>" % i[0].encode('utf-8')

但是,以其当前的形式,它可能在浏览器中看起来很混乱,因为您需要通知浏览器,字符集是'utf-8',也就是说,您需要更改内容类型的标题:

代码语言:javascript
复制
print "Content-Type: text/html; charset=utf-8"
print

很有希望,这一切都是本地使用,而不是从互联网上获得,因为这应该是复杂得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19456319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档