1

nltkPythonで使用する自然言語処理のプロジェクトを行っています。プロジェクトのブロック構造は次のとおりです。

  1. インターフェース (php) ->
  2. [NLP エンジン] (Python で) ->
  3. API 呼び出し (php) ->
  4. 結果 (php)

入力は、GET メソッドを介して PHP インターフェイスから Python エンジンに送られることになっています。

バックグラウンド:

url=/linguistics/Easy-PHP Dev Server ( ) を使用して仮想ホスト ( ) サーバーを作成しましたLocation=D:\Computational_LinguisticsTest.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>"
4

2 に答える 2

0

問題は、is_nounヘッダーを送信する前に 2 回実行し、最初の 1 回を実行することです。したがって、エラー。

もう 1 つの問題は、str_inですが、期待しているstrと思います。つまり、値をデコードする必要があります (プレーン ASCII 以外の記号を使用する場合。とにかくそれを行う必要がありますが、入力にそのような文字がある場合にのみ気付くでしょう):nltk.pos_tagunicodestr_in

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

PS 願わくば、これはすべてローカルでの使用のみを目的としており、インターネットからは利用できません。

于 2013-11-01T17:13:38.483 に答える