はじめに
新たにPythonを勉強する必要があり、Pythonで簡単なサンプルアプリを作ってみたので記録しておきました。
このページのゴール
特定のWebサイトからテキスト情報を抽出し、形態素解析した結果を表示する。左記が目的なので使うパッケージの組み合わせは、こだわっていません。
最終的には、形態素解析にかけたあと、実際は分かち書きし、ベクトル化したのちいろいろしたいと思っていますが、まずは前半戦ということでここまでにしました。
実際に作ってみる
流れは以下のようになります。
- 特定のWebサイトからhtml情報を抜き出す
- 取得した情報はhtmlなので、テキストのみ抽出する
- 抽出したテキストを形態素解析器に入力
- 形態素解析の出力結果を出力する
形態素解析とは
形態素解析とはwikipedia(形態素解析)に書いてあります。
準備
形態素解析器をインストール
今回はmecabを使いました。また、文法的な解析結果をそのまま出力するのではなく、オプションをつけて分かち書きをするようにします。
Pythonをインストール
Pythonをインストールします。ここではpython3系で、windowsを前提とします。windows用ダウンロードページ
インストール後、実行に必要なPathの設定をします。設定方法は省略します。
念のため、動作確認をしてみます。
仮にファイル名をhelloworld.pyとしました。
print("Hello World!")
これだけ書いて実行します。Hello World!とでればOKです。
$ python helloworld.py
Hello World!
$
必要なパッケージのインストール
必要なパッケージをインストールします。
$ pip install requests
$ pip install beautifulsoup4
$ pip install mecab
今回必要なパッケージは下のコードでimportしているライブラリになります。
import requests
from bs4 import BeautifulSoup
import MeCab
#(1)
req = requests.get('https://news.yahoo.co.jp') #(2)
soup = BeautifulSoup(req.content, "html.parser")
sentence = soup.find("ul", "newsFeed_list").text #(3)
tagger = MeCab.Tagger("-Owakati")
result = tagger.parse(sentence) #(4)
print(tagger.parse(result)) #(5)
ざっくり説明です。
- 必要なライブラリをimportする
- 任意のサイト(今回はyahoo!のnewsより)リクエスト情報を取得する
- beautifulsoup4を使ってhtmlを解析し、htmlの要素をもとにnewsFeed_listのテキスト情報を抽出する
- mecabを使い、htmlを解析したテキスト情報を入力として、その結果を分かち書きする
- 結果をコンソール上に出力する
結果をみる
結果は、日々更新されるニュースから抽出しているため、タイミングによって異なりますが、テキスト情報が出力されるはずです。ただ、細かく見るともう少し改善したほうがよさそうな気もします。
最後に・ネクストステップ
今回は形態素解析器にかけた程度でしたが、文字情報を数値することもでき、それを統計処理することでそれらしいアプリになると思いますが、次回以降に作ってみたいと思います。また、辞書をアップデートしたり、参考にさせていただページのように、mecabの使い方を洗練させたり、Webアプリ化もやってみたいと思います。
参考にさせていただいたページ
PythonとMeCabで形態素解析(on Windows)
WindowsやmacやLinuxにpipでPython用MeCabバインディングをいれる