Python

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

PC
ウマたん
ウマたん
本記事では、形態素解析器であるMeCabとPythonを用いて形態素解析を行い最終的に文章の類似度を算出していきます。非常に簡単に実装できるかつ応用度が高いです!自然言語処理の世界に入るきっかけにしてくださいね!

こんにちは!

データサイエンティストのウマたん(@statistics1012)です!

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

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

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

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

ウマたん
ウマたん
Pythonの勉強は以下の記事をチェック!
【独学入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【統計ラボ】の本記事では、Pythonを効率よく独学で習得する勉強法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...

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

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

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

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

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

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

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

PC
【初心者向け】Pythonのbeautifulsoupでスクレイピングを実装してみよう!当サイト【統計ラボ】の本記事では、初心者向けにPythonでスクレイピングを行う上での注意点や実装方法そして勉強方法についてまとめていきます!スクレイピングは比較的カンタンに実装できますが、奥が深く他の知識と組み合わせることで高いシナジーが見込める分野です。...

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タグに囲まれたテキスト情報を抽出します。

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

PC
【初心者向け】Pythonのbeautifulsoupでスクレイピングを実装してみよう!当サイト【統計ラボ】の本記事では、初心者向けにPythonでスクレイピングを行う上での注意点や実装方法そして勉強方法についてまとめていきます!スクレイピングは比較的カンタンに実装できますが、奥が深く他の知識と組み合わせることで高いシナジーが見込める分野です。...

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アプリケーション作成まで出来る幅広いプログラミング言語!

スクレイピングとWebアプリケーション開発に関しては以下の記事でまとめています!

PC
【初心者向け】Pythonのbeautifulsoupでスクレイピングを実装してみよう!当サイト【統計ラボ】の本記事では、初心者向けにPythonでスクレイピングを行う上での注意点や実装方法そして勉強方法についてまとめていきます!スクレイピングは比較的カンタンに実装できますが、奥が深く他の知識と組み合わせることで高いシナジーが見込める分野です。...
macとsurface
PythonのFlaskで簡単なWebアプリケーションを作ってみよう!当サイト【統計ラボ】の本記事では、Pythonの軽量WebアプリケーションフレームワークであるFlaskを使って簡単なWebアプリケーションを作成していきたいと思います。Pythonを開発言語としても使えるようになると、幅が広がりますよー!...

また自然言語処理についてもっと詳しく知りたい方はぜひ以下の記事をチェックしてみてください!

自然言語処理
【入門】自然言語処理でできることをいくつかPythonで実装してみる!当サイト【統計ラボ】の本記事では、自然言語処理についてPythonでの実装と合わせてまとめていきたいと思います。実際にテキスト情報を形態素解析で分解してテキスト類似度を計算したり、空欄を予測したりすることができるんです!...

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

【独学入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【統計ラボ】の本記事では、Pythonを効率よく独学で習得する勉強法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...
Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!