Python Janomeで形態素解析。読んだ本、経理データ、ブログ記事、アンケート、プロフィールを分析。

  • URLをコピーしました!

Pythonは、自然言語処理、つまりテキストデータを分析することもできます。
その初歩として、形態素解析というものをやる方法をまとめてみました。

ex-it_08

Pythonでは、数字ではなく文字を分析できる

分析というと、数字での分析が思い浮かびます。
だからこそ、数値化や数字で表現することが求められることが多いのです。

とはいえ、数値化できるものには限りがあり、文章や文字からの分析は、ヒトがやっています。
しかし、AI(AIっぽいものを含む)だと、その分析が、できるのです。

AI時代のプログラミング言語といわれるPythonでも、文字の分析ができます。
たとえば、これまで読んだ本のタイトルのリストを準備し、

image

それをPythonで解析すると、たとえば、『会計と決算書がパズルを解くようにわかる本』だと、このようにまず細かく文章をわけます。
(こういうのを、形態素解析といいます)

image

分けたうえで、集計したり、判断したりするのです。
「分析」という言葉自体、分けるという意味がありますので、その最初のステップと言えるでしょう。

「決算書」が、「決算」と「書」にわかれてしまっていますが、これは自分で辞書をつくることにより現状でも解消はできます。

さらには、その単語ごとに分析し、集計してみました。

仕事 568
術 542
人 472
新書 454
ため 328
ビジネス 282
会社 277

という上位の結果です。
私がメディアメーカーというサイトで登録している、4829冊のタイトルを分析しました。

私のページはこちらです。

仕事のために読んでいる本が多いので、やはり、「仕事」が1位でした。2位の「術」とあわせて「仕事術」も多いかと。
9月9日(今日)開催するインプット入門セミナーの題材としても使っています。
こういったデータを、売上と結び付けてもおもしろいでしょうね。

以上のような集計を、プログラミング=Pythonを使えば、ささっと、数秒でできるわけです。
データが増えれば、多少は時間もかかるようになりますが、ヒトのようにミスの可能性は増えません。
データを集めるしくみをつくり、プログラミングし、実行するだけです。

Pythonでのjanomeを使った形態素解析

Pythonでテキスト分析(テキストマイニングともいいます)、形態素解析をする方法をまとめてみました。

Pythonの初期設定については、こちらを参考にしていただければ。
PythonとEXCELマクロ比較。Pythonの導入・設定【Windows・Mac両対応】 | EX-IT
PythonでExcelからデータ読込→サイトで交通費検索→Excelへデータ書込 | EX-IT

 

janomeで形態素解析

Pythonは、ライブラリといういわえる外部のアプリのようなものを使えます。
今回もjanomeというライブラリを使いました。

コマンドプロンプトやターミナルでインストールするなら、
pip install janome

上記の記事にあるPycharmでやるなら、[ファイル]→[設定]でインストールするか、

from janome.tokenizer import Tokenizer

と、本文を書けば、インストールすることもできます。

形態素解析のプログラムはこういったもので、たったこれだけです。

from janome.tokenizer import Tokenizer
# テキストファイル読込 エラーの場合 ,encoding='utf-8'
v_data = open(r'C:\Users\info0\Dropbox\0 INBOX\book7.txt').read()

# 形態素解析し、出力
for v_token in Tokenizer().tokenize(v_data):
  print(v_token)

 

from janome.tokenizer import Tokenizer

 

Janomeを読み込みます。

 

# テキストファイル読込 エラーの場合 ,encoding='utf-8'

v_data = open(r'C:\Users\info0\Dropbox\0 INBOX\book7.txt').read()

#で始まる行はコメントなので、自由です。

Vで始まる単語は、変数で任意のものです(最近はこう書くのがしっくりきています)

open(〇〇).read()で、テキストファイルを読み込みます。

ファイル名は、cからはじまるものを書きましょう。
’で囲み、最初にrをつけるのがポイントです(rはrowの意味で、これがないと、\を\にしなければいけなくなります)
〇=△という式なので、v_dataに開いたテキストファイルを入れるという意味です。

 

テキストファイルは、メモ帳で保存するならファイル形式を「utf-8」にし、txtの後に ,encoding=’utf-8’をつけます。
※そうしないとこのエラーがでます。

UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0xef in position 0: illegal multibyte sequence

 

いったんExcelに貼り付けて、テキスト(タブ区切り)で保存したほうが楽です。
この場合、,encoding=’utf-8’は入りません。

ex-it_13

# 形態素解析し、出力

for v_token in Tokenizer().tokenize(v_data):

print(v_token)

ここでは、v_tokenという変数を使って、Tokenizer().tokenize(○○)という処理をしています。
〇〇にはテキストファイルが入るので、さきほどのv_dataを入れるわけです。

 

次にprintで出力すると、v_token、つまり処理結果が出力されます。
forは繰り返しですので、繰り返しデータの数だけ処理してくれるわけです。
出てきた結果は、品詞やその活用形、読み方などのリスト。
こうやってかんたんに分析できるのは、janomeのおかげです。

image

Janome Anaryzer・Tokenfilterで形態素解析したものをフィルタリングし集計

Janomeには、Anaryzerという機能もあります。

これがあれば、フィルタリングや集計もできるのです。

v_data = open(r'C:\Users\info0\Dropbox\0 INBOX\book7.txt').read()
from janome.analyzer import Analyzer
from janome.tokenfilter import *

# 名詞でフィルタリングし、カウントする設定
v_filter = Analyzer(token_filters=[POSKeepFilter(['名詞']), TokenCountFilter(att='base_form')])

# 形態素解析し、カウントし、降順にソートして出力
for v_word, v_count in sorted(v_filter.analyze(v_data), key=lambda x: -x[1]):
    print(v_word, v_count)
v_data = open(r'C:\Users\info0\Dropbox\0 INBOX\book7.txt').read()


上記と同じようにテキストファイルを読み込み、v_dataとします。

 

from janome.analyzer import Analyzer
from janome.tokenfilter import *


janomeのAnalyzerとTokenFilterを読み込みます。

# 名詞でフィルタリングし、カウントする設定
v_filter = Analyzer(token_filters=[POSKeepFilter(['名詞']), TokenCountFilter(att='base_form')])


token_filters=[POSKeepFilter([‘名詞’])は、名詞でフィルタリング、
TokenCountFilter(att=’base_form’)]は、基本形でカウント
という意味です。
これらのオプションを付けて、Analyzerで処理しています。

# 形態素解析し、カウントし、降順にソートして出力
for v_word, v_count in sorted(v_filter.analyze(v_data), key=lambda x: -x[1]):
print(v_word, v_count)

処理した結果が出力されるのは、

単語 数

という形式です。

 

それぞれにv_word、v_countと名前を付けて、
v_filter.analyze(v_data)
でフィルタリングをかけたv_dataの分析結果を繰り返し出力しています。

 

sorted(〇〇, key=lambda x: -x[1]):
でついでに多い順にソートしています。
lambda(ラムダ)は、ラムダ関数というもので、そういうもんだと思っておいたほうがいいでしょう。

その後の関数のx: -x[1]で、1列目(0、1と数えるのでカウントした数)を多い順(-Xの-)でソートしています。

 

Pythonで分析してみたもの。経理データ、ブログ記事、アンケート、プロフィール

その他同様に、分析してました。

経理データ

私の経理データです。

独立から11年の経理、家計簿データが入っていて、36591。

 

image

「振込」が多いのは、「振込手数料」ではなく、「振り込まれた」ものです。

この辺の精度は改善余地があります。

会議、打ち合わせ、Kindle、Amazonあたりがやはり多いです。

スタバも…。

ブログ記事

ブログ記事すべてを分析していたのですが、それなりに時間がかかるので、過去5年間のアクセスが多い記事のタイトルを分析してみました。

Excel、仕事、方法、時間などが入っているとよく読まれているというデータです。

image

ブログ記事の分析が終わったので、追記します。
4797記事の本文を分析し、上位はこうなっていました。

「IT」がやはり多く、「仕事」も多いです。
「円」、「時間」も多く、「興味」「挑戦」が多いのも意外でした。
「事前」や「基礎」が多いのは私のポリシーと一致します。
「ゲーム」が意外と多いです……。

 

 

アンケート

セミナー後のアンケートは、フォームから入力していただき、データ化しています。
これも分析してみました。

 

「セミナーを知っていただいた理由」は、このとおり。
ブログやメルマガがメインです。

image

「なぜこのセミナーを選んだいただいたか」。

ここでは、私(井ノ上)だったから、他になかったからというのがうれしい答えなのです。
他と選んでどうこうもうれしいのですが、他にないようなものをやっているつもりですので。
「井ノ上」や「ブログ」が上位にあるのはうれしいことです。
「他」も60カウントありました。

image

プロフィール

私のブログのプロフィールも分析してみました。

ラン、スイム、バイクが上位・・・。
トライアスロンのレース歴を載せているからです。
税理士がようやく37個。

分析対象としてはあんまりですね。

image

テキストデータをいろいろ分析してみるとおもしろいです。

ぜひ、Pythonで書いてみていただければ。

アプリを使うより、自分で書いて動かしてみるのも大事です。


■編集後記

昨日は、午後から娘と2人だったので、動物園、ディズニーランド、アンパンマンミュージアムなどいろいろ候補がある中、アンパンマンミュージアムへ。
自宅近くから横浜までバスで行ってみました。
バスのほうが楽です。娘がおとなしくしてれば。
横浜駅からはいつも歩いています、10分ほど。
横浜のオービィ(屋内の動物園)も気になるのですが、評価があまりよくなく大混雑なのでやめました。

 

■昨日の1日1新

※詳細は→「1日1新」

アンパンマンミュージアム カーニバル
アンパンマンミュージアム うどん
横浜までバスで
アンパンマンミュージアム 風船

■昨日の娘日記

アンパンマンミュージアム、周辺のストアやレストランも充実していて、昨日はミュージアム(2人で3000円)に入らず楽しみました。
アンパンマンのブロック、風船をゲットし、うどんやパンも。
そして、念願のアンパンマンマント(好きでよくマントをつけてます)もゲットしました。
入場料以上にお金かかりましたが。

  • URLをコピーしました!