LoginSignup
1
1

More than 3 years have passed since last update.

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

Posted at

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更新させていったらおもしろそう?
wordcloud.png

6.次のアクション

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

1
1
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
1
1