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

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

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

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

PHP

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

Mecab

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

Q&A

解決済

1回答

2121閲覧

配列にある要素に対して形態素解析を行い配列に格納したい

agep31

総合スコア29

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

PHP

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

Mecab

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

0グッド

0クリップ

投稿2018/07/02 08:09

編集2018/07/02 09:14

前提・実現したいこと

DOMXpathを用いて指定したURLのhtmlから特定タグを取り出し、その文章に対して形態素解析を行っています。<h5>タグを取り出した際に、以下のような結果になりました。

<$h5_values>

Array
(
[0] => 旅行代金(お一人様)
[1] => 追加料金(お一人様)
)

この配列($h5_values)に対して、各要素ごとにmecabを用いて形態素解析を行い、その結果を配列($mecab_result)に格納したいのですが、以下のように出力したいです。

Array(0)
(
[0] => 旅行 名詞,一般
[1] => 代金 名詞,一般



[6] => ) 記号,括弧閉
[7] => 追加 名詞,一般
[8] => 料金 名詞,一般



[13] => ) 記号,括弧閉

現時点では、$h5_valuesの0番目の要素が取れていないのと、解析結果全てが一つの要素として配列に入ってしまい困っています。

該当のソースコード

<!DOCTYPE html> <html> <head> <title>研究</title> </head> <body> <?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/CFMZ58AAH002.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); echo "/*------------<h5>----------------*/\n"; foreach ($xpath->query('//h5') as $h5_result){ $h5_values[]=$h5_result->nodeValue; } if(empty($h5_result->nodeValue)){ echo "該当なし"; } $options = array('-d', '/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd'); $mecab = new \MeCab\Tagger($options); print_r($h5_values); $options = array('-d', '/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd'); $mecab = new \MeCab\Tagger($options); foreach($h5_values as $n){ $mecab_result[] = $mecab->parse($n); } var_dump($mecab_result);

出力結果

<!DOCTYPE html> <html> <head> <title>研究</title> </head> <body> /*------------<h5>----------------*/ Array ( [0] => 旅行代金(お一人様) [1] => 追加料金(お一人様) ) string(381) "追加 名詞,サ変接続,*,*,*,*,追加,ツイカ,ツイカ 料金 名詞,一般,*,*,*,*,料金,リョウキン,リョーキン ( 記号,括弧開,*,*,*,*,(,(,( お 接頭詞,名詞接続,*,*,*,*,お,オ,オ 一人 名詞,固有名詞,人名,名,*,*,一人,カズト,カズト 様 名詞,接尾,人名,*,*,*,様,サマ,サマ ) 記号,括弧閉,*,*,*,*,),),) EOS

試したこと

php-mecabの動作は確認済みです。きちんと動作しています。

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

ubuntu18.04
Apache/2.4.29
PHP 7.2.5
辞書:mecab-ipadic-NEologd

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

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

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

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

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

mather

2018/07/02 08:23

$h4_valuesという変数があるのが気になりますが…。というのと、具体的に何を試してうまくいった、うまくいかなかった、という部分を提示しないと丸投げの質問になっていますよ。
agep31

2018/07/02 08:24

ご回答ありがとうございます。自分で行った部分を載せていなかったので修正します。
mather

2018/07/02 08:41

期待している結果も書きましょう。array(0=>array(...), 1=>array(...)) でも「一つの配列」であることは間違いないので、具体的に想定している「一つの配列」という結果がどんなものか書いたほうがいいです。
agep31

2018/07/02 09:04

ご回答ありがとうございます。修正いたしました。
guest

回答1

0

ベストアンサー

$h5_values の0番目の要素が取れていない

php

1foreach($h5_values as $n){ 2 $mecab_result = $mecab->parse($n); 3}

$mecab_result を直接上書きしているからですね。配列に追加するようにしましょう。

解析結果全てが一つの要素として配列に入ってしまい困っています。

結果を配列として受け取るようにしましょう。
参考 : https://qiita.com/yudaifuijta0121/items/1787d70b9cfca3e43d12

一要素ずつ array_push すれば良いので、実行できるはずです。

投稿2018/07/02 09:14

mather

総合スコア6753

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

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

agep31

2018/07/02 09:29

ご回答ありがとうございます。0番目の要素については解決しました。
agep31

2018/07/02 09:36

もう一つのほうも、解析結果ごとにこだわる必要はなかったため解決しました。どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問