1,90 → 1,130 |
#!/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[-2:] == u"ve": |
posts.append(u"ve") |
numin = numin[:-2] |
if numin[len(numin)-1] == u"a": |
posts.append(u"a") |
numin = numin[:-1] |
|
#base numbers |
if u"ve" in posts: |
for n in range(len(num)): |
if numin == numord[n]: |
outoct = n |
outdec = n |
ret["word"]["navi"] = unicode(outdec) + u"." |
ret["dec"] = outdec |
ret["oct"] = outoct |
return ret |
else: |
for n in range(len(num)): |
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") |