LoginSignup
25
29

More than 5 years have passed since last update.

mecab + NEologd + python3 で形態素解析

Posted at

形態素解析までのセットアップ

mecab本体と辞書のインストール

mecab本体

brew install mecab

辞書

brew install mecab-ipadic

追加辞書のインストール

https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
流行りの言葉もある程度認識してくれるのでこちらを使うほうが吉

git clone https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
sudo bin/install-mecab-ipadic-neologd

ちょっと待つとこんなの出てくる

[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.

→yes

mecab-pythonのインストール

pip3 install mecab-python

これで準備完了

いよいよpythonで形態素解析

今回は品詞を取得します
適当に一文だけ試してもよいのですが、せっかく形態素解析するなら文章のほうがいいってことで青空文庫から適当にデータをとってきます
今回は太宰治「人間失格」にしてみました
https://www.aozora.gr.jp/cards/000035/card301.html
上記リンクからテキストファイル(ルビあり)をダウンロードし、ningen_shikkaku.txtを以下のtest.pyと同じディレクトリに保存してください

test.py
import Mecab
import re

bindata = open('ningen_shikkaku.txt', 'rb').read()
textdata = bindata.decode('shift_jis')

# 青空文庫のための固有処理
textdata = re.split(r'\-{5,}', textdata)[2]
textdata = re.split(r'底本:', textdata)[0]
textdata = textdata.strip()

# 人によっては以下のパスは異なるので確認してね
mecab = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
mecab.parse('')  # バグ対処
results = []
lines = textdata.split("\r\n")
for line in lines:
    r = []
    # 学習に使わない表現の削除処理
    s = line
    s = s.replace("|", "")
    s = re.sub(r'《.+?》', "", s)
    s = re.sub(r'[.+?]', '', s)
    # Mecab
    node = mecab.parseToNode(s)
    while node:
        # 単語を取得
        if node.feature.split(",")[6] == '*':
            word = node.surface
        else:
            word = node.feature.split(",")[6]

        # 品詞を取得
        part = node.feature.split(",")[0]

        if part in ["名詞", "形容詞", "動詞", "記号"]:
            r.append(word)
        node = node.next
    rl = (" ".join(r)).strip()
    results.append(rl)

# write to a file
w_file = "ningen_result.txt"
with open(w_file, 'w', encoding='utf-8') as wf:
    wf.write("\n".join(results))

ちょっとはしがきの部分だけ比較してみます

ningen_shikkaku.txt(原文)
[#3字下げ]はしがき[#「はしがき」は大見出し]


 私は、その男の写真を三葉、見たことがある。
 一葉は、その男の、幼年時代、とでも言うべきであろうか、十歳前後かと推定される頃の写真であって、その子供が大勢の女のひとに取りかこまれ、(それは、その子供の姉たち、妹たち、それから、従姉妹《いとこ》たちかと想像される)庭園の池のほとりに、荒い縞の袴《はかま》をはいて立ち、首を三十度ほど左に傾け、醜く笑っている写真である。醜く? けれども、鈍い人たち(つまり、美醜などに関心を持たぬ人たち)は、面白くも何とも無いような顔をして、
「可愛い坊ちゃんですね」
 といい加減なお世辞を言っても、まんざら空《から》お世辞に聞えないくらいの、謂《い》わば通俗の「可愛らしさ」みたいな影もその子供の笑顔に無いわけではないのだが、しかし、いささかでも、美醜に就いての訓練を経て来たひとなら、ひとめ見てすぐ、
「なんて、いやな子供だ」
 と頗《すこぶ》る不快そうに呟《つぶや》き、毛虫でも払いのける時のような手つきで、その写真をほうり投げるかも知れない。
 まったく、その子供の笑顔は、よく見れば見るほど、何とも知れず、イヤな薄気味悪いものが感ぜられて来る。どだい、それは、笑顔でない。この子は、少しも笑ってはいないのだ。その証拠には、この子は、両方のこぶしを固く握って立っている。人間は、こぶしを固く握りながら笑えるものでは無いのである。猿だ。猿の笑顔だ。ただ、顔に醜い皺《しわ》を寄せているだけなのである。「皺くちゃ坊ちゃん」とでも言いたくなるくらいの、まことに奇妙な、そうして、どこかけがらわしく、へんにひとをムカムカさせる表情の写真であった。私はこれまで、こんな不思議な表情の子供を見た事が、いちども無かった。
 第二葉の写真の顔は、これはまた、びっくりするくらいひどく変貌《へんぼう》していた。学生の姿である。高等学校時代の写真か、大学時代の写真か、はっきりしないけれども、とにかく、おそろしく美貌の学生である。しかし、これもまた、不思議にも、生きている人間の感じはしなかった。学生服を着て、胸のポケットから白いハンケチを覗《のぞ》かせ、籐椅子《とういす》に腰かけて足を組み、そうして、やはり、笑っている。こんどの笑顔は、皺くちゃの猿の笑いでなく、かなり巧みな微笑になってはいるが、しかし、人間の笑いと、どこやら違う。血の重さ、とでも言おうか、生命《いのち》の渋さ、とでも言おうか、そのような充実感は少しも無く、それこそ、鳥のようではなく、羽毛のように軽く、ただ白紙一枚、そうして、笑っている。つまり、一から十まで造り物の感じなのである。キザと言っても足りない。軽薄と言っても足りない。ニヤケと言っても足りない。おしゃれと言っても、もちろん足りない。しかも、よく見ていると、やはりこの美貌の学生にも、どこか怪談じみた気味悪いものが感ぜられて来るのである。私はこれまで、こんな不思議な美貌の青年を見た事が、いちども無かった。
 もう一葉の写真は、最も奇怪なものである。まるでもう、としの頃がわからない。頭はいくぶん白髪のようである。それが、ひどく汚い部屋(部屋の壁が三箇所ほど崩れ落ちているのが、その写真にハッキリ写っている)の片隅で、小さい火鉢に両手をかざし、こんどは笑っていない。どんな表情も無い。謂わば、坐って火鉢に両手をかざしながら、自然に死んでいるような、まことにいまわしい、不吉なにおいのする写真であった。奇怪なのは、それだけでない。その写真には、わりに顔が大きく写っていたので、私は、つくづくその顔の構造を調べる事が出来たのであるが、額は平凡、額の皺も平凡、眉も平凡、眼も平凡、鼻も口も顎《あご》も、ああ、この顔には表情が無いばかりか、印象さえ無い。特徴が無いのだ。たとえば、私がこの写真を見て、眼をつぶる。既に私はこの顔を忘れている。部屋の壁や、小さい火鉢は思い出す事が出来るけれども、その部屋の主人公の顔の印象は、すっと霧消して、どうしても、何としても思い出せない。画にならない顔である。漫画にも何もならない顔である。眼をひらく。あ、こんな顔だったのか、思い出した、というようなよろこびさえ無い。極端な言い方をすれば、眼をひらいてその写真を再び見ても、思い出せない。そうして、ただもう不愉快、イライラして、つい眼をそむけたくなる。
 所謂《いわゆる》「死相」というものにだって、もっと何か表情なり印象なりがあるものだろうに、人間のからだに駄馬の首でもくっつけたなら、こんな感じのものになるであろうか、とにかく、どこという事なく、見る者をして、ぞっとさせ、いやな気持にさせるのだ。私はこれまで、こんな不思議な男の顔を見た事が、やはり、いちども無かった。
[#改頁]
ningen_result.txt
端書


私 、 男 写真 三葉 、 見る こと ある 。
一葉 、 男 、 幼年時代 、 言う 、 十 歳 前後 推定 する れる 頃 写真 、 子供 大勢 女 ひと 取る かこむ れる 、 ( それ 、 子供 姉たち 、 妹 たち 、 、 従姉妹 たち 想像 する れる ) 庭園 池 ほとり 、 荒い 縞 袴 はく 立つ 、 首 三 十 度 左 傾ける 、 醜い 笑う いる 写真 。 醜い ?   、 鈍い 人達 ( 、 美醜 関心 持つ 人達 ) 、 面白い 無い よう 顔 する 、
「 可愛い 坊ちゃん 」
いい加減 お世辞 言う 、 空 お世辞 聞える 、 謂う 通俗 「 可愛らしい さ 」 みたい 影 子供 笑顔 無い わけ ない の 、 、 、 美醜 就く 訓練 経る 来る ひと 、 目見え 、
「 、 いや 子供 」
不快 そう 呟く 、 毛虫 払いのける 時 よう 手つき 、 写真 ほうる 投げる 知れる 。
、 子供 笑顔 、 見る 見る 、 知れる 、 イヤ 薄気味悪い もの 感ずる られる 来る 。 、 それ 、 笑顔 。 子 、 笑う いる の 。 証拠 、 子 、 両方 こぶし 固い 握る 立つ いる 。 人間 、 こぶし 固い 握る 笑える もの 無い の 。 猿 。 猿 笑顔 。 、 顔 醜い 皺 寄せる いる の 。 「 皺くちゃ 坊ちゃん 」 言う なる 、 奇妙 、 、 どこか けがらわしい 、 へん ひと むかむか する せる 表情 写真 。 私 これ 、 不思議 表情 子供 見る 事 、 いちど 無い 。
二 葉 写真 顔 、 これ 、 びっくり する ひどい 変貌 する いる 。 学生 姿 。 高等学校 時代 写真 、 大学時代 写真 、 する 、 、 美貌 学生 。 、 これ 、 不思議 、 生きる いる 人間 感じ する 。 学生服 着る 、 胸 ポケット 白い ハンケチ 覗く せる 、 籐椅子 腰かける 足 組む 、 、 、 笑う いる 。 こんど 笑顔 、 皺くちゃ 猿 笑い 、 巧み 微笑 なる 配流 、 、 人間 笑い 、 どこ 違う 。 血 重さ 、 言う 、 生命 渋さ 、 言う 、 よう 充実 感 無い 、 それ 、 鳥 よう 、 羽毛 よう 軽い 、 白紙 一 枚 、 、 笑う いる 。 、 一 十 造り 物 感じ の 。 キザ 言う 足りる 。 軽薄 言う 足りる 。 ニヤケ 言う 足りる 。 おしゃれ 言う 、 足りる 。 、 見る いる 、 美貌 学生 、 どこか 怪談 じみる 気味悪い もの 感ずる られる 来る の 。 私 これ 、 不思議 美貌 青年 見る 事 、 いちど 無い 。
一葉 写真 、 奇怪 もの 。 、 する 頃 わかる 。 頭 幾分 白髪 よう 。 それ 、 汚い 部屋 ( 部屋 壁 三 箇所 崩れ落ちる いる の 、 写真 写る いる ) 片隅 、 小さい 火鉢 両手 かざす 、 こんど 笑う いる 。 表情 無い 。 謂う 、 坐る 火鉢 両手 かざす 、 死ぬ いる よう 、 いまわしい 、 不吉 におい する 写真 。 奇怪 の 、 それ 。 写真 、 顔 大きい 写る いる 、 私 、 顔 構造 調べる 事 出来る の 、 額 平凡 、 額 皺 平凡 、 眉 平凡 、 眼 平凡 、 鼻 口 顎 、 、 顔 表情 無い 、 印象 無い 。 特徴 無い の 。 、 私 写真 見る 、 眼 つぶる 。 私 顔 忘れる いる 。 部屋 壁 、 小さい 火鉢 思い出す 事 出来る 、 部屋 主人公 顔 印象 、 霧 消す 、 、 何 する 思い出せる 。 画 なる 顔 。 漫画 何 なる 顔 。 眼 ひらく 。 、 顔 の 、 思い出す 、 よう よろこぶ 無い 。 極端 言い方 する 、 眼 ひらく 写真 見る 、 思い出せる 。 、 不愉快 、 する 、 眼 そむける なる 。
所謂 「 死相 」 もの 、 何 表情 印象 ある もの 、 人間 からだ 駄馬 首 くっつける 、 感じ もの なる 、 、 どこ 事 ない 、 見る 者 する 、 する せる 、 いや 気持 する せる の 。 私 これ 、 不思議 男 顔 見る 事 、 、 いちど 無い 。

無駄な部分が削られ形態素解析できていますね
これをもとに単語の頻度を数えたり、機械学習したりできます 時間があれば次はword2vecでこれらのデータを学習してみます

25
29
1

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
25
29