LoginSignup
6
2

More than 5 years have passed since last update.

太宰治で形態素解析やってみた

Last updated at Posted at 2019-01-03

動機

今回の記事執筆の動機としては3つ挙げられる。
1.正月休み暇だった。
2.最近買ったノートPCと戯れたかった。
3.一昔前に形態素解析というワードが流行って気になっていた。

形態素解析とは

wikipediaによくまとまっているのでまずは参照のこと。(https://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90)

日本語は数ある言語の中でも特に、単語や文節で区切りがなされずに文が記述されるために、同一の文章でも複数の解釈が可能となる場合があります。
例えば、「ここではきものを脱いでください。」は
①「ここでは着物を脱いでください」
②「ここで履物を脱いでください。」
の二通りに解釈できてしまうというのは有名な話です。
このように、文節の区切り方で複数の解釈が出てきてしまう日本語を、コンピュータが正しく意味を解するために如何にすればよいかと研究がなされてきたのがこの分野です…と思ってます。

題材

今回は文豪 太宰治さんの作品からいくつかピックアップしました。
(表記法:「作品名(発表時期)」)
なお、発表時期は(http://coconee.hatenablog.com/entry/2016/04/14/021702 )を参考にしました。

前期(1931~37年)

「彼は昔の彼ならず(1934.10)」「ダス・ゲマイネ(1935.10)」

中期(1938~45年)

「I can speak(1939.2)」「富嶽百景(1939.2~1939.3)」「女生徒(1939.4)」「走れメロス(1940.5)」

後期(1946年~)

「ヴィヨンの妻(1947.3)」「人間失格(1948.6-8)」

環境,方法

windows10 pro,python3.7.2,janome0.3.7

コード

やってること
1.青空文庫(太宰の作者ページ:https://www.aozora.gr.jp/index_pages/person35.html#sakuhin_list_1 )からダウンロードしたzipファイルに入ったtxtファイルを読み込む。
2.1行ずつ分解して名詞だけカウントする。
3.カウント数の多かった名詞をリストアップしてテキストファイルに追記書き込みする。

sumple.py
# -*- coding: utf-8 -*-
from collections import Counter
from janome.tokenizer import Tokenizer
import zipfile
import os.path, urllib.request as req
import codecs
# ZIPファイルをダウンロード
url = "https://www.aozora.gr.jp/cards/000035/files/1572_ruby_19823.zip"
local = "1572_ruby_19823.zip"
if not os.path.exists(local):
    print("ZIPファイルをダウンロード")
    req.urlretrieve(url, local)


# ZIPファイル内のテキストファイルを読む
zf = zipfile.ZipFile(local, 'r')
fp = zf.open('i_can_speak.txt', 'r')
bindata = fp.read()
txt = bindata.decode('shift_jis')

# 形態素解析オブジェクトの生成
t = Tokenizer()
data =[]
each_data =[]
# テキストを一行ずつ処理
word_dic = {}
lines = txt.split("\r\n")
for line in lines:
    malist = t.tokenize(line)
    for w in malist:
        word = w.surface
        ps = w.part_of_speech # 品詞
        if ps.find('名詞') < 0: continue # 名詞だけをカウントする
        if not word in word_dic:
            word_dic[word] = 0
        word_dic[word] += 1
# 頻出単語を追記
    keys = sorted(word_dic.items(), key=lambda x:x[1], reverse=True)
for word, cnt in keys[:50]:
    print("{0}({1}) ".format(word, cnt), end="",file=codecs.open('result.txt','a','utf-8'))

結果

先程の作品の発表年順に見てみよう。

result.txt

彼は昔の彼ならず(1934.10)初期
の(351) 僕(277) 青(136) 扇(136) こと(86) よう(84) もの(66) それ(62) 彼(41) 私(34) これ(33) 屋(28) マダム(28) 気(27) 家(25) 三(25) 十(24) ひと(24) 顔(24) いま(24) お(24) 二(22) とき(22) 日(22) あなた(22) ん(21) 女(20) ほう(20) 何(20) うち(20) 一(19) ほんとう(19) 眼(18) 玄関(18) 男(17) そう(17) たち(17) 屋根(16) さ(16) 君(15) わけ(15) 天才(15) 庭(15) 五(14) 畳(14) 部屋(14) なん(13) 煙草(13) 縁側(13) どこ(13)
ダス・ゲマイネ(1935.10)
の(159) 私(125) 僕(121) 馬場(79) よう(77) こと(66) 君(57) それ(40) もの(40) 一(34) ひと(33) 佐竹(31) ん(30) そう(27) 太宰(25) 彼(24) 日(23) 眼(23) たち(21) 男(19) 顔(19) 小説(18) お(17) 佐野(17) 気(17) 菊(16) これ(16) 二(15) 言葉(15) 何(15) ここ(14) 好き(14) 次郎(14) あなた(14) 雑誌(14) あいつ(14) め(13) 甘酒(13) 十(12) いま(12) はじめ(12) 屋(12) とき(12) さ(12) なん(12) 海賊(12) 女(11) 三(11) ひとり(10) 自分(10)
I can speak(1939.2)中期
私(11) 声(6) よう(6) 工場(6) の(6) ん(6) .(6) 弟(6) I(5) can(5) speak(5) 日(5) 何(5) ひとり(5) 女工(5) さん(5) 月(5) 年(5) 夜(4) 東京(4) もの(4) 仕事(4) それ(4) 甲府(4) 姉さん(4) 顔(4) 入力(3) さ(3) 歌(3) 自分(3) 御坂(3) これ(3) 約束(3) 小路(3) お礼(3) 塀(3) あなた(3) 言葉(3) おら(3) English(3) 昭和(3) 文庫(3) -------------------------------------------------------(2) 例(2) 陋巷(2) ろう(2) 主(2) 地(2) 1(2) 字(2)
富嶽百景(1939.2~1939.3)
私(128) つて(93) 富士(84) の(59) さん(59) 娘(40) こと(36) やう(35) 二(33) お(33) 峠(32) 言(26) それ(24) 茶店(24) 三(23) 一(23) 思(23) 十(22) ぢ(21) 笑(20) さ(20) もの(20) 山(19) 人(18) 姿(18) やつ(17) 日(16) くら(15) つた(15) ひとり(15) 井伏(15) 氏(15) たち(15) ん(14) 階(14) 甲府(13) 御坂(13) とき(12) うち(11) 仕事(11) 度(10) はつ(10) 顔(10) ふたり(10) 花嫁(10) 百(9) 年(9) 五(9) ところ(9) 茶屋(9)
女生徒(1939.4)
の(244) 私(198) こと(130) お(109) お母さん(87) よう(76) 自分(68) 人(66) もの(57) さん(50) それ(47) 一(44) さ(39) とき(38) たち(38) 気持(37) 何(36) お父さん(33) 目(32) 気(30) 顔(29) いま(28) みたい(25) ん(25) 中(24) ところ(23) 女(21) そう(21) うち(19) ひと(19) これ(19) ひとり(19) 本(19) いや(18) 厭(18) 生活(18) 日(17) 二(17) 娘(17) 先生(17) たくさん(16) ちゃん(15) ばん(15) 姉さん(15) ジャピイ(15) 時(14) 花(14) 感じ(13) 眼鏡(13) カア(13)
走れメロス(1940.5)
の(79) メロス(77) 私(76) 人(30) おまえ(20) 王(19) 友(18) 事(15) セリヌンティウス(15) 日(13) よう(13) 君(13) 妹(12) 男(12) いま(12) 三(12) 市(11) それ(11) 何(11) 一(10) たち(10) ここ(10) もの(10) 村(9) 声(9) 時(9) 二(8) 年(8) お(8) わし(8) 陽(8) 者(7) 気(7) 心(7) こと(7) 群衆(7) 十(6) 結婚式(6) さま(6) 暴君(6) 為(6) 自分(6) 約束(6) 身代り(6) 間(6) 家(6) 濁流(6) 月(6) 疲労(5) 羊(5)
ヴィヨンの妻(1947.3)後期
私(163) お(100) の(99) 事(63) よう(57) さん(54) 人(48) 大谷(45) ん(42) 夫(41) ひと(41) 店(41) 二(39) それ(37) ども(37) 何(35) たち(31) もの(30) 坊や(27) ご(26) 奥さん(25) 十(25) 家(24) お客(24) 一(23) 三(23) 酒(22) ほう(20) 男(20) 日(20) 時(19) 顔(19) これ(18) お金(18) ひとり(17) 亭主(17) 円(16) 中(15) 女(15) 先生(15) いま(15) 五(15) 六(14) 畳(13) どこ(13) そう(13) 様子(12) 前(12) ここ(12) 声(11)
人間失格(1948.6-8)
自分(759) の(521) よう(230) 事(230) それ(227) もの(161) お(138) 人(109) 何(101) たち(100) ん(99) 一(96) 堀木(96) 人間(88) 女(84) 顔(79) ひと(77) これ(76) 二(68) 時(64) 家(63) 者(56) ヒラメ(55) 父(51) 気(49) さ(47) 酒(47) ほう(46) みたい(44) 気持(43) 中(42) 十(42) 道化(42) 罪(42) 私(41) そう(40) 三(38) ところ(38) 男(37) 謂(37) 所(37) 一つ(37) 言葉(36) 学校(35) ため(35) いま(35) 頃(34) 部屋(33) 恐怖(32) れい(32)

なにか分かることがあるだろうか。私がここからわかったことは一つしかない。太宰は晩年精神を病んだ。接頭語「お」の頻度からそれが分かる。(ex.「お道化」「お変人」~「人間失格」より抜粋~)後期にはずいぶん高い頻度で用いられている。(例外として「女生徒」では一人称が女性であり、謙譲の意味合いで使われていると推測される。)

まとめ

pythonをほとんど電卓程度にしか使ったことのなかった学生が少しやってみました、というだけなので、プログラムに関して詳しくは調べてください。
少しでもお役に立てたなら幸いです。

参考

Janome v0.3 documentation (ja)
http://mocobeta.github.io/janome/

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2