Skip to content

Commit

Permalink
gaeソース一式登録
Browse files Browse the repository at this point in the history
  • Loading branch information
sile committed Oct 21, 2010
1 parent ab78fbf commit e00326d
Show file tree
Hide file tree
Showing 24 changed files with 425 additions and 0 deletions.
File renamed without changes.
79 changes: 79 additions & 0 deletions gae-app/igo-morp/build.xml
@@ -0,0 +1,79 @@
<project name="igo-morp" default="datanucleusenhance">
<property name="sdk.dir" location="../.." />

<import file="${sdk.dir}/config/user/ant-macros.xml" />

<path id="project.classpath">
<pathelement path="war/WEB-INF/classes" />
<fileset dir="war/WEB-INF/lib">
<include name="**/*.jar" />
</fileset>
<fileset dir="${sdk.dir}/lib">
<include name="shared/**/*.jar" />
</fileset>
</path>

<target name="copyjars"
description="Copies the App Engine JARs to the WAR.">
<copy
todir="war/WEB-INF/lib"
flatten="true">
<fileset dir="${sdk.dir}/lib/user">
<include name="**/*.jar" />
</fileset>
</copy>
</target>

<target name="compile" depends="copyjars"
description="Compiles Java source and copies other source files to the WAR.">
<mkdir dir="war/WEB-INF/classes" />
<copy todir="war/WEB-INF/classes">
<fileset dir="src">
<exclude name="**/*.java" />
</fileset>
</copy>
<javac
srcdir="src"
destdir="war/WEB-INF/classes"
classpathref="project.classpath"
debug="on" />
</target>

<target name="datanucleusenhance" depends="compile"
description="Performs JDO enhancement on compiled data classes.">
<enhance_war war="war" />
</target>

<target name="runserver" depends="datanucleusenhance"
description="Starts the development server.">
<dev_appserver war="war" />
</target>

<target name="update" depends="datanucleusenhance"
description="Uploads the application to App Engine.">
<appcfg action="update" war="war" />
</target>

<target name="update_indexes" depends="datanucleusenhance"
description="Uploads just the datastore index configuration to App Engine.">
<appcfg action="update_indexes" war="war" />
</target>

<target name="rollback" depends="datanucleusenhance"
description="Rolls back an interrupted application update.">
<appcfg action="rollback" war="war" />
</target>

<target name="request_logs"
description="Downloads log data from App Engine for the application.">
<appcfg action="request_logs" war="war">
<options>
<arg value="--num_days=5"/>
</options>
<args>
<arg value="logs.txt"/>
</args>
</appcfg>
</target>

</project>
36 changes: 36 additions & 0 deletions 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<String> wakati(String text) {
return tagger.wakati(text);
}

public static List<Morpheme> parse(String text) {
return tagger.parse(text);
}
}

52 changes: 52 additions & 0 deletions 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));
}
}
20 changes: 20 additions & 0 deletions 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);
}
}
49 changes: 49 additions & 0 deletions 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));
}
}
24 changes: 24 additions & 0 deletions 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);
}
}
9 changes: 9 additions & 0 deletions gae-app/igo-morp/war/WEB-INF/appengine-web.xml
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>igo-morp</application>
<version>1</version>

<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
28 changes: 28 additions & 0 deletions 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:
#
# <system-properties>
# <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
# </system-properties>
#

# 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
50 changes: 50 additions & 0 deletions gae-app/igo-morp/war/WEB-INF/web.xml
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<servlet>
<servlet-name>wakati</servlet-name>
<servlet-class>WakatiServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>wakati</servlet-name>
<url-pattern>/wakati</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>parse</servlet-name>
<servlet-class>ParseServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>parse</servlet-name>
<url-pattern>/parse</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>wakati_jsonp</servlet-name>
<servlet-class>WakatiJSONPServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>wakati_jsonp</servlet-name>
<url-pattern>/wakati_jsonp</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>parse_jsonp</servlet-name>
<servlet-class>ParseJSONPServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>parse_jsonp</servlet-name>
<url-pattern>/parse_jsonp</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>igo.jsp</welcome-file>
</welcome-file-list>
</web-app>
18 changes: 18 additions & 0 deletions 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 = "<script type='text/javascript' src='"+url+"'><\/script>";
document.getElementById("igo_jsonp_block").appendChild(elem);
}
function igo_parse(text, callback_name) {
igo_common("parse", text, callback_name);
}

function igo_wakati(text, callback_name) {
igo_common("wakati", text, callback_name);
}

document.write("<div id='igo_jsonp_block'></div>");
20 changes: 20 additions & 0 deletions gae-app/igo-morp/war/igo.jsp
@@ -0,0 +1,20 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="javax.jdo.PersistenceManager" %>

<html>
<head>
<Meta Http-equiv="content-type" Content="text/html; charset=UTF-8">
<title>Igo: 形態素解析</title>
</head>

<body>
<a href="http://sourceforge.jp/projects/igo/">Igo</a>を用いた形態素解析を行います。<br />
テキストを入力して「形態素解析」ボタンを押してください。<br />
<form method="POST" action="/parse">
<textarea name="text" cols="50" rows="10"></textarea>
<br />
<input type="submit" value="形態素解析" />
</form>
</body>
</html>

0 comments on commit e00326d

Please sign in to comment.