前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/26 07:53
2018/06/26 08:00
2018/06/26 08:01