ゆず日記

戦う Vimmer 兼 Dvorakユーザ 兼 Kinesisユーザ 兼 おぺらー が戦わないブログ

TwitterのTweetから、自分が入力した打鍵数を調べる

ひとまずコード無しでの手順。特に変わったことはしていません。

全体フロー

  1. TwilogからXML形式で過去のTweetをDownloadする
  2. Tweet部分のみ抽出する
  3. MeCabで漢字・かなをカナに変換する
  4. 記号をUnShift、句読点を,.に変換する
  5. 訓令式ローマ字に変換する
  6. カウントする

1. Twilogから過去のTweetをDownloadする


自分は過去のTweetがすべてTwilog上に保存しているので、今回はそちらからDownloadしてそのデータ(XML形式)を利用する。

今回はXML形式の為一番右のボタンから

2. Tweet部分のみ抽出する

XMLはこんな感じ。


自分が直接入力したもの以外を取り除くには、概ね以下の順に加工を行えばいいかな。
Twilogのデータは要素を行ごとに記述してくれているし、別段複雑なXMLでは無いので今回はBeautifulStoneSoupなどのXMLParserは使わない。

  1. <text>要素以外の行を取り除く。
  2. 非公式RT以降を取り除く
  3. 実体参照の文字列をデコード
  4. URLを取り除く

@idや#hashTag入力時には自動挿入が行われる場合が多いが、その場合

  • 先頭数文字を入力して候補から選択
  • または候補を利用せず直接入力

などがあるので、これらは特に除外しないこととした。

取れたもの

うむ。

ちなみに


この時点で9961ツイート(行)、383115文字。非公式RTや空Tweetは省かれている。

3. MeCabで漢字・かなをカナに変換する

MeCabは実行時に引数として、-Oyomiを付与することでカタカナの読みだけを取得することが出来る。
同様にPythonなどからも以下のようにすればOK.

import MeCab
m = MeCab.Tagger("-Oyomi")
すもももももももものうち
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

が、

すもももももももものうち
スモモモモモモモモノウチ

と取得可能になるのでそのまま利用可能となる。
ただし、記号はそのままとなるが顔文字に含まれるギリシャ文字*1はカタカナへと変換されてしまう為、何らかの処理を行わないと綺麗に取り除けない。
今回は383115文字と大量の文字量があった為、ギリシャ文字はそれ程影響を与えないものして(´・ω・`)によく利用されるωだけ取り除いて他は無視することとした*2

4. 記号をUnShift、句読点を,.に変換する

文字を置換するだけ。

5. 訓令式ローマ字に変換する

既存のライブラリを利用し、カタカナからローマ字へと変換する。
ただし、ローマ字入力は基本的に訓令式での入力となっている為以下の処理を施す。

  • ライブラリのローマ字テーブルを訓令式へと書き換える
  • ナンバ(namba)など、'ん'の次にバ行やパ行が来る場合にmへと変換する処理を無効にする
  • オオサカ(oosaka)など、母音が連続する場合にosakaなどと母音を減らす処理を無効にする

ここは基本的に既存ライブラリで処理するだけなのだが、今後のことを考えると自分でライブラリを作る必要性があるため、後で作ってみようと思う。

6. カウントする

キー入力単位まで加工したテキストデータを、各キー毎にカウントする。


*1:ωなどは'オメガ'となってしまう。あまりやりたくは無かったが'ω'は事前に取り除いた。

*2:より良い解決法は今後も模索する