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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

PHP

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

564閲覧

Webサイトの複数ある記事の類似する部分を抽出したいが、何から手をつければよいかわからない

OkomekO

総合スコア30

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

PHP

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2019/08/12 14:14

前提・実現したいこと

指定したWebサイトから複数の記事の本文を自動的に取得し、文章の類似度を計算、類似している点(できれば文で)を出力する。
つまりWebサイトで多くの人が言っていることを抽出したいな。ということです。

発生している問題

上記のようなソフトを作成したいのですが、何から手をつければ良いのかわかりません。
必要になりそうだと思ったものが合っているのか、どのような順番で勉強したらいいのかわからないのです。

なるべくアプリケーションを実装しながら学習することが好きなので、オススメの勉強法があれば教えていただきたいです。

よろしくお願いいたします。

必要になりそうだと思ったもの

記事をサイトから取得する為:Webスクレイピング技術,PHP
文章類似度計算:文章のベクトル化、形態要素解析など自然言語処理

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

Python,Cの基本的な文法を学んだ程度のプログラミング初心者です。
Python3.7.4
Mac OS

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずは本文のスクレイピングをしないといけないのですが、サイトごとに構造が違う訳ですからこれは一般論としては難しい部類の処理になると思います。「コンテンツだけを抜き出す」手法は探せばいろいろ提案されていると思いますから、よさそうなものを見つけて使ってください(ライブラリまであるかは微妙。自分で実装しないといけないかもしれません)。

スクレイピングのコードはPHPでも書けるとは思いますが、PHPの知識がなければPythonでも書けるし、手間とかやりやすさは大差ないでしょう。


文ごとにベクトル化して似ている文ごとにまとめる、のはそう難しくはないと思いますが、ベクトルの距離が近かったときに人の目で見て似ていると言えるかどうかはまた別。意味のある結果が出るのかもまた別(ナイーブにやると定型文的なのばっかり引っかかるだろうけど、それでいいの? とか)。

こちらはもう少し「やりたいこと」を明確にした方が良いかと。

投稿2019/08/12 14:58

hayataka2049

総合スコア30933

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

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

OkomekO

2019/08/13 01:04

回答ありがとうございました! スクレイピングに関しては単純ですが本文を取得するサイトをあらかじめ決めておけば構造の違いを回避できそうですね。実装が出来たら回答の通りコンテンツだけを抜き出す方法を試してみようと思います。 やりたいことなのですが、例えばサイトの記事に Aさんは「私は毎朝5時に起きて読書をしている」記事を Bさんは「いつも早朝に起きて朝食を作っている」、 Cさんは「毎朝6時にはランニングをしている」、 Dさんは「いつも18時には寝ている」Eさんは・・・・・ などと記事本文中にあったら、それらから「多くの人が早朝に起きている」のような彼らがいつもやっていることを返して欲しいです。 "早朝"や"多くの人"の定義も必要になってくるのでしょうが、この"いつもやっていること"に対しどうアプローチをかければ良いのでしょうか。 定型文的なものを含めて収集して、 その後に挨拶や導入文などの定型文的なものは消すという加工をしたいと思います。 ですが求めている答えとの差別化が掴めません。ご教授お願いいたします
hayataka2049

2019/08/13 02:04 編集

難しいことをやろうとしていますね。自然言語処理の専門知識がないと無理でしょう。 というか、(似たような既存研究は探せばあるかもしれないけど)これがちゃんとできたら普通に最先端の研究として論文出せそうなタスクなので、目標が高すぎると思います。
hayataka2049

2019/08/13 02:11 編集

テキストマイニング的に単語単位で見てやれないのかを考えてみましたが、やはり意味と統語構造が取れないとどうしようもないタスクのような気がします。 今どきのDNN全盛のNLPで解くなら、1つの文書(ブログ記事とか)と1つのクエリ(「著者がいつもやっていることは何ですか?」とか)を与えられて答えを返すというシステムは研究されているのでそのへんを持ってきて、文書ごとにやって答えの分散表現の分布を見よう、みたいな話になるのかな……そんな高級なのはやすやすとは実装できない。
hayataka2049

2019/08/13 02:18 編集

もう少し簡易なので考えると、文ごとにparagraph vectorを作ってから、「早朝 していること」くらいの単語ベクトルと類似度の高いのを探す、とかである程度はできるでしょうか(すごくノイズ多そうだけど)。 クエリが先に決まっていれば、なんとかなるかな。決まっていないならクラスタリングして解釈すればテキストマイニング的に「分析」することはできるかもしれません。けど、けっこうたいへん。
OkomekO

2019/08/13 06:28

回答ありがとうございました! やはり、実装するためには文章を"理解"することが必要になってきますね…難しいです 簡易的なものについてですが、 クエリは決まってないのでクラスタリングした後の「テキストマイニング的に分析する」この部分の詳細を教えていただきたいです
hayataka2049

2019/08/13 06:38

たくさんのクラスタに分けて(文単位だと数百はないと意味的なまとまりは出てこない気がします)、クラスタごとに含まれている文を目視で見ながら、「このクラスタの文はこういう意味」というラベルを貼っていきます。けっこう疲れる作業です。あるいは、クラスタ中心に近い個体を代表個体にしてもいいですが、やはりチェックは必要でしょう。 根気がいるし、報われる保証もまったくない作業です。そして、何を得たいのかが予め明確になっていない場合は、テキストマイニングは報われないことの方が多いです。 (クエリが決まっていればやりようはあるけど、漠然と知見を得ようと思っても漠然とした結果しか得られない)
OkomekO

2019/08/13 07:13 編集

少し調べてみたのですが、Doc2Vecなどで文章の分散表現を用いたものがそれに当てはまるのでしょうか? 追記 コメントの間隔がずれてしまいましたすみません気にしないでください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問