federal
あなたも質問に答えられます!
ウォッチリストに追加
- 状態:終了
- 回答数:3 / 45件
- 回答ポイント:450ポイント
- 登録:2007-01-07 13:54:58
- 終了:2007-01-09 11:41:33
- カテゴリー:
ウェブ制作
mecab にテキストを渡すのに、入力ファイルを作らない方法ということで、
パイプ経由での読み書きを試してみました。
proc_open() 関数を使っています。
http://www.php.net/manual/ja/function.proc-open.php
$text = "すもももももももものうち";
$mecabpath = 'C:\Progra~1\MeCab\bin\mecab.exe';
$descriptorspec = array(
0 => array("pipe","r"), // stdin は mecab が読み込むパイプ
1 => array("pipe","w") // stdout は mecab が書き込むパイプ
);
$process = proc_open($mecabpath, $descriptorspec,$pipes);
if(is_resource($process)){
// $pipes はこの時点で次のような形を取っています。
// 0 => mecab の stdin に繋がれた書き込み可能なハンドル
// 1 => mecab の stdout に繋がれた読み込み可能なハンドル
fwrite($pipes[0], $text);
fclose($pipes[0]);
while(!feof($pipes[1])){
$result .= fread($pipes[1], 4096);
}
fclose($pipes[1]);
proc_close($process);
echo $result;
}
$result にmecabの出力が格納されているかと思います。
ご回答ありがとうございます。
popenのような関数を使うことは検討がついていたのですが、
マニュアルを拝見しても理解できずに頓挫していました。。。
おかげさまで、回答2:GEN111さんの掲示されたコードを参考にして作成しました、
文字列→ファイル作成→解析→ファイル削除という流れのスクリプトより、
3~10倍近く実行時間が短くなりました。
ご回答いただいた皆様、ありがとうございました。
1
回答者:
takagimasahiro
2007-01-07 15:12:09
満足!
50ポイント
Visual Studio 6 をお持ちでしたら、php_mecabを使うのがいちばん手っ取り早いのではないかと思います。
ご回答ありがとうございます。
ご掲示いただいたWebサイトは既に拝見しておりましたが、
Windows環境ではどのようにしたら活用できるのかわかりませんでした。
また、Visual StudioはC# 2005 Express Editionしか持っておりませんので、
Visual Studio 6の指定となると、申し訳ありませんが使うことができません。。。
ちょっと試してみました。
$mecabpath = 'C:\Progra~1\MeCab\bin\mecab.exe' ; // mecab のパス
$inputfile = '"C:\test\test.txt"' ; // input ファイル
exec("$mecabpath $inputfile", $result) ;
これで $result に結果が保存されていると思います。
ご回答ありがとうございます。
ご掲示していただいたコードを参考にさせていただいたところ、
とりあえず動作するものを作成することができました。
そこでさらに質問なのですが、
入力をファイルで行うのではなく、文字列を用いることによって実現することはできないでしょうか?
データベース(MySQL)に文章が既に用意されているのですが、
解析の度にファイルを作成→解析では、スマートではないように思えます。
また、文字コードがコマンドラインを経由するためか、
Shift-JISでないと文字化けが起こり正しく結果が出ません。
これまでのスクリプトは、全てEUC-JPで作成してきたので、
できればEUC-JPのみを使用して作成したいのですが可能でしょうか?
よろしくお願いいたします。
おとなり質問
- HTTP通信の話で質問です。 テストのために chunkという形式でサーバ-クライアント間を送受信している環境を実現したいのですが、どうすれば実現できるかご存知の..
1 - 社内にてサーバーを立てることが出来ない場合に ノートPCなどでPHPなどの動作テストをする 環境を構築することは可能でしょうか? Apacheなどのサーバーをいれず..
6 - xoops-2.0.13a-JPをインストールしたいのですが、 php.iniの内部エンコーディングをEUC、 出力エンコーディングをShift_JISに設定しているため、 画面が白紙状態..
1 - 【MySQLとPHPとGD】 環境----- CentOs 4.2 PHP 4.3.9 MySQL 4.1.12 質問----- MySQLにBLOB型でバイナリデータを挿入しています。 このバイナリデータは、J..
3 - 私はよくwgetなどのダウンロードツールで小説サイトなどを丸ごとダウンロードしてい るのですが、ディレクトリに適当な名称を付けたり、他のPCでダウンロード..
1

