形態素解析はデスクトップの整理に役立つ?


1.はじめに

文字×機械学習に興味を持ってきて個人範囲の用途を考え、フォルダ整理に使えないかと思い検討を始めました。
今回の検討ではフォルダ構成&textの読みとり→mecab×wordcloudを行ってます。結果、特定の階層以下をwordcloudでまとめる事が出来ました。

2.分かったこと

形態素解析を使用すると頻出単語の傾向は分かるので、下記の条件化ではファイル整理が出来そうな感触をつかみました。
・text/csvもしくは意味のあるファイル名が全てにおいてつけられている。
・無法地帯のデスクトップになっており、人が時間をかけても管理できそうにない。
→各ファイルを用語が類似しているもの同士、同じフォルダに仕分ける。

ただし、管理されたPCでは実用性がなさそうと考え、検討一時STOPしました。(個人PC/共有PCともに、無法地帯なPCを見たことがない。。。)

3.参考文献

・形態素解析ライブラリmecabのインストール方法
https://qiita.com/menon/items/f041b7c46543f38f78f7
・mecab使用方法
https://qiita.com/iwashi-kun/items/18613dee168651ef8016
※なおインストールの環境設定が複雑?な事よりDocker記事も多くありチャレンジしましたが、mecabインストールがそれほど手間取らなかったりホスト-Docker間ファイル受け渡しが個人的に面倒であったので、今回はDockerは外しました。

4.ソース

・フォルダ階層とファイルの読み込み

import glob
import re
import os
import pandas as pd

#各層のfile名のみ抽出
list =[os.path.basename(p) for p in glob.glob('C:/Users/takat/Desktop/各種memo/**/*', recursive=True)
       if os.path.isfile(p)]

#textのみ、開いて文字列取得
for p in glob.glob('C:/Users/takat/Desktop/各種memo/**/*', recursive=True):
    if '.txt' in p:
        f = open(p,'r',encoding="utf-8",errors='ignore')
        list.insert(0,f.read()) # 1行毎にファイル終端まで全て読む(改行文字も含まれる)
        f.close()        
dflist = pd.DataFrame(list, index=range(len(list)),columns=["file"])

・mecabを使用(前述URLとほぼ同内容)

%matplotlib inline
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
import MeCab
import pandas as pd
#create mecab list
class_num = 0
word_classes = [u'名詞',u'動詞',u'形容詞',u'副詞',u'助詞',u'助動詞']

word_class = word_classes[class_num]
def create_mecab_list(text):
    mecab_list =[]
    mecab = MeCab.Tagger("-Ochasen")
    mecab.parse("")
 #   encoding = text.encode('utf-8')
    mecab.parse('')
    node = mecab.parseToNode(text)
    while node:
        if len(node.surface)>1:
            if node.feature.split(",")[0]==word_class:
                morpheme = node.surface
                mecab_list.append(morpheme)
        node = node.next
    return mecab_list
newstext = " ".join(create_mecab_list(",".join(dflist.file)))

・wordcloudを表示(前述URLとほぼ同内容)

wordcloud = WordCloud(
    max_font_size=140,
    relative_scaling=.5,
    width=1000,
    height=1000,
    stopwords = word_class,
    font_path='ipaexg.ttf'
    ).generate(newstext)
#fontファイルはipynbと同じ階層に保管もしくはパスを入れる
plt.figure(figsize=(10,10),dpi=200)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

5.出力

自分の頭の中が表示されているみたいで恥ずかしい。。。
LINEやメールをwordcloudにするもの作ったら爆死しそう。
せめて飲み会での会話をGCPとかで文字起こししながらwordcloud更新させていったらおもしろそう?

6.次のアクション

自動で整理したくなるようなPCを見つけるまで一旦検討STOP~