に影響を受けて、 Python で書いた奴を公開しようと思います。
第 1 の壁
カウントでなにより大事なのが、 URI を 20 文字として扱うことです。 URI なら簡単に正規表現で取り出せるはずなのですが、流石最近クソな Twitter さん、スキーマがなくても URI として認識します!素敵(白目)
スキーマ無しでも抽出できるのは、 Twitter の中の人のものすごい努力で満ちた正規表現のおかげです。
twitter-text-java/src/com/twitter/Regex.java at master · twitter/twitter-text-java
もはや何が何だか。
これを Python に翻訳すればいいのですが、 Python の正規表現が時代おくれすぎて、いろいろ対応してないんです><
ひたすらエラーになるところを潰して、こんな感じになりました。
twikoto3/twikoto3/twittertext/regex.py at master · azyobuzin/twikoto3
URI に関係するところしか、作っていません。
予想以上に Python が酷い…。
第 2 の壁
あとは、正規化して文字数を数えればいいんです。数えればいいんですが、問題は、コードポイント単位で数えなければいけないのです。
これは、 Unicode がメインになった Python 3 でも対応していなくて、大分悩みました。
そんなときに出会ったのがこれ
パブリックドメインなので好き勝手できますね。 Python 3 で動かすにはすこし修正が必要ですが、すごく簡単にコードポイント単位で数えることができます。
import codepoint
text = "吉野屋" #http://blog.unfindable.net/archives/2728 をやりたかったのですが、 Qiita のバグで死にました
length = len(codepoint.characters(text))
これでカウントできました!!
コードの全貌はこちら
twikoto3/twikoto3/twittertext at master · azyobuzin/twikoto3