pythonでテキスト解析用環境作って単語数の分析してみた。
いろんなところで使い古されているテキストマイニングなぞを今更ながらやってみようかと思って環境を構築してサンプルプログラムを作ってみました。これも先人が色々されているMecabでやってみたです。もはや時代遅れ以外の何物でもないです。
環境はHyper-V上にUbuntu18.04LTSServer立ててそこでpython3.6にて構築してみた。まぁずぶの素人が3日ほど格闘して何とか形になりましたよ。後はここから流行りのWordCloudとかに持って行ければ面白いんだろうなぁ。ひとまずは単語の出現数を降順で並べるだけまでを先に実装しました。といってもほとんどコピペです。
1.環境構築
そこまでてこずらないかと思いきや、Cabochaのインストールに手間取ったのと
aptに時間がかかりまくったのが鬼門でした。
◆参考サイト
https://qiita.com/furipon308/items/0d626f4a943c99fe32c6
http://tech.wonderpla.net/entry/2017/10/10/110000
https://mojitoba.com/2019/01/29/solve-error-installation-mecab-python3/
http://godan09.hatenablog.com/entry/2017/06/24/152201
https://qiita.com/Sylba2050/items/4aaff94769726b8c9581
https://www.trifields.jp/install-cabocha-in-ubuntu-1038
https://qiita.com/woody-kawagoe/items/09c0f89a55701bcf72eb
https://qiita.com/january108/items/85c80769ea870c190eaa
https://qiita.com/segavvy/items/2f686cfb0065c8cbe698
https://kakubari-ryusei.hatenablog.com/entry/2017/10/04/192447
https://qiita.com/Sak1361/items/47e9ec464ccc770cd65c
http://yut.hatenablog.com/entry/20130215/1360884220
https://datumstudio.jp/blog/python%E3%81%AB%E3%82%88%E3%82%8B%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%89%8D%E5%87%A6%E7%90%86%E5%82%99%E5%BF%98%E9%8C%B2
https://qiita.com/Anharu/items/b558ab64430ff1c09b89
◆実際の手順
(1)形態素解析エンジンmecab準備(aptにかなり時間がかかる)
・インストール
・動作確認
(2)係受け解析エンジンCaboChaインストール
・インストール
(3)後始末とライブラリインストール
(4)辞書追加
2.プログラム本文
環境構築よりこっちの方が大変でした。まぁコピペしかしていませんがwww
エラー処理は一切組み込まれていないので、なんかあるとスタックトレースはいて
落ちます。がまぁ個人利用ならいいのではないかと勝手に思っています。
いい加減にセンスが身についてほしいがセンスはないです。
同じディレクトリ内にテキストファイルかまして、プログラム名+ファイル名で
動きます。
例:$python3 samplemecab.py target.txt
◆参考サイト
https://qiita.com/Sak1361/items/2519f29af82ffe965652
https://qiita.com/kenmatsu4/items/9b6ac74f831443d29074
https://qiita.com/TkrUdagawa/items/aa483630b5ec7d337c9e
http://cadenza-lab.com/2018/02/04/textmining/
https://www.pc-koubou.jp/magazine/2646
https://akamist.com/blog/archives/2659
https://qiita.com/hatchinee/items/a904c1f8d732a4686c9d
https://blog.aidemy.net/entry/2018/05/11/162024
http://blog.aqutras.com/entry/2016/05/16/210000
https://qiita.com/yonedaco/items/27e1ad19132c9f1c9180
https://qiita.com/jabba/items/2ddd0b8fb855febb4d43
http://pynote.hatenablog.com/entry/python-wordcloud
https://qiita.com/yniji/items/3fac25c2ffa316990d0c
https://www.utali.io/entry/2016/10/03/001210
http://aifaruba.hatenablog.com/entry/2015/07/22/161700
https://ameblo.jp/javaee7/entry-12419180587.html
https://akamist.com/blog/archives/2656
http://loudspeaker.sakura.ne.jp/devblog/2015/04/29/extract-noun-with-python_mecab/
http://tech.innovation.co.jp/2017/07/28/mecab.html
http://mabonki0725.hatenablog.com/entry/2017/07/26/120333
https://hivecolor.com/id/86
https://gassandesu.hatenablog.com/entry/2019/01/08/003647
https://takaxtech.com/2018/11/03/article271/
https://hibiki-press.tech/learn_prog/python/sorted_sort/594
◆ソースコード
2019/4/8 CSVファイルを出力できるようにしてみました。これで結構使用用途が
広がるなぁ。
後はCabocha使ってもう少し高度に分析してみたいのと、それとWordCloudかなぁ。同義語解析とかその辺もやれると少し使用用途が広がるかもしれないかなぁ。
あ、辞書追加して精度上がるのか試してみたい。
Neologdは速攻追加、ピエール瀧とかでも出てくるし。精度も標準辞書より上なので必須ですね。後はユーザ辞書の作成が効率化できれば、かなりテキストマイニングが楽にできる様になるね。これはよいぞぉ。
環境はHyper-V上にUbuntu18.04LTSServer立ててそこでpython3.6にて構築してみた。まぁずぶの素人が3日ほど格闘して何とか形になりましたよ。後はここから流行りのWordCloudとかに持って行ければ面白いんだろうなぁ。ひとまずは単語の出現数を降順で並べるだけまでを先に実装しました。といってもほとんどコピペです。
1.環境構築
そこまでてこずらないかと思いきや、Cabochaのインストールに手間取ったのと
aptに時間がかかりまくったのが鬼門でした。
◆参考サイト
https://qiita.com/furipon308/items/0d626f4a943c99fe32c6
http://tech.wonderpla.net/entry/2017/10/10/110000
https://mojitoba.com/2019/01/29/solve-error-installation-mecab-python3/
http://godan09.hatenablog.com/entry/2017/06/24/152201
https://qiita.com/Sylba2050/items/4aaff94769726b8c9581
https://www.trifields.jp/install-cabocha-in-ubuntu-1038
https://qiita.com/woody-kawagoe/items/09c0f89a55701bcf72eb
https://qiita.com/january108/items/85c80769ea870c190eaa
https://qiita.com/segavvy/items/2f686cfb0065c8cbe698
https://kakubari-ryusei.hatenablog.com/entry/2017/10/04/192447
https://qiita.com/Sak1361/items/47e9ec464ccc770cd65c
http://yut.hatenablog.com/entry/20130215/1360884220
https://datumstudio.jp/blog/python%E3%81%AB%E3%82%88%E3%82%8B%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%89%8D%E5%87%A6%E7%90%86%E5%82%99%E5%BF%98%E9%8C%B2
https://qiita.com/Anharu/items/b558ab64430ff1c09b89
◆実際の手順
(1)形態素解析エンジンmecab準備(aptにかなり時間がかかる)
・インストール
$ sudo apt-get -y install mecab mecab-ipadic-utf8 libmecab-dev python-mecab $ sudo apt-get -y install python-pip python3-pip $ sudo apt -y install swig $ sudo pip3 install mecab-python3 --proxy=proxyaddr
・動作確認
$ vi mecab_sample.py ------------------------------------------------------- # coding: utf-8 import sys import MeCab mecab = MeCab.Tagger("-Ochasen") print(mecab.parse("すもももももももものうち")) ------------------------------------------------------- $ python3 mecab_sample.py すもも スモモ すもも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 の ノ の 助詞-連体化 うち ウチ うち 名詞-非自立-副詞可能 EOS
(2)係受け解析エンジンCaboChaインストール
・インストール
$ wget -O CRF++-0.58.tar.gz 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7QVR6VXJ5dWExSTQ' $ tar xvzf CRF++-0.58.tar.gz $ cd CRF++-0.58 $ vim node.cpp ------------------------------ #include#include #include
(3)後始末とライブラリインストール
$ cd $ rm -Rf CRF* $ rm -Rf cabocha* $ pip3 install neologdn $ pip3 install numpy $ pip3 install matplotlib $ pip3 install pandas $ pip3 install scipy $ pip3 install scikit_learn $ pip3 install tensorflow $ pip3 list $ pip3 install wordcloud $ sudo apt -y install fonts-ipaexfont $ pip3 install pillow
(4)辞書追加
$ cd $ git clone https://github.com/neologd/mecab-ipadic-neologd.git $ cd mecab-ipadic-neologd $ sudo bin/install-mecab-ipadic-neologd $ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
2.プログラム本文
環境構築よりこっちの方が大変でした。まぁコピペしかしていませんがwww
エラー処理は一切組み込まれていないので、なんかあるとスタックトレースはいて
落ちます。がまぁ個人利用ならいいのではないかと勝手に思っています。
いい加減にセンスが身についてほしいがセンスはないです。
同じディレクトリ内にテキストファイルかまして、プログラム名+ファイル名で
動きます。
例:$python3 samplemecab.py target.txt
◆参考サイト
https://qiita.com/Sak1361/items/2519f29af82ffe965652
https://qiita.com/kenmatsu4/items/9b6ac74f831443d29074
https://qiita.com/TkrUdagawa/items/aa483630b5ec7d337c9e
http://cadenza-lab.com/2018/02/04/textmining/
https://www.pc-koubou.jp/magazine/2646
https://akamist.com/blog/archives/2659
https://qiita.com/hatchinee/items/a904c1f8d732a4686c9d
https://blog.aidemy.net/entry/2018/05/11/162024
http://blog.aqutras.com/entry/2016/05/16/210000
https://qiita.com/yonedaco/items/27e1ad19132c9f1c9180
https://qiita.com/jabba/items/2ddd0b8fb855febb4d43
http://pynote.hatenablog.com/entry/python-wordcloud
https://qiita.com/yniji/items/3fac25c2ffa316990d0c
https://www.utali.io/entry/2016/10/03/001210
http://aifaruba.hatenablog.com/entry/2015/07/22/161700
https://ameblo.jp/javaee7/entry-12419180587.html
https://akamist.com/blog/archives/2656
http://loudspeaker.sakura.ne.jp/devblog/2015/04/29/extract-noun-with-python_mecab/
http://tech.innovation.co.jp/2017/07/28/mecab.html
http://mabonki0725.hatenablog.com/entry/2017/07/26/120333
https://hivecolor.com/id/86
https://gassandesu.hatenablog.com/entry/2019/01/08/003647
https://takaxtech.com/2018/11/03/article271/
https://hibiki-press.tech/learn_prog/python/sorted_sort/594
2019/4/8 CSVファイルを出力できるようにしてみました。これで結構使用用途が
広がるなぁ。
import collections import collections import csv from operator import itemgetter import sys import traceback import MeCab def word_tokenaize(doc): """ Mecabを使用して与えられたテキストを解析する 名詞のみを取り出してリストに格納する """ try: tagger = MeCab.Tagger(" -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd") tagger.parse("") node = tagger.parse(doc) results = [] lines=[] lines=node.split('\n') for item in lines: cw = item.split('\t')[0] if len(item) > 5: ps = item.split('\t')[1].split(',')[0] if ps == '名詞': results.append(cw) return results except Exception as e: t, v, tb = sys.exc_info() print(traceback.format_exception(t,v,tb)) print(traceback.format_tb(e.__traceback__)) #主処理(テキストファイル読込部分) def main(): """ 主処理 第1引数から入力ファイル、第2引数から出力ファイルを取得する word_tokenaizeで解析した単語数を降順で並べ替えて出力する。 """ try: o = [] r = [] csvlist = [] input_file = sys.argv[1] output_file = sys.argv[2] for line in open(input_file, 'r'): r = word_tokenaize(line) o.extend(r) result = collections.Counter(o) f = open(output_file, 'w') writer = csv.writer(f, lineterminator='\n') for word, cnt in sorted(result.items(),key=lambda x: x[1], reverse=True): writer.writerow([word,cnt]) print(word, cnt) f.close except Exception as e: t, v, tb = sys.exc_info() print(traceback.format_exception(t,v,tb)) print(traceback.format_tb(e.__traceback__)) if __name__ == '__main__': main()
後はCabocha使ってもう少し高度に分析してみたいのと、それとWordCloudかなぁ。同義語解析とかその辺もやれると少し使用用途が広がるかもしれないかなぁ。
あ、
Neologdは速攻追加、ピエール瀧とかでも出てくるし。精度も標準辞書より上なので必須ですね。後はユーザ辞書の作成が効率化できれば、かなりテキストマイニングが楽にできる様になるね。これはよいぞぉ。
コメント