Python3_CGIのフォームの入力をMeCabで形態素解析
現在,Python3_CGIでwebアプリの実装をしております.フォームに入力されたテキストを受け取り,それをMeCabで形態素解析し,名詞だけを取り出そうとしています.
値の受け渡しはできているのですが,形態素解析のプログラムがうまく動かずRuntimeErrorが発生しているという状況です.エラーはPythonのcgitbモジュールで表示しています.
発生している問題・エラーメッセージ
Traceback (most recent call last): File "nlp.py", line 32, in <module> print(morpho.morpho(input)) File "/home/ken/public_html/cgi-bin/sample/morpho.py", line 8, in morpho tagger = MeCab.Tagger() # MeCabのインスタンス File "/usr/lib64/python3.6/site-packages/MeCab.py", line 307, in __init__ this = _MeCab.new_Tagger(*args) RuntimeError
形態素解析のプログラムはcgi,フォームを介さずに実行すると期待通りの出力をしてくれます.
該当のソースコード3つ
フォームを記述したHTML
lang
1<!--form.html--> 2<!DOCTYPE HTML> 3<!--Credibility実験用 Prototype--> 4<html> 5<head> 6<meta charset='utf-8'> 7</head> 8<body> 9<header> 10<h3>形態素解析</h3><hr><br> 11</header> 12<!--入力フォーム><--> 13<form action="./nlp.py" method="post"> 14<input type="text" name="text" value=" "><br> 15<input type="reset" value="Clear"> 16<input type="submit" value="Input"> 17</form></div> 18</body> 19</html>
フォームを受け取り,Mecabのスクリプトを関数として実行し,ブラウザに表示するcgiスクリプト
lang
1#nlp.py 2#!/usr/local/bin/python3 3#_*_coding:utf-8_*_ 4import sys, io, os, re, cgi, cgitb, unicodedata 5import MeCab 6import morpho 7 8# cgi設定------------------------------------------------------------------------ 9sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') # python cgiで日本語が文字化けするのを防ぐ 10cgitb.enable() # エラーがあった場合に出力 11print("Content-Type: text/html") # HTML is following 12print() # blank line, end of headers 13 14# formの受け取り-------------------------------------------------------- 15form = cgi.FieldStorage() 16text = form.getvalue("text") # Target Information 17input = str(input) # fromで受け取った値が NoneType 型になっていたので変換 18 19# html上部----------------------------- 20html_head = """ 21<!DOCTYPE html> 22<html> 23<head> 24<meta charset='utf-8'> 25<title>test</title> 26</head> 27<body> 28<h2>Result</h2><hr> 29""" 30print(html_head) # htmlの上部の出力 31 32# pythonによるデータ処理--------------- 33print(morpho.morpho(input)) # 形態素解析のスクリプトを実行 34 35# html下部----------------------------- 36print("<br><br><br><hr>") 37html_bottom = """ 38</body></html> 39""" 40print(html_bottom)
形態素解析で名詞の抽出を行うスクリプト(cgiからではなくターミナルからだと問題なく動く)
lang
1#morpho.py 2#!/usr/local/bin/python3 3#_*_coding:utf-8_*_ 4# nlp.pyから渡された入力(日本語)に対して形態素解析を行う 5import re 6import MeCab 7# Morphological Analysis (日本語文章の名詞を抽出)----------------------------------- 8def morpho(input): 9 tagger = MeCab.Tagger() # MeCabのインスタンス 10 tagger.parse('') # 一度空の文字列をparseしないとエラー 11 text_node = tagger.parseToNode(input) # 解析 12 words = [] # 単語を格納するリスト.ここにtextの名詞が格納される. 13 while text_node: 14 word = text_node.surface.split(",")[0] # surfaceは単語を取得 15 pos = text_node.feature.split(",")[0] # featureは品詞(PartsOfSpeech)を取得 16 if pos == "名詞": # 文章に名詞が含まれたら,その単語を取り出す 17 words.append(word) 18 text_node = text_node.next # nextで全形態素に順次アクセス""" 19 result = " ".join(words) # 抜き出したキーワードを文字列に変換し,空白で繋げて格納 20 return result
試したこと
・形態素解析のスクリプトは単体ではエラーなしできちんと動く.cgiから関数として実行するとエラー
・formから受け取った値が NoneTypeになっていたのでstrに変換
開発環境
Python(3.6.3)
OS : CentOS(7.4.1708)
よろしくお願いします!
検索は大体網羅していると思います.一日中作業しても解決しなかったので,とっさにアカウントを作って質問させていただきました.初心者で言葉足らずな部分もあると思いますがよろしくお願いいたします!
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/19 13:30
2018/06/19 13:34
2018/06/19 14:00
2018/06/20 09:31
2018/06/20 10:42
2018/06/22 22:28