我正在使用python中的nltk
在自然语言处理中执行一个项目。
项目的块结构如下:
输入应该通过GET方法从PHP接口传递到Python引擎。
背景
我使用Easy-PHP Dev Server(url=/linguistics/
)创建了一个虚拟主机(Location=D:\Computational_Linguistics
)服务器。我启用它以便它可以执行Test.py
,这样当我输入linguistics/Test.py
时,它就会执行。
问题:
基本的CGI已成功执行,我可以在Chrome中看到输出。但是一旦我导入了另一个模块,就会返回此错误:
服务器错误!
服务器遇到内部错误,无法完成您的请求。
错误讯息: 标题前的脚本输出结束:engine.py
如果您认为这是服务器错误,请与网站管理员联系。
错误500
语言学 Apache / 2.4.4(Win32)PHP / 5.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>"
答案 0 :(得分:0)
由于我没有收到答案(不责怪任何人!)我读了更多的文件。正如我在上面的问题陈述中所描述的,只有NLP引擎是用Python编写的。并且,问题仅存在于CGI环境中。 因此我的解决方案:
我修改了engine.py以接收输入为commanline参数,然后对其进行处理。它将处理后的数据(精确格式)返回给缓冲区流。 我在PHP中使用了exec()命令。
项目在GitHub,所以如果有人想看看,他是最受欢迎的!
PS:我仍然不知道该错误的原因。我确信所有环境路径都是正确的。所以我把这个答案称为解决方案,而不是解决方案。
PPS:我正在回答我自己的问题,所以如果有人遇到同样的问题,他们可能会考虑这个问题。答案 1 :(得分:0)
问题是您在发送任何标头之前运行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')
但是,在目前的形式中,它可能在浏览器中看起来很乱,因为你需要通知浏览器,charset是'utf-8',你需要更改内容类型标题:
print "Content-Type: text/html; charset=utf-8"
print
P.S。希望这些仅供本地使用,不能从互联网上获取,因为这应该要复杂得多。