質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

372閲覧

php → python(janome) → phpへのデータ受け渡しが正常に行われません。

hide7010

総合スコア2

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/01/23 02:37

前提
最近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を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

かんたんにするなら、データをテキストにしてファイルに保存し、それを読み込んで処理結果をファイルに保存、ってのを繰り返せばいいだけですね

投稿2023/01/23 02:43

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hide7010

2023/01/23 03:23

お返事ありがとうございます。 なるほど、php側でテキストファイルを作成し、pythonで読み込み。その結果を返せばいいんですね。 やってみます。 後ほどご報告させて頂きます!
hide7010

2023/01/23 03:40

早速やってみました。 PHP側で取得した$abcをテキストファイルに書き込んでpythonを呼び出し、 python側でテキストファイルを読み込み、処理 PHP側で受け取り表示することで求める結果が取れました! 本当に助かりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問