/webapp/main.py |
---|
12,6 → 12,7 |
from tsimapiak import parsenum |
from tsimapiak import dbconnector |
from tsimapiak import parse |
from tsimapiak import translate |
class Index(tornado.web.RequestHandler): |
def get(self): |
57,13 → 58,31 |
out = parse.parsesent(word) |
self.render("templates/parse.html", last=word, out=out) |
class Translate(tornado.web.RequestHandler): |
def get(self): |
self.render("templates/translate.html", last="", out=None, lang="eng") |
def post(self): |
try: |
word = self.get_argument("word") |
lang = self.get_argument("lang") |
except: |
self.redirect("/translate") |
out = translate.translatesent(word, lang) |
self.render("templates/translate.html", last=word, out=out, lang=lang) |
settings = { |
"static_path": os.path.join(os.path.dirname(__file__), "static") |
} |
application = tornado.web.Application([ |
("/", Index), |
("/number", Number), |
("/restart", Restart), |
("/testdb", TestDB), |
("/parse", Parse) |
]) |
("/parse", Parse), |
("/translate", Translate) |
], **settings) |
if __name__ == "__main__": |
http_server = tornado.httpserver.HTTPServer(application) |
/webapp/templates/translate.html |
---|
0,0 → 1,57 |
{% extends "base.html" %} |
{% block title %}Translator{% end %} |
{% block body %} |
<b>Na'vi sentence:</b><br /> |
<form action="/translate" method="post"> |
<input id="word" name="word" type="text" value="{{last}}" style="width: 100%;" /> |
<select name="lang"> |
<option id="eng" value="eng" selected="selected">English</option> |
<option id="hu" value="hu">Hungarian - Magyar</option> |
<option id="de" value="de">German - Deutsch</option> |
<option id="est" value="est">Estonian - Eesti</option> |
<option id="ptbr" value="ptbr">Brazilian Portuguese - Português do Brasil</option> |
</select> |
<input name="btn" type="submit" value="Parse!" /> |
</form> |
{% if out %} |
<table border="1"> |
<tr> |
<th>Words</th> |
<th>English</th> |
<th>Parts</th> |
<th>Data</th> |
</tr> |
{% for wor in out %} |
<tr> |
<td rowspan="4">{{ wor["word"]["navi"] }}</td> |
<td rowspan="4">{{ wor["translated"] }}</td> |
<td>Infixes:</td> |
<td>{{ u", ".join(wor["inf"]) }}</td> |
</tr> |
<tr> |
<td>Prefixes:</td> |
<td>{{ u"; ".join(u", ".join(x) for x in wor["pref"]) }}</td> |
</tr> |
<tr> |
<td>Postfixes:</td> |
<td>{{ u"; ".join(u", ".join(x) for x in wor["post"]) }}</td> |
</tr> |
<tr> |
<td>Lenited:</td> |
<td>{{ str(wor["len"]) }}</td> |
</tr> |
{% end %} |
</table> |
{% end %} |
<p>This program uses Eana Eltu for the list of words and infix positions (but nothing else), created by Tuiq and Taronyu. Thanks also go to the rest of the Learn Na'vi community!</p> |
<script type="text/javascript"> |
document.getElementById("word").focus(); |
</script> |
{% if lang != "eng" %} |
<script type="text/javascript"> |
document.getElementById(lang).selected = "selected" |
</script> |
{% end %} |
{% end %} |
/webapp/templates/parse.html |
---|
1,9 → 1,9 |
{% extends "base.html" %} |
{% block title %}Word parser{% end %} |
{% block title %}Sentence parser{% end %} |
{% block body %} |
<b>Na'vi word:</b><br /> |
<b>Na'vi sentence:</b><br /> |
<form action="/parse" method="post"> |
<input id="word" name="word" type="text" value="{{last}}" style="width: 100%;" /> |
<input name="btn" type="submit" value="Parse!" /> |
36,8 → 36,8 |
{% end %} |
</table> |
{% end %} |
<p>This program uses Eana Eltu for the list of words and infix positions (but nothing else), created by Tuiq and Taronyu. Thanks also go to the rest of the Learn Na'vi community!</p> |
<script type="text/javascript"> |
document.getElementById("word").focus(); |
</script> |
<p>This program uses Eana Eltu for the list of words and infix positions (but nothing else), created by Tuiq and Taronyu. Thanks also go to the rest of the Learn Na'vi community!</p> |
{% end %} |
/webapp/templates/base.html |
---|
1,6 → 1,7 |
<html> |
<head> |
<title>Tsim Apiak - {% block title %}Title{% end %}</title> |
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" /> |
<style type="text/css"> |
body { |
background: #145179; |
/webapp/templates/index.html |
---|
3,6 → 3,6 |
{% block title %}Home{% end %} |
{% block body %} |
<a href="/number"><b>Number translator</b></a><br /> |
<a href="/parse"><b>Parser</b></a> |
{% end %} |
<a href="/number"><b>Number translator</b></a> - this webapp allows you to translate written-out Na'vi numbers into decimal and octal.<br /> |
<a href="/parse"><b>Parser</b></a> - this webapp can parse Na'vi sentences into the base words, prefixes, infixes and suffixes. It does not currently translate the words, but that will come. |
{% end %} |
/webapp/static/favicon.ico |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/webapp/static/favicon.ico |
---|
Property changes: |
Added: svn:mime-type |
## -0,0 +1 ## |
+application/octet-stream |
\ No newline at end of property |
Index: tsimapiak/translate.py |
=================================================================== |
--- tsimapiak/translate.py (nonexistent) |
+++ tsimapiak/translate.py (revision 152) |
@@ -0,0 +1,10 @@ |
+import parse |
+import dbconnector |
+def translatesent(sent, lang): |
+ sent = parse.parsesent(sent) |
+ for word in sent: |
+ if word["word"]["id"] != 0: |
+ word["translated"] = dbconnector.translate(word["word"]["id"],lang) |
+ else: |
+ word["translated"] = word["word"]["navi"] |
+ return sent |
\ No newline at end of file |
Index: tsimapiak/parsenum.py |
=================================================================== |
--- tsimapiak/parsenum.py (revision 123) |
+++ tsimapiak/parsenum.py (revision 152) |
@@ -1,90 +1,129 @@ |
-#!/usr/bin/python |
-# -*- coding: utf-8 -*- |
- |
-import re |
- |
-num = [u"kew", |
- u"'aw", |
- u"mune", |
- u"pxey", |
- u"tsìng", |
- u"mrr", |
- u"pukap", |
- u"kinä"] |
- |
-rem = [u"aw", |
- u"mun", |
- u"pey", |
- u"sìng", |
- u"mrr", |
- u"fu", |
- u"hin"] |
- |
-base = [u"", |
- u"me", |
- u"pxe", |
- u"tsì", |
- u"mrr", |
- u"pu", |
- u"ki"] |
- |
- |
-numre = \ |
- u"^(a?)(?:(" + "|".join(base) + u")zazam??)?" + \ |
- u"(?:(" + "|".join(base) + u")vozam??)?" + \ |
- u"(?:(" + "|".join(base) + u")zam??)?" + \ |
- u"(?:(" + "|".join(base) + u")vo(?:l(?=a|))?)?" + \ |
- u"((?:" + "|".join(rem) + u")|" + \ |
- u"(?:" + "|".join(num) + u"))?((?:ve)?)(a?)$" |
-numre = re.compile(numre) |
- |
-def parse(numin): |
- if numin in (u"a", u"aa", u"ave", u"avea", u"ve", u"vea"): |
- return None |
- try: |
- mat = numre.match(numin).groups() |
- except: |
- return None |
- numout = 0 |
- numoct = 0 |
- try: |
- numout += rem.index(mat[5]) + 1 |
- numoct += rem.index(mat[5]) + 1 |
- except: |
- try: |
- numout += num.index(mat[5]) |
- numoct += num.index(mat[5]) |
- except: pass |
- try: |
- numout += (base.index(mat[4]) + 1) * 8 |
- numoct += (base.index(mat[4]) + 1) * 10 |
- except: pass |
- try: |
- numout += (base.index(mat[3]) + 1) * 8**2 |
- numoct += (base.index(mat[3]) + 1) * 10**2 |
- except: pass |
- try: |
- numout += (base.index(mat[2]) + 1) * 8**3 |
- numoct += (base.index(mat[2]) + 1) * 10**3 |
- except: pass |
- try: |
- numout += (base.index(mat[1]) + 1) * 8**4 |
- numoct += (base.index(mat[1]) + 1) * 10**4 |
- except: pass |
- retnum = unicode(numout) |
- if mat[6] != u"": |
- retnum += u"." |
- prefs = [] |
- posts = [] |
- if mat[0] != u"": |
- prefs.append(mat[0]) |
- if mat[6] != u"": |
- posts.append(mat[6]) |
- if mat[7] != u"": |
- posts.append(mat[7]) |
- return {"word": {"id": 0, "navi": retnum, "infix": u"", "type": u""}, "pref": [prefs], "post": [posts], "inf": [u"", u"", u""], "len": False, "dec": numout, "oct": numoct} |
- #return numout, numoct |
- |
- |
-if __name__ == "__main__": |
- print parse(u"mrrvolawvea") |
+#!/usr/bin/python |
+# -*- coding: utf-8 -*- |
+ |
+num = [u"kew", |
+ u"'aw", |
+ u"mune", |
+ u"pxey", |
+ u"tsìng", |
+ u"mrr", |
+ u"pukap", |
+ u"kinä"] |
+ |
+numord = [u"kew", |
+ u"'aw", |
+ u"mu", |
+ u"pxey", |
+ u"tsì", |
+ u"mrr", |
+ u"pu", |
+ u"ki"] |
+ |
+rem = [u"aw", |
+ u"mun", |
+ u"pey", |
+ u"sìng", |
+ u"mrr", |
+ u"fu", |
+ u"hin"] |
+ |
+remord = [u"aw", |
+ u"mu", |
+ u"pey", |
+ u"sì", |
+ u"mrr", |
+ u"fu", |
+ u"hi"] |
+ |
+base = [u"", |
+ u"me", |
+ u"pxe", |
+ u"tsì", |
+ u"mrr", |
+ u"pu", |
+ u"ki"] |
+ |
+def parse(numin): |
+ if u"mm" in numin: |
+ return None |
+ if (numin[0] == u"a") and (numin[len(numin)-1] == u"a"): |
+ return None |
+ prefs = [] |
+ posts = [] |
+ outoct = 0 |
+ outdec = 0 |
+ ret = {"word": {"id": 0, "navi": u"", "infix": u"", "type": u""}, "pref": [prefs], "post": [posts], "inf": [u"", u"", u""], "len": False, "dec": outdec, "oct": outoct} |
+ if numin[0] == u"a": |
+ prefs.append(u"a") |
+ numin = numin[1:] |
+ if numin[len(numin)-1] == u"a": |
+ posts.append(u"a") |
+ numin = numin[:-1] |
+ if numin[-2:] == u"ve": |
+ posts.append(u"ve") |
+ numin = numin[:-2] |
+ |
+ #base numbers |
+ for n in range(len(num)): |
+ if u"ve" in posts: |
+ if numin == numord[n]: |
+ outoct = n |
+ outdec = n |
+ ret["word"]["navi"] = unicode(outdec) + u"." |
+ ret["dec"] = outdec |
+ ret["oct"] = outoct |
+ return ret |
+ else: |
+ if numin == num[n]: |
+ outoct = n |
+ outdec = n |
+ ret["word"]["navi"] = unicode(outdec) |
+ ret["dec"] = outdec |
+ ret["oct"] = outoct |
+ return ret |
+ #other numbers |
+ for n in range(len(base)): |
+ if numin.startswith(base[n] + u"zazam"): |
+ outoct += (n+1) * (10**4) |
+ outdec += (n+1) * (8**4) |
+ numin = numin[len(base[n]) + 5:] |
+ for n in range(len(base)): |
+ if numin.startswith(base[n] + u"vozam"): |
+ outoct += (n+1) * (10**3) |
+ outdec += (n+1) * (8**3) |
+ numin = numin[len(base[n]) + 5:] |
+ for n in range(len(base)): |
+ if numin.startswith(base[n] + u"zam"): |
+ outoct += (n+1) * (10**2) |
+ outdec += (n+1) * (8**2) |
+ numin = numin[len(base[n]) + 3:] |
+ for n in range(len(base)): |
+ if numin.startswith(base[n] + u"vol"): |
+ outoct += (n+1) * 10 |
+ outdec += (n+1) * 8 |
+ numin = numin[len(base[n]) + 3:] |
+ if numin.startswith(base[n] + u"vo"): |
+ outoct += (n+1) * 10 |
+ outdec += (n+1) * 8 |
+ numin = numin[len(base[n]) + 2:] |
+ for n in range(len(rem)): |
+ if u"ve" in posts: |
+ if numin == remord[n]: |
+ outoct += n + 1 |
+ outdec += n + 1 |
+ numin = u"" |
+ else: |
+ if numin == rem[n]: |
+ outoct += n + 1 |
+ outdec += n + 1 |
+ numin = u"" |
+ if numin == u"": |
+ ret["word"]["navi"] = unicode(outdec) if not u"ve" in posts else unicode(outdec) + u"." |
+ ret["dec"] = outdec |
+ ret["oct"] = outoct |
+ return ret |
+ else: |
+ return None |
+ |
+if __name__ == "__main__": |
+ print parse(u"mevolawve") |
\ No newline at end of file |
Index: tsimapiak/parse.py |
=================================================================== |
--- tsimapiak/parse.py (revision 123) |
+++ tsimapiak/parse.py (revision 152) |
@@ -128,4 +128,4 @@ |
word = parseword(sent[-left:]) |
left -= len(word["word"]["navi"].split(" ")) |
ret.append(word) |
- return ret |
\ No newline at end of file |
+ return ret |
Index: tsimapiak/dbconnector.py |
=================================================================== |
--- tsimapiak/dbconnector.py (revision 123) |
+++ tsimapiak/dbconnector.py (revision 152) |
@@ -20,16 +20,13 @@ |
db.close() |
return ret |
-def getnavi(word): |
- ret = [] |
+def translate(wid,language): |
db = tornado.database.Connection("127.0.0.1", "navi", user="navi", password="navi") |
for row in db.query(""" |
SELECT * |
- FROM `metaWords` |
- WHERE navi = ?""",word): |
- if row["infixes"]: |
- ret.append({"id": row["id"], "navi": row["navi"], "infix": row["infixes"].lower(), "type": row["partOfSpeech"]}) |
- else: |
- ret.append({"id": row["id"], "navi": row["navi"], "infix": row["navi"].lower(), "type": row["partOfSpeech"]}) |
+ FROM `localizedWords` |
+ WHERE id = %s AND languageCode = %s""",wid,language): |
+ ret = row["localized"] |
+ break |
db.close() |
return ret |
\ No newline at end of file |