Python

PythonのMeCabで形態素解析!文書の類似度を算出してみよう!

こんにちは!デジタルマーケターのウマたん(@statistics1012)です!

コピペチェックなどで、ある文書と文書の類似度をチェックしたい!
また、プロフィールのテキスト情報などからマッチ率をチェックしたい時!

そんな時に有用なのがMeCab(メカブ)という形態素解析用のライブラリです!

PythonでもRでもMeCabを動かすことが可能ですが、今回はPythonで実装していきます!

ちなみにMeCab(メカブ)の由来は作者がメカブを好きだったから!

今回PythonとMeCabを使って実現したいこと

まず、今回実現したいことをまとめておきましょう!

Step1:URLからテキスト情報をスクレイピング

Step2:それらをMeCabで形態素解析。名詞だけ抽出

Step3:名詞の出現頻度からTF-IDF/COS類似度を算出。テキスト情報のマッチ度を測る

テキスト情報はベタ打ちでもいいのですが、せっかくだからネット上のテキストデータをスクレイピングによって抽出できるように設定します。

Pythonでスクレイピングを行う方法に関しては以下の記事をご覧ください!

Pythonのbeautifulsoupでスクレイピングを実装してみよう!こんにちは! 消費財メーカーでデジタルマーケティングに携わっているウマたん(@statistics1012)です! Webサ...

MeCabを使う前準備

それでは、早速MeCabを使う環境を整えていきましょう!PythonでMeCabを使う場合は少々前準備が必要です。

以下のURLから「mecab-0.996-64.exe」をダウンロードしてください。

https://github.com/ikegami-yukino/mecab/releases/tag/v0.996

ダウンロードした後は、PythonでMeCabが使えるようにバインディングしていきます。

以下の記事で詳しくまとめられているので参考にしてみてください。

ここまで来たらMeCabを使う準備が整いました。

PythonでMeCabを実装

早速実装してみます。

以下がコードになります。

Step1:URLからテキスト情報をスクレイピング

関数のgeturlを定義することで、Pythonの「BeautifulSoup」「requests」というライブラリからpタグに囲まれたテキスト情報を抽出します。

先ほども紹介しましたが、詳しくは以下の記事にまとめているのでご覧ください!

Pythonのbeautifulsoupでスクレイピングを実装してみよう!こんにちは! 消費財メーカーでデジタルマーケティングに携わっているウマたん(@statistics1012)です! Webサ...

Step2:それらをMeCabで形態素解析。名詞だけ抽出

mplgという関数部分がMeCabの実装部分になります。

以下の部分でMeCabが文章を形態素分解してくれます。

試しにこのtext部分に
統計ラボはデータサイエンスとWebマーケティングをまとめたサイトです
と入れてみます。

そうすると以下のような結果が返ってきます。素晴らしい!

返ってきた結果に対して名詞だけ取り出したいため、.splitを使い2つ目の要素が名詞だったら配列に格納するような処理を行っています。

これによりテキスト情報を単語に分解し、名詞だけ格納した配列が出来上がりました。

Step3:名詞の出現頻度からTF-IDF/COS類似度を算出。テキスト情報のマッチ度を測る

続いてTF-IDFとCOS類似度を用いて、文書の類似度を算出していきます。

TfidfVectorizerを用いて文書における単語のスコアを数値化していきます。

TF-IDFは文書における単語の特徴を他の文書と比較して算出する指標であり、特徴的な単語の数値が高くなります。

token_pattern=u'(?u)\\b\\w+\\b’では、1文字の単語も単語として処理するように設定しています。

COS類似度では、2つのベクトルの内積をそれぞれのL2ノルムで割る計算を行っています。

PythonのMeCabで形態素解析 まとめ

Pythonを用いてスクレイピングを行い、MeCabにより形態素解析、そして最後にTF-IDFとCOS類似度を使って文書の類似度を算出してみました。

スクレイピング・MeCabが利用できると様々な分野に応用が効きそうですね!

Pythonはデータ解析やスクレイピングそしてWebアプリケーション作成まで出来る幅広いプログラミング言語!

以下の記事で初心者がPythonを習得する方法についてまとめていますのでよければご覧ください!

【入門】初心者が短期間でPythonを習得できるようになる勉強法!こんにちは!デジタルマーケターのウマたん(@statistics1012)です。 大学院時代は統計学を専攻していたのですが、ほぼR...