はじめに
この記事は、小説を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()メソッドで(要素, 出現回数)のタプルのリストにして出力
実行結果
Counter({'、': 4842, 'の': 2757, 'に': 1895, 'て': 1774, 'は': 1386, 'た': 1332, (省略)}
[('、', 4842), ('の', 2757), ('に', 1895), ('て', 1774), ('は', 1386), ('た', 1332), ('。', 1176), ('を', 1140), ('も', 906), ('と', 891)]
予想通り、記号や助詞が多くなってしまった
これではつまらないので、次は名詞や動詞だけに絞って調査してみたい
コメントを残す