twitterから趣味の似たユーザーを探すために、もっと多くのキーワードを抽出したいと思い、言語解析に挑戦しました。
Pythonで使える言語解析パッケージとしては、mecab(めかぶ)が有名なようです。
しかし、Windowsではなかなかインストールが一筋縄ではいかないということで、↓の記事のように簡単にできるよ、と書かれていても私にはやり遂げることはできませんでした。
qiita.com
例に漏れず、文字コードが分からないよ^^というErrorでくじけました。
C:\Users\****>pip install mecab-python3 Collecting mecab-python3 Downloading mecab-python3-0.7.tar.gz (41kB) 100% |████████████████████████████████| 51kB 1.1MB/s Exception: Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str return s.decode(sys.__stdout__.encoding) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 15: invalid start byte During handling of the above exception, another exception occurred: Traceback (most recent call last):
そこで、重いのでお勧めしないという声がありますが、janome(蛇の目)をインストールすることにしました。
こちらは、数分かかりましたがインストールできました。
C:\Users\***>pip install janome Collecting janome Downloading Janome-0.3.5.tar.gz (20.0MB) 100% |████████████████████████████████| 20.0MB 137kB/s Building wheels for collected packages: janome Running setup.py bdist_wheel for janome ... done Stored in directory: C:\Users\nakas\AppData\Local\pip\Cache\wheels\35\26\c9\43f2970612ffeda9113bd1c345d7d39216fdfe5118c40a18b3 Successfully built janome Installing collected packages: janome Successfully installed janome-0.3.5
早速試してみます。
from janome.tokenizer import Tokenizer t = Tokenizer() for token in t.tokenize('今日はpythonが終わったら、夕ご飯に餃子を食べようと思っている。'): print(token)
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー は 助詞,係助詞,*,*,*,*,は,ハ,ワ python 名詞,固有名詞,組織,*,*,*,python,*,* が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 終わっ 動詞,自立,*,*,五段・ラ行,連用タ接続,終わる,オワッ,オワッ たら 助動詞,*,*,*,特殊・タ,仮定形,た,タラ,タラ 、 記号,読点,*,*,*,*,、,、,、 夕 名詞,副詞可能,*,*,*,*,夕,ユウ,ユー ご飯 名詞,一般,*,*,*,*,ご飯,ゴハン,ゴハン に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 餃子 名詞,一般,*,*,*,*,餃子,ギョウザ,ギョーザ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 食べよ 動詞,自立,*,*,一段,未然ウ接続,食べる,タベヨ,タベヨ う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ と 助詞,格助詞,引用,*,*,*,と,ト,ト 思っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,思う,オモッ,オモッ て 助詞,接続助詞,*,*,*,*,て,テ,テ いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル 。 記号,句点,*,*,*,*,。,。,。
とりあえず、ただしく動作しているようです。
ちなみにここで、ファイル名を"janome.py"にしたら、Errorになりました。
ModuleNotFoundError: No module named 'janome.Tokenizer';'janome' is not a package
こんな罠があるんですよ。
Errorが出る場合は、その中で一番最後に出てくるもののなかに、一番重要なものがありますので、そのメッセージでぐぐるとqiitaやstackoverflow、teratermの該当記事にたどりつくことができます。
Python 3.x - janomeを使った形態素解析が出来ない(84652)|teratail
ここからが、本題。
まず、解析にかけるテキストとしては、自身のtimeLineを約3時間分取得しました。
タイムラインはtweepyで以下のように指定すれば取得できます。
最大取得数が100のようなので、30分ごとに取得します。
これをテキストファイルとして保存しておきます。
for tweet in api.home_timeline(count=100): #タイムライン
このファイルをjanomeにかけます。
# -*- coding: utf-8 -*- from janome.tokenizer import Tokenizer t = Tokenizer() file = open('s51517765_timeline.txt', 'r', encoding='utf') # UTFを指定する text=file.read() dict={} #カウント用の辞書の初期化 for token in t.tokenize(text): hinshi = token.part_of_speech.split(',')[0] isNum = token.part_of_speech.split(',')[1] word = token.base_form #単語 if hinshi == '名詞' and (isNum!='数' and isNum!='サ変接続'): print(token) if word in dict: dict[word] += 1 else: dict[word] = 1 elif hinshi == '動詞': print(token) if word in dict: dict[word] += 1 else: dict[word] = 1 for k, v in sorted(dict.items(), key=lambda x: -x[1]): #降順ソート if v>3: print(str(k) + " : " + str(v))
ここで、品詞を確認し、名詞と動詞だけを抽出します。ただし、名詞の中の”数”と”サ変接続”は除外します。
"数"はいわゆるアラビア数字でサ変接続は:(コロン)や;(セミコロン)などの記号を除外します。
elif hinshi=='動詞'のところは、うまく記述すればifの中に含めることも可能だとは思いますが、ここでは視認性を重視し分割しました。
これで、欲しい単語のみを抽出できました。
これを辞書に登録しながらカウントし、降順ソートします。
する : 156 https : 133 t : 133 co : 128 RT : 94 いる : 46 の : 41 てる : 35 なる : 34 人 : 31 こと : 29 れる : 28 ある : 26 やる : 21 ん : 20 できる : 18 ブログ : 17 くる : 16 思う : 15 さん : 15 見る : 14 的 : 14 よう : 13 化 : 12 中 : 12 時間 : 12 これ : 12 使う : 11 記事 : 11 今日 : 11 みる : 10 そう : 10 フレーム : 10 暗号 : 10 x : 9 電子 : 9 者 : 9 出る : 9 ため : 9 方 : 8 自分 : 8 言う : 8 私 : 8 わかる : 8 年 : 8 それ : 8 時 : 8 せる : 7 駅 : 7 A : 7 ー : 7 方式 : 7 られる : 7 出す : 7 日 : 7 みたい : 7 鍵 : 7 くれる : 6 作る : 6 書く : 6 系 : 6 電気 : 6 さ : 6 持つ : 6 つく : 6 前 : 6 知る : 6 映画 : 6 気 : 6 危険 : 6 物 : 6 ケーブル : 6 学生 : 6 code : 6 festival : 6 しまう : 5 以外 : 5 しれる : 5 コード : 5 アプリ : 5 人間 : 5 Android : 5 技術 : 5 m : 5 C : 5 回路 : 5 回 : 5 読む : 5 PC : 5 手 : 5 いう : 5 たち : 5 情報 : 5 ロボット : 5 普通 : 5 英語 : 5 機器 : 5 企業 : 5 おる : 5 買う : 5 綺麗 : 5 問題 : 4 切る : 4 いただく : 4 w : 4 インターネット : 4 すぎる : 4 可能 : 4 y : 4 穴 : 4 ちゃう : 4 県 : 4 u : 4 日本 : 4 何 : 4 s : 4 全体 : 4 見える : 4 r : 4 食べる : 4 GitLab : 4 数学 : 4 ガール : 4 秘密 : 4 分 : 4 頭 : 4 以上 : 4 もの : 4 対象 : 4 度 : 4 T : 4 聞く : 4 思い出す : 4 姿 : 4 アニメ : 4 死ぬ : 4 でる : 4 つける : 4 ツイート : 4 画像 : 4 車 : 4 ぶつ : 4 森 : 4 どこ : 4 定期 : 4 経済 : 4 今 : 4 本 : 4 必要 : 4 ナイフ : 4 Excel : 4 アクセサリー : 4
まだ、一般的すぎる単語が多い気がしますが、うまく組み合わせれば使えそうな単語が拾えているようにも思います。
このListを見たら何となく理系っぽいイメージが出ているのではないでしょうか?
参考資料
辞書型の使い方
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者: Al Sweigart,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る