人間失格で最も出現回数の多い単語をCounterクラスを用いて求める|Python

0 アクセス

はじめに

この記事は、小説をmecab-python3で形態素解析して、結果をリストに格納する|Pythonの続き
今回はせっかくリストに格納したので、最頻出単語でも求めてみることにした

今回も青空文庫のテキストを利用する

底本:「人間失格」新潮文庫、新潮社
   1952(昭和27)年10月30日発行
   1985(昭和60)年1月30日100刷改版
初出:「展望」筑摩書房
   1948年(昭和23年)6〜8月号
入力:細渕真弓
校正:八巻美惠
1999年1月1日公開
2011年1月9日修正
青空文庫作成ファイル:
このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。

「図書カード:人間失格」 https://www.aozora.gr.jp/cards/000035/card301.html (最終閲覧日2024/12/12)

3次元リストに格納するまで

詳細は前回の記事を参考

import re
import MeCab

# ファイルの読み込み
filepath = 'r-ningen_shikkaku.txt'

with open(file=filepath, mode='r', encoding='shift_jis') as f:
    textlist = f.readlines()

# テキスト処理
pattern = re.compile(pattern=r'《.*?》|||[#.*?]')
textlist = [pattern.sub(repl='', string=s.strip()) for s in textlist] # リスト内包表記

# 形態素解析
tagger = MeCab.Tagger()
pattern = re.compile(pattern=r'\t|,')
result = []
for l in textlist:
    keitaiso = [s for s in tagger.parse(l).split('\n')if s] # 文を形態素解析して形態素ごとに分割
    keitaiso_info = [pattern.split(string=s) for s in keitaiso] # 各形態素を情報ごとに分割
    result.append(keitaiso_info)

単語だけのリストを作る

作成したresultには品詞情報などが含まれる
今回の目的に合わせて、単語だけのリストを作る(記号も含む)

昨日の記事→リスト内包表記とは|Pythonが活躍する
ネストされたリスト内包表記のおかげで、1行で処理が書けた

word_list = [w[0] for sentence in result for w in sentence if w[0] != "EOS"]
print(word_list[:10])

result(「人間失格」全体)→sentence(1文ずつ)→w(1形態素ずつ)
というふうに分割して見ればよい
また、文の終わりを表す記号”EOS”を除去している

はじめから単語リストだけが欲しければ、mecabの形態素解析ではなく、分かち書きを用いるという手段もあるが、ここでは紹介しない

実行結果

(全部表示すると長すぎるので、冒頭だけ)

collection.Counterクラスで頻出な単語順に並べる

collectionライブラリはPython標準で組み込まれているので、pip3 installの必要はない

import collections

c = collections.Counter(word_list)
print(c)
print(c.most_common()[:10])

collections.Counterクラスの引数にリストを入れればインスタンスが生成される

printすると、dict型で表示される
数値は出現回数

Counter.most_common()メソッドで(要素, 出現回数)のタプルのリストにして出力

実行結果

予想通り、記号や助詞が多くなってしまった

これではつまらないので、次は名詞や動詞だけに絞って調査してみたい

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です