何度やっても同じ

ただの日記

GAE/JでKuromojiを使って形態素解析

http://atilika.org/confluence/pages/viewpage.action?pageId=131141

↑でKuromojiをダウンロードして、展開して出てきた kuromoji-x.x.x.jar を普通に WEB-INF/lib に配置して、下のようなコード(slim3)を書くだけ。

jarファイルが約11MBで、辞書付きの形態素解析ライブラリとしては小さいけれど、GAEのファイルサイズ制限である10MBをわずかにオーバーしているのが残念すぎたのだった。コマンドラインで次のようにjarファイル分割オプションを指定してデプロイ。

C:\...\appengine-java-sdk-1.4.3\bin>appcfg.cmd --enable_jar_splitting update path\to\war

あと1MBほどがんばって削減してくれないかな…。

http://www.team-guangzhou.com/kuromoji/input

public class AnalyzeController extends Controller {

    private Tokenizer tokenizer = Tokenizer.builder().build();

    @Override
    public Navigation run() throws Exception {

        String s = asString("text");
        if (StringUtil.isEmpty(s)) {
            s = "何か文章を入力してください。";
        }

        List<Token> tokens = tokenizer.tokenize(s);
        requestScope("tokens", tokens);

        return forward("analyze.jsp");
    }
}

JSP

<%@page pageEncoding="utf-8" contentType="application/json; charset=utf-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="f" uri="http://www.slim3.org/functions" %>
{"tokens": [
<c:forEach var="token" items="${tokens}" varStatus="loop1">
  {
   "surfaceForm": "${f:h(token.surfaceForm)}",
   "features": [<c:forEach var="feature" items="${token.allFeaturesArray}" varStatus="loop2">"${f:h(feature)}"<c:if test="${!loop2.last}">,</c:if></c:forEach>]
  }<c:if test="${!loop1.last}">,
</c:if>
</c:forEach>
]}