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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Q&A

解決済

1回答

1792閲覧

phpでmecabを使い、バッファサイズを超える文字列の形態素解析を行いたい

agep31

総合スコア29

PHP

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

0グッド

0クリップ

投稿2018/06/25 09:06

前提・実現したいこと

phpを使い、web上からhtmlを取得して、<body>タグに対して形態素解析を行いたいのですが、約5000文字あるため、mecabの-bオプションを付け、バッファサイズを増やしたのですが、うまくいきません。

該当のソースコード

<?php //対象URL $opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0rn")); $context = stream_context_create($opts); $url = "https://search.mwt.co.jp/mintl/detail/CFMZ67VADC12.html?mediacd=ZTP"; $html = file_get_contents($url,false,$context); $dom = new DOMDocument; @$dom->loadHTML( mb_convert_encoding($html, 'HTML-ENTITIES', 'ASCII,JIS,UTF-8,eucJP-win,SJIS-win'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD ); $xpath = new DOMXPath($dom); $text = $dom->documentElement->nodeValue; $body = $xpath->query('//body')->item(0)->nodeValue; $path = '"C:\Program Files\MeCab\bin\mecab.exe -b 19820"'; $input = $body; //パイプ処理 //array[0][0] = "pipe" //array[0][1] = "r" 子プロセスが読み込むパイプ //array[1][0] = "pipe"  //array[1][1] = "w" 子プロセスが書き込むパイプ $descriptorspec = array( 0 => array("pipe","r"), 1 => array("pipe","w") ); $process = proc_open($path, $descriptorspec, $pipes); if(is_resource($process)) { fwrite($pipes[0], $input); fclose($pipes[0]); while(!feof($pipes[1])){ $output[] = fgets($pipes[1]); } fclose($pipes[1]); proc_close($process); } echo "<pre>"; var_dump($output); //形態素解析の結果の出力 echo "</pre>";

試したこと

htmlからのbodyタグの取得には成功しているのですが、パスでmecabを指定する際に$path = '"C:\Program Files\MeCab\bin\mecab.exe -b 19820"としてやってみたのですが、配列には何も入っていませんでした。
bodyタグの中身をメモ帳にコピーしてコマンドプロントで実行してみたのですが、こちらはうまくいきました。
パスの指定が間違っているのでしょうか?

補足情報(FW/ツールのバージョンなど)

php5.6.37

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

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

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

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

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

guest

回答1

0

ベストアンサー

program files アクセス権

パスを見て大丈夫かなと思われることが一点、windows環境のようですので、この問題解決しないと動かないんじゃないのかなと思いました。

program files配下は、たとえ管理者権限持っていても、簡単に実行や変更できない仕様なので、別の場所にインストールしなおす必要があるかもしれません。

投稿2018/06/26 07:43

raichi

総合スコア278

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

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

agep31

2018/06/26 07:53

ご回答ありがとうございます。100文字程度の文字列なら形態素解析を行えているので、パスの指定に関しては問題ないと考えています。オプション付きのパスの指定の部分が怪しいです。
raichi

2018/06/26 08:00

環境の問題なので何とも言えないのですが、プロンプトとPHP実行ユーザーは恐らく別なのでお気を付けください
agep31

2018/06/26 08:01

ご回答ありがとうございます。気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問