前提
最近pythonの勉強を始めました。
phpはある程度使えますが独学のため基礎的なことが抜けているかもしれません。
どうかご教授願います。
実現したいこと
テキストマイニングに興味を持ち、MySQLのデータベースから文章をselectし、
その文章をpythonのjanomeという形態素解析エンジンを利用し、
形態素解析(日本語の単語に切り分け)して出現ワード数をカウント。
多い順に並べ替えて表示させるというものを作りたい。
発生している問題・エラーメッセージ
phpからpythonにデータを送り、形態素解析を行い、phpにデータを返したいのですが 形態素解析されず、そのままの文章データで出力されてしまいます。 **望む結果** {'私': 1, '将来': 1, '参考': 1, 'よう': 1, 'の': 1, 'ため': 1, '行き': 1, '今日': 1, '記憶': 1, '式': 1, '妨害': 1, 'いう': 1, 'いる': 1, 'あり': 1, '希望': 1, '参り': 1, '分り': 1, '基礎': 1, '向い': 1, '方': 1, '朝': 1} **表示結果** 私は将来たといその参考ようってののために行きたませ。どうも今日が記憶式はひょろひょろその妨害ですでまででいうがいるありには希望参りんでから、ずいぶんには分りだろでますう。基礎に向いた方もしかるに朝をもちろんですででし。
該当のソースコード
sample.php
1<?php 2 3/*データベースへ接続*/ 4include_once '○○○.php'; 5 6/*文章を入れる空の変数を宣言*/ 7$abc = ""; 8 9/*wordtableから文章(word)を引き出す*/ 10$query = "SELECT word FROM wordtable"; 11$result = $mysqli->query($query); 12if (!$result) { 13 print('クエリーが失敗しました。' . $mysqli->error); 14 $mysqli->close(); 15 exit(); 16} 17 18/*引き出した文章をすべて繋げて一つの文章にする*/ 19while ($row = $result->fetch_assoc()) { 20 $abc .= $row['word']; 21 } 22 23 /*文章を格納した変数$abcを pythonファイルへ飛ばす*/ 24$command = "echo $abc | py -m test.py"; 25exec($command, $output, $state); 26 27/*pythonから返ってきた結果をSJISからUTF-8へ変換する*/ 28$output[0] = mb_convert_encoding($output[0], "UTF-8", "SJIS"); 29 30/*pythonからのデータを表示する*/ 31print($output[0]); 32 33?> 34
test.py
1#アナライザー機能のインポート 2from janome.analyzer import Analyzer 3from janome.tokenfilter import POSKeepFilter, TokenCountFilter 4 5#phpからのデータ受け取り 6import sys 7 8for line in sys.stdin: 9 abc = str(line) 10 11 12# アナライザーのフィルター 13token_filters = [ 14 POSKeepFilter(['名詞','動詞']), # 名詞と動詞の抽出 15 TokenCountFilter(sorted=True), # ワード出現回数をカウントして多い順に並び替え 16] 17 18analyzer = Analyzer(token_filters=token_filters) # アナライザー生成 19 20wordcount = analyzer.analyze(abc) # アナライザー機能をかけ名詞と動詞を抜きだしカウント 21print(dict(wordcount)) # 辞書形式に変換
試したこと
sample.phpの18~21行目にある$abcに
文字列を直接入力すると望む結果が得られます。
sample.php
1$abc = "私は将来たといその参考ようってののために行きたませ。 2どうも今日が記憶式はひょろひょろその妨害ですでまででいうがいるありには 3希望参りんでから、ずいぶんには分りだろでますう。基礎に向いた方もしかるに朝をもちろんですででし。";
phpとpythonの扱うデータに違いがあるせいかと思い
データ形式など調べてみましたが、両者とも同じString形式でした。
echo $abc; で内容を表示すると中身はきちんと入っていました。
補足情報(FW/ツールのバージョンなど)
pip list によるインストールされたパッケージ一覧です。
色々試す過程で余計なものまで入っているかもしれません。
Package Version
Janome 0.4.2
matplotlib 3.6.3
numpy 1.24.1
phpserialize 1.3
Pillow 9.4.0
pip 22.3.1
setuptools 65.5.0
unidic-lite 1.0.8
wordcloud 1.8.2.2
pythonのバージョンは 3.10です。
Windows10 64bit
xamppローカルサーバー
VisualStudioCodeを使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/23 03:23
2023/01/23 03:40