指定した文章の中でどのような単語がたくさん使用されているかチェックするツールを作成します。
これには文章の中から単語を抽出するMeCabというライブラリーを使用します。
この機能により、例えば、自分のサイトやライバルサイトで数多く使用されているキーワードを調査することが可能になります。
なお、MeCabは既定ではインストールされていないので、自分でライブラリをインストールする必要があります。
ライブラリーのインストール
最初に、MeCabのインストールと簡単な動作確認を行なっていきましょう。
MeCab
MeCabのライブラリーをインストールするため、以下のコマンドを実行します。
!pip install mecab-python3
以下のように「Successfully installed」と表示されればインストールは成功です。
MeCabの辞書
MeCabの辞書をインストールするため、以下のコマンドを実行します。
!pip install unidic
以下のように「Successfully installed」と表示されればインストールは成功です。
辞書データ
辞書データを実行環境にダウンロードするため、以下のコマンドを実行します。
!python -m unidic download
以下のように「Downloaded UniDic」と表示されればインストールは成功です。
以上でMeCabを使用する準備ができました。
MeCabの動作確認
下記コードをColaboratoryに貼り付け、実際の動作を確認してください。
◆コード
import MeCab import unidic mecab = MeCab.Tagger() print(mecab.parse("私はPythonを学んでいます。"))
◆出力結果
私 代名詞,,,,,,ワタクシ,私-代名詞,私,ワタクシ,私,ワタクシ,和,"","","","","","",体,ワタクシ,ワタクシ,ワタクシ,ワタクシ,"0","","",11345327978324480,41274 は 助詞,係助詞,,,,,ハ,は,は,ワ,は,ワ,和,"","","","","","",係助,ハ,ハ,ハ,ハ,"","動詞%F2@0,名詞%F1,形容詞%F2@-1","",8059703733133824,29321 Python 名詞,普通名詞,一般,,, を 助詞,格助詞,,,,,ヲ,を,を,オ,を,オ,和,"","","","","","",格助,ヲ,ヲ,ヲ,ヲ,"","動詞%F2@0,名詞%F1,形容詞%F2@-1","",11381878116459008,41407 学ん 動詞,一般,,,五段-バ行,連用形-撥音便,マナブ,学ぶ,学ん,マナン,学ぶ,マナブ,和,"","","","","","",用,マナン,マナブ,マナン,マナブ,"0,2","C2","",9878570876936837,35938 で 助詞,接続助詞,,,,,テ,て,で,デ,で,デ,和,"","","","","","",接助,デ,デ,デ,デ,"","動詞%F1,形容詞%F2@-1","",6837330270888448,24874 い 動詞,非自立可能,,,上一段-ア行,連用形-一般,イル,居る,い,イ,いる,イル,和,"","","","","","",用,イ,イル,イ,イル,"0","C4","M4@1",710568013079169,2585 ます 助動詞,,,,助動詞-マス,終止形-一般,マス,ます,ます,マス,ます,マス,和,"","","","","","",助動,マス,マス,マス,マス,"","動詞%F4@1","",9812325267808939,35697 。 補助記号,句点,,,,,,。,。,,。,,記号,"","","","","","",補助,,,,,"","","",6880571302400,25 EOS
「私はPythonを学んでいます。」という文章が単語に分割され、またどのような品詞であるかという情報が共に表示されます。
このように表示されれば、MeCabの動作確認は成功です。
頻出キーワードの抽出
MeCabの動作確認が成功したところで、実際に指定した文章の中でどのような単語がたくさん使用されているかチェックするツールを作成していきます。
下記コードをColaboratoryに貼り付け、実際の動作を確認してください。
◆コード
import MeCab import unidic text = "私の好きな言語はPythonです。私はPythonの学習をしています。Pythonという言語の学習は少し難しいけど楽しいので好きです。" mecab = MeCab.Tagger() node = mecab.parseToNode(text) word_count = {} while node: word = node.surface if word in word_count.keys(): word_count[word] = word_count[word] + 1 else: word_count[word] = 1 node = node.next word_count_sorted = sorted(word_count.items(), key=lambda x:x[1], reverse=True) for word_list in word_count_sorted: print(word_list)
◆出力結果
('の', 4) ('は', 3) ('Python', 3) ('。', 3) ('', 2) ('私', 2) ('好き', 2) ('です', 2) ('学習', 2) ('な', 1) ('言語', 1) ('を', 1) ('し', 1) ('て', 1) ('い', 1) ('ます', 1) ('少し', 1) ('難しい', 1) ('けど', 1) ('楽しい', 1) ('で', 1)
機能の説明
1.
import MeCab import unidic
ライブラリをインポートしています。
それぞれ、以下のような機能を持っています。
unidic:辞書を使用可能にします
2.
text = "私の好きな言語はPythonです。私はPythonの学習をしています。Pythonの学習は少し難しいけど楽しいので好きです。"
例となる文章を変数「text」に代入します。
3.
mecabTagger = MeCab.Tagger()
MeCabで使用する辞書をデフォルトで指定し、MeCabのインスタンスを用意します。
4.
node = mecab.parseToNode(text)
parseToNode()というメソッドで、最初のnodeを取得します。
nodeのsurfaceには単語が、featureには品詞などの特徴が入っています。
例えば、「私」という単語であれば以下のようになります。
node.surface = “私”
node.feature = “代名詞,*,*,*,*,*,ワタクシ,私-代名詞,私,ワタクシ,私,ワタクシ,和,*,*,*,*,*,*,体,ワタクシ,ワタクシ,ワタクシ,ワタクシ,0,*,*,11345327978324480,41274”
なお、後で説明するnode.nextをすることによって次のnodeに移ることができます。
5.
word_count = {}
単語の内容を個数を入れる辞書型の変数を用意します。
6.
while node:
nodeが存在する間(単語が存在する間)、繰り返し処理を実行します。
7.
word = node.surface
nodeより単語を取得し、変数「word」に代入します。
8.
if word in word_count.keys(): word_count[word] = word_count[word] + 1 else: word_count[word] = 1
辞書型変数の「word_count」に、その単語があれば、数をインクリメントして、なければ新しいkeyを用意します。
9.
node = node.next
次のnodeを処理するために、nextメソッドを使用します。
10.
word_count_sorted = sorted(word_count.items(), key=lambda x:x[1], reverse=True)
辞書型変数「word_count」の数を降順に並び替えて、リスト型変数「word_count_sorted 」に代入してます。
※ここはあまり深く理解しなくても大丈夫です。辞書型変数の並び替えを行っているということだけわかればOKです。
11.
for word_list in word_count_sorted: print(word_list)
word_count_sortedの内容を表示します。
カスタマイズ
1.
繰り返し処理の中で、単語と品詞を表示するプログラムに変更します。
2.
品詞が名詞の単語だけ辞書型変数に代入するようにします。