我正在使用python中的nltk做一个自然语言处理的项目。项目的砌块结构如下:
输入应该通过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 (或任何其他非标准包)时,它可以工作。
--我确实做了网络搜索来找到解决方案,并且意识到我必须设置一些环境变量才能使它工作。但是,我不知道如何.。
我的代码:
#!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>"发布于 2013-11-01 15:54:35
因为我没有得到任何答案(没有责备任何人!)我看了更多的文件。正如我在上面的问题陈述中所描述的,只有NLP引擎是用Python编写的。而且,这个问题只存在于CGI环境中。因此我的解决方案:
我修改了engine.py以接收作为命令行参数的输入,然后对其进行处理。它将处理过的数据(以准确的格式)返回到缓冲区流。我在PHP中使用了exec()命令来做到这一点。
这个项目是在GitHub上,所以如果有人想看它,他是最受欢迎的!
PS:我还是不知道这个错误的原因。我敢肯定所有的环保道路都是正确的。所以我认为这个答案是一个解决方案,而不是一个解决方案。
PPS:我正在回答我自己的问题,所以如果有人有同样的问题,他们可以考虑一下这个问题。
发布于 2013-11-01 17:13:38
问题是您运行了两次is_noun,第一次在发送任何头之前。因此,错误。
另一个问题是str_in是str,但我认为nltk.pos_tag期望unicode。也就是说,您需要解码str_in值(如果您使用普通ASCII之外的任何符号)。也就是说,您无论如何都应该这样做,但是只有当输入中有这样一个字符时,您才会注意到):
str_in = unicode(inpt.getfirst('query', ''), 'utf-8')然后,当您打印unicode时,需要对它进行回编码:
print "<h5>%s is a noun.<h5>" % i[0].encode('utf-8')但是,以其当前的形式,它可能在浏览器中看起来很混乱,因为您需要通知浏览器,字符集是'utf-8',也就是说,您需要更改内容类型的标题:
print "Content-Type: text/html; charset=utf-8"
print很有希望,这一切都是本地使用,而不是从互联网上获得,因为这应该是复杂得多。
https://stackoverflow.com/questions/19456319
复制相似问题