頻出キーワードの抽出

指定した文章の中でどのような単語がたくさん使用されているかチェックするツールを作成します。

これには文章の中から単語を抽出する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

ライブラリをインポートしています。

それぞれ、以下のような機能を持っています。

MeCab:文章の中から単語を抽出します
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.
繰り返し処理の中で、単語と品詞を表示するプログラムに変更します。

ヒント1を見る
単語は、node.featureから抽出できます。
ヒント2を見る
品詞は、下記コードで取得できます。

node.feature.split(',')[0]

2.
品詞が名詞の単語だけ辞書型変数に代入するようにします。

ヒント1を見る
カスタマイズ1で取得した品詞を条件にして、辞書型変数に代入するかどうか判断します。
タイトルとURLをコピーしました