4000万ツイートから名詞を使用頻度の順に取り出す(2)

具体的な手順としては、ツイートファイルをまず一つにまとめるところからである。

$ cat tweets*.txt > all_tweets_181012.txt

5,358,925,973バイトあった。5Gbである。

集めたファイルを、mecabで分かち書きする。時間も測っている。名詞だけを取り出し、余計なものをカットし、改行を空白に取り替えると次のようなコマンドラインになる。

$ time mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/ all_tweets_181012.txt | grep -e "名詞,一般" -e "名詞,固有名詞" -e "名詞,サ変接続" -e "名詞,接尾" | cut -f1 | tr '\n' ' ' > twitter_wakati_data_noun_181012.txt

これで、1時間40分くらいかけて、名詞だけわかち書きされたファイル出来上がる。名詞だけにしたので、2,459,139,485バイトになった。

20スレッドくらいで並列処理したいので、一個のファイルだと不便だ。次のコマンドで125メガくらいのファイルに分割する。パソコンの並列スレッド数は24だが、全部使って動かすと、パソコンがギクシャクしてくるので。

$ split -b 125m twitter_wakati_data_noun_181012.txt

あとは、javaで処理する。

4000万ツイートから名詞を使用頻度の順に取り出す(1)

その質は問わなければ、大体、どんなお題がきても即興漫才や謎かけがロボット自身のコンピュータで、その場で、数秒以内に作成することができるようになった。十分使える。

妻に「漫才やなどかけのレベルは大して高くないんだけれど」というと「それでいいのよ。それが面白いのよ」という。なるほどと、いい意味にとった。

ただ、ロボットが認識できる言葉自体が限られている。ワイルドカードで、どんな言葉でも文章にするほどの知的処理をロボットはローカルでできない。googleのクラウドなどを使えばできるかもしれないが、ライブ会場やテレビの収録場所がネットワークがつながっているとは限らない。

やっぱり、ロボット自身に言葉を認識する能力が欲しい。実は、現時点で約3000語を識別する力は持っている。これで、ずっとネタをやってきているが、それだけの言葉しか対応できないわけではない。多分数万、数十万語のお題に対応できるのだ。そう言うシステムにしたつもりだ。

この認識言葉数の壁、制約を外すためには、新たな言葉を重要性の順に追加する必要がある。で、一体何が重要な言葉なのか。端的に言えば、お客さんが「お題をお願いします」と言ったときに、思いつく言葉である。これを決めなければならない。お客さんは、普段使っている言葉からお題を言うだろう。その場で思いつく言葉である。その場が、どんな場かにも依存する。

そこで、ツイッターで使われている名詞の頻度をカウントすることにした。この間、日々集めているツイート数は4000万ツイートを超えた。これを使うことにする。変な言葉もいっぱいあるが、それらを覗きながら、使用頻度の上位の言葉をロボットが認識できるようにしたい。