diff --git a/README b/README.markdown similarity index 100% rename from README rename to README.markdown diff --git a/gae-app/igo-morp/build.xml b/gae-app/igo-morp/build.xml new file mode 100644 index 0000000..b4e1cb2 --- /dev/null +++ b/gae-app/igo-morp/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gae-app/igo-morp/src/Igo.java b/gae-app/igo-morp/src/Igo.java new file mode 100644 index 0000000..cfc17dd --- /dev/null +++ b/gae-app/igo-morp/src/Igo.java @@ -0,0 +1,36 @@ +/** + * Igoのラッパークラス。 + * クラスのロード時にバイナリ辞書の読み込みを行う。 + */ + +import java.util.List; +import net.reduls.igo.Tagger; +import net.reduls.igo.Morpheme; +import javax.jdo.annotations.IdGeneratorStrategy; +import javax.jdo.annotations.IdentityType; +import javax.jdo.annotations.PersistenceCapable; +import javax.jdo.annotations.Persistent; +import javax.jdo.annotations.PrimaryKey; + +@PersistenceCapable(identityType = IdentityType.APPLICATION) +public class Igo { + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + private Long id; + + private static Tagger tagger; + static { + try { + tagger = new Tagger("ipadic/"); // XXX: 辞書のパスはハードこーG品具ハードコーディング + } catch (Exception e) {} + } + + public static List wakati(String text) { + return tagger.wakati(text); + } + + public static List parse(String text) { + return tagger.parse(text); + } +} + \ No newline at end of file diff --git a/gae-app/igo-morp/src/ParseJSONPServlet.java b/gae-app/igo-morp/src/ParseJSONPServlet.java new file mode 100644 index 0000000..81ba76b --- /dev/null +++ b/gae-app/igo-morp/src/ParseJSONPServlet.java @@ -0,0 +1,52 @@ +import java.io.IOException; +import javax.servlet.http.*; +import net.reduls.igo.Morpheme; + +public class ParseJSONPServlet extends HttpServlet { + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + String text = req.getParameter("text"); + String callback = req.getParameter("callback"); + + if(text==null) + text = ""; + + if(callback==null) + callback="callback"; + + resp.setContentType("Content-type: text/javascript; charset=UTF-8"); + + boolean first=true; + resp.getWriter().print(callback+"(["); + for(Morpheme m : Igo.parse(text)) { + if(first==false) + resp.getWriter().print(","); + first=false; + resp.getWriter().print("[\""+encode(m.surface)+"\",\""+encode(m.feature)+"\"]"); + } + resp.getWriter().println("]);"); + } + + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + doGet(req,resp); + } + + private String encode(String src) { + StringBuilder sb = new StringBuilder(src.length()); + for(int i=0; i < src.length(); i++) { + char c = src.charAt(i); + if(c < 0x80) + sb.append(c); + else + appendHex(sb, c); + } + return sb.toString(); + } + + private void appendHex(StringBuilder sb, char c) { + final String h = "0123456789ABCDEF"; + + sb.append("\\u"); + for(int i=3; i >= 0; i--) + sb.append(h.charAt((c>>(4*i))&0xF)); + } +} diff --git a/gae-app/igo-morp/src/ParseServlet.java b/gae-app/igo-morp/src/ParseServlet.java new file mode 100644 index 0000000..e1d22b3 --- /dev/null +++ b/gae-app/igo-morp/src/ParseServlet.java @@ -0,0 +1,20 @@ +import java.io.IOException; +import javax.servlet.http.*; +import net.reduls.igo.Morpheme; + +public class ParseServlet extends HttpServlet { + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + String text = req.getParameter("text"); + if(text==null) + text = ""; + + resp.setContentType("text/plain; charset=UTF-8"); + for(Morpheme m : Igo.parse(text)) + resp.getWriter().println(m.surface+"\t"+m.feature); + resp.getWriter().println("EOS"); + } + + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + doGet(req,resp); + } +} diff --git a/gae-app/igo-morp/src/WakatiJSONPServlet.java b/gae-app/igo-morp/src/WakatiJSONPServlet.java new file mode 100644 index 0000000..c128ebc --- /dev/null +++ b/gae-app/igo-morp/src/WakatiJSONPServlet.java @@ -0,0 +1,49 @@ +import java.io.IOException; +import javax.servlet.http.*; + +public class WakatiJSONPServlet extends HttpServlet { + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + String text = req.getParameter("text"); + String callback = req.getParameter("callback"); + if(text==null) + text = ""; + + if(callback==null) + callback="callback"; + + boolean first=true; + resp.setContentType("Content-type: text/javascript; charset=UTF-8"); + resp.getWriter().print(callback+"(["); + for(String w : Igo.wakati(text)) { + if(first==false) + resp.getWriter().print(","); + first=false; + resp.getWriter().print("\""+encode(w)+"\""); + } + resp.getWriter().println("]);"); + } + + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + doGet(req,resp); + } + + private String encode(String src) { + StringBuilder sb = new StringBuilder(src.length()); + for(int i=0; i < src.length(); i++) { + char c = src.charAt(i); + if(c < 0x80) + sb.append(c); + else + appendHex(sb, c); + } + return sb.toString(); + } + + private void appendHex(StringBuilder sb, char c) { + final String h = "0123456789ABCDEF"; + + sb.append("\\u"); + for(int i=3; i >= 0; i--) + sb.append(h.charAt((c>>(4*i))&0xF)); + } +} diff --git a/gae-app/igo-morp/src/WakatiServlet.java b/gae-app/igo-morp/src/WakatiServlet.java new file mode 100644 index 0000000..3b02083 --- /dev/null +++ b/gae-app/igo-morp/src/WakatiServlet.java @@ -0,0 +1,24 @@ +import java.io.IOException; +import javax.servlet.http.*; + +public class WakatiServlet extends HttpServlet { + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + String text = req.getParameter("text"); + if(text==null) + text = ""; + + boolean first = true; + resp.setContentType("text/plain; charset=UTF-8"); + for(String s : Igo.wakati(text)) { + if(!first) + resp.getWriter().print(" "); + first = false; + resp.getWriter().print(s); + } + resp.getWriter().println(""); + } + + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + doGet(req,resp); + } +} diff --git a/gae-app/igo-morp/war/WEB-INF/appengine-web.xml b/gae-app/igo-morp/war/WEB-INF/appengine-web.xml new file mode 100644 index 0000000..7f6516c --- /dev/null +++ b/gae-app/igo-morp/war/WEB-INF/appengine-web.xml @@ -0,0 +1,9 @@ + + + igo-morp + 1 + + + + + diff --git a/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-1.0-sdk-1.3.7.jar b/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-1.0-sdk-1.3.7.jar new file mode 100644 index 0000000..ac8f0b5 Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-1.0-sdk-1.3.7.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-labs-1.3.7.jar b/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-labs-1.3.7.jar new file mode 100644 index 0000000..fe72b05 Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-labs-1.3.7.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/appengine-jsr107cache-1.3.7.jar b/gae-app/igo-morp/war/WEB-INF/lib/appengine-jsr107cache-1.3.7.jar new file mode 100644 index 0000000..688256a Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/appengine-jsr107cache-1.3.7.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-appengine-1.0.7.final.jar b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-appengine-1.0.7.final.jar new file mode 100644 index 0000000..738246a Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-appengine-1.0.7.final.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-core-1.1.5.jar b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-core-1.1.5.jar new file mode 100644 index 0000000..c450ab9 Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-core-1.1.5.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar new file mode 100644 index 0000000..c326e0b Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar b/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar new file mode 100644 index 0000000..12d4ab0 Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar b/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar new file mode 100644 index 0000000..ee9963d Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/igo-0.4.2-gae.jar b/gae-app/igo-morp/war/WEB-INF/lib/igo-0.4.2-gae.jar new file mode 100644 index 0000000..dc75d08 Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/igo-0.4.2-gae.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/jdo2-api-2.3-eb.jar b/gae-app/igo-morp/war/WEB-INF/lib/jdo2-api-2.3-eb.jar new file mode 100644 index 0000000..2547a0b Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/jdo2-api-2.3-eb.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/lib/jsr107cache-1.1.jar b/gae-app/igo-morp/war/WEB-INF/lib/jsr107cache-1.1.jar new file mode 100644 index 0000000..a94aa31 Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/jsr107cache-1.1.jar differ diff --git a/gae-app/igo-morp/war/WEB-INF/logging.properties b/gae-app/igo-morp/war/WEB-INF/logging.properties new file mode 100644 index 0000000..4a78b7f --- /dev/null +++ b/gae-app/igo-morp/war/WEB-INF/logging.properties @@ -0,0 +1,28 @@ +# A default java.util.logging configuration. +# (All App Engine logging is through java.util.logging by default). +# +# To use this configuration, copy it into your application's WEB-INF +# folder and add the following to your appengine-web.xml: +# +# +# +# +# + +# Set the default logging level for all loggers to WARNING +.level = WARNING + +# Set the default logging level for ORM, specifically, to WARNING +DataNucleus.JDO.level=WARNING +DataNucleus.Persistence.level=WARNING +DataNucleus.Cache.level=WARNING +DataNucleus.MetaData.level=WARNING +DataNucleus.General.level=WARNING +DataNucleus.Utility.level=WARNING +DataNucleus.Transaction.level=WARNING +DataNucleus.Datastore.level=WARNING +DataNucleus.ClassLoading.level=WARNING +DataNucleus.Plugin.level=WARNING +DataNucleus.ValueGeneration.level=WARNING +DataNucleus.Enhancer.level=WARNING +DataNucleus.SchemaTool.level=WARNING diff --git a/gae-app/igo-morp/war/WEB-INF/web.xml b/gae-app/igo-morp/war/WEB-INF/web.xml new file mode 100644 index 0000000..57cf51c --- /dev/null +++ b/gae-app/igo-morp/war/WEB-INF/web.xml @@ -0,0 +1,50 @@ + + + + + + wakati + WakatiServlet + + + + wakati + /wakati + + + + parse + ParseServlet + + + + parse + /parse + + + + wakati_jsonp + WakatiJSONPServlet + + + + wakati_jsonp + /wakati_jsonp + + + + parse_jsonp + ParseJSONPServlet + + + + parse_jsonp + /parse_jsonp + + + + igo.jsp + + diff --git a/gae-app/igo-morp/war/igo.js b/gae-app/igo-morp/war/igo.js new file mode 100644 index 0000000..38fa10f --- /dev/null +++ b/gae-app/igo-morp/war/igo.js @@ -0,0 +1,18 @@ +function igo_common(method, text, callback_name) { + var enc_text = encodeURIComponent(text); + var query = "text="+enc_text+"&callback="+callback_name; + var url = "http://igo-morp.appspot.com/"+method+"_jsonp?"+query; + + var elem = document.createElement('div'); + elem.innerHTML = " + + + + + 形態素解析サンプル + + + +
+ +
+ +
+
+ + +

+  
+
+