Python x 自然言語処理でアシアルブログの単語ランキングを算出する
はじめまして、江口です。
機械学習やらAIやらtensorflowやらで最近耳にすることが増えたと思うPythonについて の記事です。
先日書店でも並んでいる本が殆どRやPythonばかりで、機械学習の盛り上がりが伝わってきました!
今回はネタですが、以下の技術を使って、アシアルブログの頻出単語ランキングを算出して円グラフ化してみました。
▼使用言語
Python 3.6
▼使用library
unicodedata -> 全角文字判定に使用
requests -> アシアルブログのHTML文字列取得に使用
BeautifulSoup -> スクレイピングに使用
MeCab -> 形態素解析に使用
CountVectorizer -> 単語頻出数算出に使用
matplotlib -> データ可視化(円グラフ)に使用
▼その他ツール
conda 4.3.16 ->パッケージ管理に使用
spyder 3.1.2 -> IDE
jupyter notebook 4.3.1 -> 対話式にコードを実行し、グラフ等も即時に可視確認できる
最初に結果です!
▼アシアルブログ頻出単語ランキング
・処理概要
下記ソースコードにも記載してあるのですが、アシアルブログのTOPページ(http://blog.asial.co.jp/)から「/[0-9]{4}」形式のリンクのみをスクレイピングで抽出し、ブログの詳細記事をクローリングして全てのブログ記事からBODYタグを抽出して、さらにそこから全角の一般名詞のみを抽出してます。
・考察
最終的にTF解析で上位10件を円グラフで頻出単語ランキングとして表示させています。
さすがOnsenUIの効果でしょうか。「温泉」が1位の143個でした!
2位の「アプリケーション」は汎用的すぎて弾いても良かったですね^^;
コンポーネントは最近は宇都宮さんのブログでvuejsの「コンポーネント」が結構目立ったのだと思います。
それ以降の単語は、汎用的と言いますか、あまり参考にならなそうなので、こちらも弾いていいかもですね!
▼ソースコード
・asialblog_ranking.pyで下記を保存
・TTF_PATHは人それぞれ場所が異なります。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Pythonでアシアルブログの単語ランキングを算出する
[前提]アシアルブログの記事詳細はhttp://blog.asial.co.jp/[0-9]{4}の形式になっている
1. TOPサイトから上記形式のhrefを全て抽出する
2. 1で取得したURLを全てクローリングし、BODYタグの全ての全角文字を抽出する
3. 2で抽出した全角文字を形態素解析に掛けて、一般名詞のみを抽出する
4. 3で取得した一般名詞をTF解析で単語頻出度を算出する
5. 最終的にmatplotlibで円グラフに上位10件を表示する
Created on Wed Apr 12 11:38:42 2017
@author: eguchi
"""
import unicodedata
import requests as req
from bs4 import BeautifulSoup as bs
import MeCab as mc
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager
import pylab
import re
# 定数(と言って良いのかは微妙ですが)
BASE_URL = 'http://blog.asial.co.jp/'
EXCLUDE_STR_LIST = ['年月日', '年月', 'アシ', 'アシアル', 'アル', '情報', '株式会社', '