お世話になります。
Python3
1#!/usr/bin/env python3.4 2# -*- coding: utf-8 -*- 3from natto import MeCab 4 5mc = MeCab() 6 7text = "おはようございます。" 8 9ma = mc.parse(text) 10 11print("Content-Type: text/html; charset=utf-8\n\n") 12print(""" 13<!DOCTYPE html> 14<html> 15<head> 16<meta charset="utf-8x"> 17<title>CGIスクリプト</title> 18</head> 19<body> 20<pre> 21""") 22print(ma) 23print(""" 24</pre> 25</body> 26</html> 27""") 28
このようなMecabの解析結果をWebブラウザ上で表示するプログラムを書きました。
ファイル名をsample.pyとでもすると、
Python3
1 % python3 sample.py
と入力すると以下のように表示してくれます。
Python3
1Content-Type: text/html; charset=utf-8 2 3 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="utf-8x"> 8<title>CGIスクリプト</title> 9</head> 10<body> 11<h1>CGIスクリプト</h1> 12<p>これはサーバの実行結果として生成されたHTMLです</p> 13<pre> 14 15おはよう 感動詞,*,*,*,*,*,おはよう,オハヨウ,オハヨー 16ござい 助動詞,*,*,*,五段・ラ行特殊,連用形,ござる,ゴザイ,ゴザイ 17ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 18。 記号,句点,*,*,*,*,。,。,。 19EOS 20 21</pre> 22</body> 23</html> 24
この結果を、できれば http://hoge.com/sample.pyなどと書いてWebブラウザ上で表示させたいと考えているのですが、上手く表示されません。
サーバはXserverを利用しています。
.htaccessでの設定がおかしいのかと考えましたが、
Python3
1#!/usr/bin/env python3 2 3import datetime 4 5#フォーマット文字列の作成 6html_body = """ 7<html><body> 8{0.year:d}/{0.month:d}/{0.day:d} {0.hour:d}:{0.minute:d}:{0.second:d} 9</body></html>""" 10 11now=datetime.datetime.now() 12 13print("Content-type: text/html\n") 14print(html_body.format(now))
等も作りましたが、こちらは結果がブラウザ上にきちんと表示されます。
.htaccessはこのように設定しています。
AddHandler cgi-script .py
どのようにすればいいのかご教授いただけますと幸甚です。
よろしくおねがいします。
その後、以下の事柄を試しました。
Python3
1#!/usr/bin/env python3.4 2# -*- coding: utf-8 -*- 3 4import sys 5import io 6sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 7#sys.stdout.write('Content-type: text/html; charset=UTF-8\n\n') 8 9import cgi 10# enable debugging 11import cgitb 12cgitb.enable() 13 14from natto import MeCab 15 16#mc = MeCab.Tagger('-Ochasen') 17 18text = "おはようございます。" 19 20#ma = mc.parse(text) 21 22print("Content-Type: text/html; charset=utf-8\n\n") 23print(""" 24<!DOCTYPE html> 25<html> 26<head> 27<meta charset="utf-8x"> 28<title>CGIスクリプト</title> 29</head> 30<body> 31<pre> 32""") 33#print(ma) 34print(text) 35print(""" 36</pre> 37</body> 38</html> 39""")
このようにすることで、少なくとも文字コードはUTF-8に統一され、
Mecabを利用しない範囲においては、表示されるようにはなりました。
まだMecabについては上手く表示ができておりませんので、
引き続き試していきたいと思います。
その後、この直上のプログラムで、コメント記号を外した
Python3
1mc = MeCab.Tagger('-Ochasen')
は、コマンドライン上での実行と併せて
Python3
1mc = MeCab()
とした方がよいことがわかりました。
しかし、コメント記号を外すと
いずれでも500 internal Server Errorとなります。
ちなみに、このmcをprint文で表示させると、
Python3
1<natto.mecab.MeCab model=<cdata 'mecab_model_t *' 0x55f5d313c190>, 2 tagger=<cdata 'mecab_t *' 0x55f5d31dc950>, 3 lattice=<cdata 'mecab_lattice_t *' 0x55f5d31463a0>, 4 libpath="/home/.../bin/mecab/lib/libmecab.so", 5 options={}, 6 dicts=[<natto.dictionary.DictionaryInfo dictionary= 7 <cdata 'mecab_dictionary_info_t *' 0x55f5d3133660>, 8 filepath="/home/.../bin/mecab/lib/mecab/dic/ipadic/sys.dic", 9 charset=utf-8, type=0>], 10 version=0.996>
このようになります。
引き続き調査します。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー