Edited at

Python初心者が1時間以内にjanomeで形態素解析できた方法

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行目から順に読み取ります
t = Tokenizer()
for row in range(sheet_1.nrows):
val = sheet_1.cell(row, col).value
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無知です。

プログラムの内容はもしわからなければ調べてみてください!

閲覧いただきありがとうございました!!