GeekFactory

int128.hatenablog.com

Twitterのタイムラインを分かち書きにする

Google App Engine上で動く 形態素解析ライブラリ Gomoku が公開されています。jarに日本語辞書が含まれているため、jarを追加するだけで動作します。

早速ですが、Twitterタイムライン分かち書きにするページを作ってみました。サーバサイドの形態素解析に Gomoku を利用させていただきました。jarに含まれる辞書の読み込みがあるため、spin-upでは1,500〜2,500 cpu_ms程度かかります。一度ロードされた後は非常に軽快です。

やはり、TwitterAPI Limitに引っかかる場合がありますね。EC2のmod_proxyを経由するとか試してみようかな。大丈夫そうな感じ。

2011/2/3: URL変更しました。また、githubのリンクが切れていたので直しました。

ソースコードです。

public class GetController extends Controller {
  private final Twitter twitterService = new TwitterFactory().getInstance();

  @Override
  public Navigation run() throws Exception {
    if(!validate()) {
      throw new IllegalArgumentException(errors.toString());
    }

    // タイムラインを取得する
    ResponseList<Status> timeline = twitterService.getUserTimeline(asString("userName"));

    // JSONテンプレートを定義する
    Jsonizer jsonizer = new Jsonizer();
    jsonizer.type(Status.class).with(new PropertyGetter<Status>()
    {
      @Override
      public void get(Status e)
      {
        property(e.getText()).as("text");
        property(e.getCreatedAt().getTime()).as("date");
        // 形態素解析の結果をJSONプロパティに入れる
        property(Tagger.parse(e.getText())).as("parse");
      }
    });
    jsonizer.type(Morpheme.class).with(new PropertyGetter<Morpheme>()
    {
      @Override
      public void get(Morpheme e)
      {
        String[] featurePart = e.feature.split(",");
        property(e.surface).as("surface");
        property(featurePart[0]).as("feature0");
        property(featurePart[1]).as("feature1");
      }
    });

    // レスポンスを返す
    jsonizer.jsonize(timeline).send(response);
    return null;
  }
https://github.com/int128/elshard/blob/a401b0fe5c4410fae43aedaf3f47e328ab2f7aba/src/demo/org/hidetake/elshard/demo/controller/tweet/parsed/GetController.java