Python初心者(プログラミング未経験者含む)が1時間以内に何らかの文章(複数可)をPythonのjanomeで形態素解析する方法、解析した語彙の出現頻度を調べる方法を紹介します。

準備するもの:
パソコン、形態素解析したい文章・語彙の出現頻度を調べたい文章

環境:
windows7,Python3.6.2, janome0.3.3
mac等でできなかったらすいません。

活用例:
メルマガやブログのタイトル・本文に含まれるワードの出現頻度調査(効果が高い・低いメルマガ・ブログはどんなワードが多く含まれているか)

※今回、エクセルから文章を読み取って形態素解析します。エクセルは1列目しか使用しませんが、複数行の登録も可能です。文章の量にもよりますが、2万行くらいいけます。(1列目にばーっと下へ文章が並ぶイメージ。一文でも可)

1列目(1行目から文章をいれてください)
文章1
文章2
文章3
文章4
....

Pythonインストール〜形態素解析・語彙出現ランキング作成まで

  • "Python"をインストール
  • 形態素解析ライブラリ"janome"インストール
  • エクセル読み込みライブラリ"xlrd"インストール
  • エクセル書き込みライブラリ"xlsxwriter"インストール
  • 下記"sample.py"を適当なフォルダに配置
  • "sample.py"の中身をカスタマイズ
  • sample.pyをコマンドプロンプトで実行
    • エクセル読み込み
    • 読み込んだファイルを形態素解析
    • 解析結果をエクセルに出力
    • 解析結果を元に、語彙の出現頻度をランキング形式でエクセルに出力
  • 完成

"Python"をインストール

https://www.python.org/downloads/
上記リンクから適当にPythonの最新版をインストールしてください。
やり方はこちらの記事に書いてあります。(macもいけそうな気がします)
Pythonをインストールする(for Windows)

Pythonバージョン確認

インストールが終わったらPythonのバージョンを確認してください
コマンドプロンプトを開いて、python -V と入力してEnter
※コマンドプロンプトの開き方...スタートメニュー>すべてのプログラム>アクセサリ
バージョン名がでたらインストール成功しています!

形態素解析ライブラリ"janome"インストール

コマンドプロンプトを開いて、
pip install janomeと実行

もっとjanomeについて知りたい方はこちら↓
http://ailaby.com/janome/
http://mocobeta.github.io/janome/

エクセル読み込みライブラリ"xlrd"インストール

コマンドプロンプトを開いて、
pip install xlrdと実行

もっとxlrdについて知りたい方はこちら↓
http://www.python-izm.com/contents/external/xlrd.shtml

エクセル書き込みライブラリ"xlsxwriter"インストール

コマンドプロンプトを開いて、
pip install xlsxwriterと実行

もっとxlsxwriterについて知りたい方はこちら↓

http://qiita.com/yubessy/items/a39a565cdc2c5872cce9
http://xlsxwriter.readthedocs.io/getting_started.html

下記"sample.py"を適当なフォルダに配置

下記サンプルプログラムの概要:
・エクセルから文章を読み取り形態素解析
・名詞の語彙を抽出
・文章を名詞ごとに分解したデータをエクセルにエクスポート
・語彙の出現回数が多い順にランキング化し、その順番で「語彙・出現回数」をエクセルにエクスポート

sample.py
# -*- coding: utf-8 -*-
import xlrd
import xlsxwriter
from collections import Counter
from itertools import chain
from janome.tokenizer import Tokenizer

## Excelファイル読み込み
# 例)C:\Users\〜\Documents\〜
# ファイル名の前に'r'を入れてください。理由:rを使うとraw文字列として扱われ、エスケープシーケンスとして処理されなくなります。(わからなければスルーしてください)
book = xlrd.open_workbook(r"エクセルファイルのパスを入れてください")

# エクセルシートの1枚目を変数に格納
sheet_1 = book.sheet_by_index(0)
# 1列目のみ読み取るのでcol(columnの略)に0を格納(0が1番目を表す為)
col = 0
data = []
each_data = []
# 1列目に記載されているすべてのセルを1行目から順に読み取ります
for row in range(sheet_1.nrows):
    val = sheet_1.cell(row, col).value
    t = Tokenizer()
    tokens = t.tokenize(val)
    for token in tokens:
        partOfSpeech = token.part_of_speech.split(',')[0]
        # 今回抽出するのは名詞だけとします。(もちろん他の品詞を追加、変更、除外可能です。)
        if partOfSpeech == u'名詞':
            each_data.append(token.surface) # token.surfaceは表層形(語彙)です。詳しくはこちら...http://ailaby.com/janome/
        # すべての形態素を含ませたいのであればif構文を外し、each_data.append(token.surface)のみ記載してください。
    data.append(each_data)
    each_data = []

## 文章を形態素毎に分割したデータをいれるエクセルファイル作成(今回は名詞のみ)
# 例)C:\Users\〜\Documents\〜
# パスの前のrは省略しないでください
data_book = xlsxwriter.Workbook(r"作成するエクセルファイルのパス")
# シート作成・変数定義
data_sheet = data_book.add_worksheet('data')
for row in range(len(data)):
    for i in range(len(data[row])):
        data_sheet.write(row, i, data[row][i])
# エクセルを保存
data_book.close()

#すべての語彙を同じ配列に格納
chain_data = list(chain.from_iterable(data))
c = Counter(chain_data)

result_ranking = c.most_common(100) # 出現頻度100位までを変数に格納
# 語彙出現ランキングを記述するエクセルを作成(パスは上記参考に適当にいれてください)
result_book = xlsxwriter.Workbook(r"エクセルファイルのパスをいれてください")
# resultという名前のシートを作ります
result_sheet = result_book.add_worksheet('result')
for row in range(len(result_ranking)):
    for i in range(len(result_ranking[row])):
        result_sheet.write(row, i, result_ranking[row][i])
# エクセルを保存
result_book.close()

"sample.py"の中身をカスタマイズ

主にいじる箇所は3つです。
1、読み込むエクセルファイルのパスを追記
windowsの場合、ファイルのパスが"C:\Users(仮)\〜\Documents(仮)\〜"というような形だとおもいますので、それを追記します。
(ファイルのパスがわからない場合、ファイル名にマウスを当て、shift + 右クリックして、パスとしてコピーをクリックすればファイルのパスを取得できます。)
2、書き出すエクセルファイル(形態素解析)のパスを追記
3、書き出すエクセルファイル(語彙出現ランキング)のパスを追記

(4)形態素解析の中身まで変えたい場合

python
for token in tokens:
        partOfSpeech = token.part_of_speech.split(',')[0]
        # 今回抽出するのは名詞だけとします。(もちろん他の品詞を追加、変更、除外可能です。)
        if partOfSpeech == u'名詞':
            each_data.append(token.surface) # token.surfaceは表層形です(詳しくはこちら...http://ailaby.com/janome/)

ここらへんの中身を変えてください。現状は語彙を名詞で絞り、且つ表層形(token.surface)のみデータを抽出しています。※必要に応じて、エクセルの読み取り方法、エクセルの書き出し方法も整えてください。

"sample.py"をコマンドプロンプトで実行

sample.pyが置いてあるフォルダまで、コマンドプロンプトで移動します。
...
移動!???となった方、移動の方法やその他諸々下記の通り紹介します。

  • Windowsの方

cd,dirというコマンドを使えば、とりあえずフォルダまでたどり着けるとおもいます。
http://www.atmarkit.co.jp/ait/articles/1502/13/news147.html
https://www.k-tanaka.net/cmd/cd.php
https://www.k-tanaka.net/cmd/dir.php

  • Mac(linux)の方

pwd,cd,lsというコマンドを使えば、とりあえずフォルダまでたどり着けるとおもいます。
https://do-zan.com/mac-terminal-command-shortcut/

たどり着きましたら、python sample.pyプログラム実行
解析したい文章量に応じて実行時間が変わります。(
1文約30文字で10000行くらいまでは約3分でいけました。)

完成

お疲れ様でした!
プログラムで作成したエクセルを開いてみてください。開けなかったりエラーが起きていたらすいません。。

まとめ

お役に立てましたでしょうか。ちなみに私はこれ以上Python無知です。
プログラムの内容はもしわからなければ調べてみてください!
※私は現在プログラマではなくwebディレクターです。コードはたどたどしく書きました。
閲覧いただきありがとうございました!!

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.