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"を適当なフォルダに配置
下記サンプルプログラムの概要:
・エクセルから文章を読み取り形態素解析
・名詞の語彙を抽出
・文章を名詞ごとに分解したデータをエクセルにエクスポート
・語彙の出現回数が多い順にランキング化し、その順番で「語彙・出現回数」をエクセルにエクスポート
# -*- 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)形態素解析の中身まで変えたい場合
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無知です。(2019年9月訂正) → 大手転職会社でwebディレクター兼システム開発 -> 某メディア会社でエンジニア -> 現在はドローンメーカーでエンジニアをしております。本記事はwebディレクターしてた時に書いたものです。(2022年現在)
プログラムの内容はもしわからなければ調べてみてください!
閲覧いただきありがとうございました!!