windows環境で、PHPでMeCabを使って形態素解析をしています。
その結果の中から、品詞(動詞、名詞など)と原形だけを取得したいのですが、どうすればいいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
preg_match()を用いるといいでしょう。
preg_match()は正規表現によるマッチングを行います。
preg_match() : http://www.php.net/manual/ja/function.preg-match.php
正規表現 : http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE
MeCabによる形態素解析の結果の出力は、
表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
となります。
これにpreg_matchを使用して品詞と原形を取得する場合の正規表現は、
/^.+\t(.+),.+,.+,.+,.+,.+,(.+),.+,.+/
とすればいいでしょう。
ただし例外として、未知語の場合についてはこの限りではありません。
unk.defファイルを見るとわかりますが、特に手を加えていなければ普通の単語と出力が異なるので、
正規表現が上記のものと一致しません。
例)MeCab 名詞,一般,,,,,*
この場合は原形がないので、質問者様の意図にもよりますが、
取得するのであれば表層形になるでしょうか。
その場合の正規表現は
/^(.+)\t(.+),.+,.,.,.,.,./
でいいかと思います。
以下にサンプルコードを示します。
//サンプルコード
lang
1<?php 2 3$path = '"C:\Program Files\MeCab\bin\mecab.exe"'; 4 5$input = "MeCabを使う";//形態素解析をする文字列 6 7 8//形態素解析 9$descriptorspec = array( 100 => array("pipe","r"), 111 => array("pipe","w") 12); 13$process = proc_open($path, $descriptorspec, $pipes); 14if(is_resource($process)) { 15 fwrite($pipes[0], $input); 16 fclose($pipes[0]); 17 while(!feof($pipes[1])){ 18 $output[] = fgets($pipes[1]);//形態素解析の結果を$outputに代入 19 } 20 fclose($pipes[1]); 21 proc_close($process); 22} 23 24 25//正規表現 26 27$pattern1 = '/^.+\t(.+),.+,.+,.+,.+,.+,(.+),.+,.+/u'; 28$pattern2 = '/^(.+)\t(.+),.+,.,.,.,.,./u';//未知語の場合 29 30foreach($output as $key => $value){ 31 //$matchesに結果が代入される 32//$matches[0]にはパターン全体にマッチしたテキストが代入される 33preg_match($pattern1, $value, $matches); 34if (count($matches) != 0){ 35 echo "<pre>"; 36 print_r($matches); 37 echo "</pre>"; 38 }else{ 39 //未知語の場合 40 preg_match($pattern2, $value, $matches); 41 if (count($matches) != 0){ 42 echo "<pre>"; 43 print_r($matches); 44 echo "</pre>"; 45 } 46} 47} 48 49?> 50 51//出力 52 53Array 54( 55[0] => MeCab 名詞,一般,*,*,*,*,* 56[1] => MeCab 57[2] => 名詞 58) 59Array 60( 61[0] => を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 62[1] => 助詞 63[2] => を 64) 65Array 66( 67[0] => 使う 動詞,自立,*,*,五段・ワ行促音便,基本形,使う,ツカウ,ツカウ 68 [1] => 動詞 69 [2] => 使う 70 )
投稿2014/10/17 02:30
総合スコア195
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。