diff --git a/corpus_import/Makefile.jbo b/corpus_import/Makefile.jbo index 4769e66..ec18b41 100644 --- a/corpus_import/Makefile.jbo +++ b/corpus_import/Makefile.jbo @@ -2,11 +2,10 @@ define segment_rule $(root)$(original_dir)/$(1).tk.xml: $(root)$(really_original)/$(1).xml mkdir -p $(root)$(original_dir) - python -m jk.segment_crude --in_file $$(1) --out_file $$@ --cmd segment + $(python) -m jk.segment_crude --vlatai --in_file $$(1) --out_file $$@ $(root)$(original_dir)/$(1).xml: $(root)$(original_dir)/$(1).tk.xml - mkdir -p $(root)$(original_dir) - python -m jk.segment_crude --in_file $$(1) --out_file $$@ --cmd parse + $(python) -m jk.segment_crude --jbofihe --in_file $$(1) --out_file $$@ endef $(foreach file,$(files),$(eval $(call segment_rule,$(file)))) @@ -15,5 +14,14 @@ $(foreach file,$(files),$(eval $(call segment_rule,$(file)))) $(python) -m jk.compounds --make_rafsi --word $(1) --pos $(2) --out $@ %.token.longrafsi: %.token.rafsi - $(python) -m jk.compounds --make_longrafsi --rafsi $(1) --out $@ + $(python) -m jk.compounds --make_longrafsi --rafsi $(1) --out $@ --in_pickle $(SB_MODELS)/rafsi.pickle + +%.token.pos: %.token.word + $(python) -m jk.pos --word $(1) --out $@ --in_pickle $(SB_MODELS)/pos.pickle + +%.token.vlatai: %.token.word %.token.pos + $(python) -m jk.vlatai --vlatai --word $(1) --pos $(2) --out $@ + +%.token.exp: %.token.word %.token.vlatai + $(python) -m jk.vlatai --experimental --word $(1) --tai $(2) --out $@ --in_pickle $(SB_MODELS)/catni.pickle diff --git a/corpus_import/annotate/python/jk/compounds.py b/corpus_import/annotate/python/jk/compounds.py index eaefadf..cb1cdb6 100644 --- a/corpus_import/annotate/python/jk/compounds.py +++ b/corpus_import/annotate/python/jk/compounds.py @@ -2,6 +2,7 @@ import re import sb.util as util +import cPickle as pickle def compound_to_affixes(compound): """Split a compound word into affixes. @@ -36,2912 +37,6 @@ def compound_to_affixes(compound): return tuple() -rafsi_dict = { - "ba'a": "barna", - "ba'e": "balre", - "ba'i": "banli", - "ba'o": "banro", - "ba'u": "bacru", - "bab": "zbabu", - "bac": "bancu", - "bad": "bandu", - "baf": "bakfu", - "bag": "bargu", - "bai": "bapli", - "baj": "bajra", - "bak": "bakni", - "bal": "banli", - "bam": "jbama", - "ban": "bangu", - "bap": "bapli", - "bar": "bartu", - "bas": "basti", - "bat": "batci", - "bau": "bangu", - "bav": "balvi", - "bax": "banxa", - "baz": "banzu", - "be'a": "bersa", - "be'e": "bende", - "be'i": "benji", - "be'o": "bemro", - "be'u": "betfu", - "beb": "bebna", - "bed": "bende", - "bef": "betfu", - "beg": "bengo", - "bei": "bevri", - "bej": "benji", - "bem": "bemro", - "ben": "besna", - "ber": "berti", - "bes": "bersa", - "bet": "betri", - "bev": "bevri", - "bi'a": "bilma", - "bi'e": "brife", - "bi'i": "jbini", - "bi'o": "binxo", - "bi'u": "bitmu", - "bic": "bifce", - "bid": "bindo", - "bif": "brife", - "big": "bilga", - "bij": "briju", - "bik": "bikla", - "bil": "bilni", - "bim": "bitmu", - "bin": "jbini", - "bir": "birka", - "bis": "bisli", - "bit": "birti", - "biv": "bi", - "bix": "binxo", - "biz": "bi'i", - "bla": "blanu", - "ble": "ruble", - "bli": "bliku", - "blo": "bloti", - "blu": "ciblu", - "bo'a": "boxna", - "bo'e": "brode", - "bo'i": "botpi", - "bo'o": "boxfo", - "bo'u": "bongu", - "bof": "boxfo", - "bog": "bongu", - "boi": "bolci", - "bol": "bolci", - "bon": "boxna", - "bor": "bo", - "bot": "botpi", - "bra": "barda", - "bre": "bredi", - "bri": "bridi", - "bro": "xebro", - "bru": "burcu", - "bu'a": "bruna", - "bu'e": "bunre", - "bu'i": "bu", - "bu'o": "budjo", - "bu'u": "bukpu", - "bud": "bunda", - "buj": "budjo", - "buk": "bukpu", - "bul": "bu'a", - "bum": "bumru", - "bun": "bruna", - "bur": "bunre", - "bus": "bu", - "ca'a": "cabra", - "ca'e": "catke", - "ca'i": "catni", - "ca'o": "canko", - "ca'u": "canlu", - "cab": "cabna", - "cac": "tcaci", - "cad": "cando", - "caf": "cafne", - "cag": "cange", - "cai": "carmi", - "caj": "canja", - "cak": "calku", - "cal": "canlu", - "cam": "carmi", - "can": "canre", - "cap": "ckape", - "car": "carna", - "cas": "ckasu", - "cat": "cartu", - "cau": "claxu", - "cav": "carvi", - "cax": "caxno", - "caz": "ca'a", - "ce'a": "cecla", - "ce'i": "cteki", - "ce'o": "ce'o", - "ce'u": "cecmu", - "cec": "ce", - "ced": "cerda", - "cei": "cevni", - "cek": "creka", - "cel": "cecla", - "cem": "cecmu", - "cen": "centi", - "cer": "cerni", - "ces": "censa", - "cev": "cevni", - "cez": "ce'i", - "cfa": "cfari", - "cfi": "cfila", - "cfu": "ricfu", - "ci'a": "ciska", - "ci'e": "ciste", - "ci'i": "cinri", - "ci'o": "citno", - "ci'u": "ckilu", - "cib": "ci", - "cic": "cilce", - "cid": "cidni", - "cif": "cifnu", - "cig": "cigla", - "cij": "cinje", - "cik": "cikna", - "cil": "cilta", - "cim": "cilmo", - "cin": "cinse", - "cip": "cipra", - "cir": "citri", - "cis": "crisa", - "cit": "citno", - "civ": "civla", - "ciz": "cizra", - "cka": "ckana", - "cke": "ckeji", - "cki": "ciksi", - "cko": "cokcu", - "cku": "cukta", - "cla": "clani", - "cli": "cilre", - "clu": "culno", - "cma": "cmalu", - "cme": "cmene", - "cmi": "cmima", - "cmo": "cmoni", - "cmu": "jicmu", - "cna": "canpa", - "cne": "cenba", - "cni": "cinmo", - "cno": "condi", - "cnu": "macnu", - "co'a": "co'a", - "co'e": "co'e", - "co'i": "cmoni", - "co'u": "co'u", - "coi": "condi", - "col": "co", - "com": "co'e", - "con": "condi", - "cor": "cortu", - "cpa": "cpacu", - "cpe": "cpedu", - "cpi": "cipni", - "cpu": "lacpu", - "cra": "crane", - "cre": "certu", - "cri": "cirko", - "cro": "cortu", - "cru": "curmi", - "cta": "catlu", - "cte": "nicte", - "cti": "citka", - "cto": "xecto", - "ctu": "ctuca", - "cu'a": "cuxna", - "cu'e": "ckule", - "cu'i": "cumki", - "cu'o": "cunso", - "cu'u": "cuntu", - "cuc": "cutci", - "cuk": "cukla", - "cul": "cumla", - "cum": "cumki", - "cun": "cunso", - "cup": "clupa", - "cur": "curnu", - "cus": "cusku", - "cut": "cutne", - "cuv": "curve", - "cux": "cuxna", - "da'a": "damba", - "da'e": "danre", - "da'i": "darxi", - "da'o": "darno", - "da'u": "danlu", - "dab": "damba", - "dac": "dacru", - "dad": "dandu", - "daf": "danfu", - "dag": "dargu", - "dai": "dacti", - "daj": "dadjo", - "dak": "dakfu", - "dal": "danlu", - "dam": "danmo", - "dan": "danti", - "dap": "dapma", - "dar": "darno", - "das": "dasni", - "dat": "drata", - "dau": "darlu", - "dav": "da", - "dax": "darxi", - "daz": "da'a", - "de'a": "denpa", - "de'i": "denci", - "de'o": "delno", - "de'u": "dertu", - "deb": "dembi", - "dec": "decti", - "deg": "degji", - "dei": "djedi", - "dej": "dejni", - "dek": "dekto", - "del": "delno", - "dem": "denmi", - "den": "denci", - "dep": "denpa", - "der": "dertu", - "des": "desku", - "det": "detri", - "di'a": "jdima", - "di'e": "dirce", - "di'i": "jdini", - "di'o": "dinko", - "di'u": "dinju", - "dib": "dirba", - "dic": "dikca", - "dig": "dirgo", - "dij": "dinju", - "dik": "dikni", - "dil": "dilnu", - "dim": "dimna", - "din": "jdini", - "dir": "dicra", - "diz": "dizlo", - "dja": "cidja", - "dje": "djedi", - "dji": "djica", - "djo": "sadjo", - "dju": "sidju", - "do'i": "donri", - "do'o": "dotco", - "doi": "do", - "don": "do", - "dor": "donri", - "dot": "dotco", - "dra": "drani", - "dre": "derxi", - "dri": "badri", - "dro": "cidro", - "dru": "drudi", - "du'a": "dunda", - "du'e": "dukse", - "du'i": "dunli", - "du'o": "du", - "du'u": "dunku", - "dub": "du", - "dud": "dunda", - "dug": "dugri", - "duj": "dunja", - "duk": "dunku", - "dul": "jduli", - "dum": "du'u", - "dun": "dunli", - "dur": "dunra", - "dus": "dukse", - "dut": "dukti", - "dza": "da", - "dze": "dzena", - "dzi": "dizlo", - "dzu": "cadzu", - "fa'a": "farna", - "fa'e": "fatne", - "fa'i": "facki", - "fa'o": "fanmo", - "fa'u": "farlu", - "fac": "fatci", - "fad": "fadni", - "fag": "fagri", - "fai": "fatri", - "fak": "facki", - "fal": "farlu", - "fam": "fanmo", - "fan": "falnu", - "fap": "fapro", - "far": "farna", - "fas": "fraso", - "fat": "fatne", - "fau": "fasnu", - "fav": "farvi", - "fax": "fraxu", - "faz": "fanza", - "fe'a": "fenra", - "fe'i": "fetsi", - "fe'o": "fenso", - "fe'u": "fengu", - "feb": "febvi", - "fed": "fendi", - "feg": "fengu", - "fei": "fepni", - "fek": "fenki", - "fem": "femti", - "fen": "fenso", - "fep": "fepni", - "fer": "fenra", - "fes": "festi", - "fet": "fetsi", - "fi'a": "cfika", - "fi'e": "finpe", - "fi'i": "finti", - "fi'o": "friko", - "fi'u": "cfipu", - "fic": "frica", - "fig": "figre", - "fik": "cfika", - "fil": "frili", - "fin": "finti", - "fip": "finpe", - "fir": "flira", - "fis": "filso", - "fit": "friti", - "fla": "flalu", - "fle": "flecu", - "fli": "fliba", - "flo": "foldi", - "flu": "fulta", - "fo'a": "fo'a", - "fo'e": "fo'e", - "fo'i": "fo'i", - "fo'o": "fonmo", - "foi": "foldi", - "fom": "fonmo", - "fon": "fonxa", - "fra": "frati", - "fre": "ferti", - "fri": "lifri", - "fro": "forca", - "fru": "frumu", - "fu'a": "funca", - "fu'e": "fuzme", - "fu'i": "fukpi", - "fuk": "fukpi", - "ful": "fulta", - "fun": "funca", - "fur": "fusra", - "fuz": "fuzme", - "ga'a": "grana", - "ga'e": "ganse", - "ga'i": "galfi", - "ga'o": "ganlo", - "ga'u": "galtu", - "gac": "gapci", - "gad": "gadri", - "gaf": "galfi", - "gai": "gacri", - "gal": "galtu", - "gan": "ganra", - "gap": "gapru", - "gar": "garna", - "gas": "ganse", - "gat": "gasta", - "gau": "gasnu", - "gax": "ganxo", - "gaz": "ganzu", - "ge'a": "gerna", - "ge'o": "gento", - "ge'u": "gerku", - "gei": "gleki", - "gej": "genja", - "gek": "gleki", - "gen": "gerna", - "ger": "gerku", - "get": "gento", - "gex": "genxu", - "gi'a": "gidva", - "gi'e": "zgike", - "gi'o": "gigdo", - "gi'u": "gismu", - "gic": "glico", - "gid": "gidva", - "gig": "gigdo", - "gik": "ginka", - "gim": "gismu", - "gin": "jgina", - "gir": "girzu", - "git": "jgita", - "gla": "glare", - "gle": "gletu", - "gli": "glico", - "glu": "gluta", - "goc": "gocti", - "got": "gotro", - "gra": "grake", - "gre": "pagre", - "gri": "girzu", - "gru": "gurni", - "gu'a": "gunka", - "gu'e": "gugde", - "gu'i": "gusni", - "gu'o": "gunro", - "gub": "gubni", - "guc": "gutci", - "gud": "gundi", - "gug": "gugde", - "guk": "guska", - "gum": "gunma", - "gun": "gunka", - "gur": "gunro", - "gus": "gusni", - "gut": "gunta", - "guz": "guzme", - "ja'a": "jatna", - "ja'e": "jalge", - "ja'i": "jadni", - "ja'o": "jarco", - "ja'u": "jgalu", - "jab": "janbe", - "jac": "djacu", - "jad": "jadni", - "jaf": "jamfu", - "jag": "jalge", - "jai": "jgari", - "jaj": "jmaji", - "jak": "jarki", - "jal": "janli", - "jam": "jamna", - "jan": "janco", - "jap": "jaspu", - "jar": "jdari", - "jas": "jansu", - "jat": "janta", - "jau": "djacu", - "jav": "ja", - "jba": "jbari", - "jbe": "jbena", - "jbi": "jibni", - "jbo": "lojbo", - "jbu": "jubme", - "jda": "lijda", - "jde": "kajde", - "jdi": "jdice", - "jdu": "jduli", - "je'a": "jecta", - "je'e": "jetce", - "je'i": "jersi", - "je'o": "jegvo", - "je'u": "jetnu", - "jec": "jecta", - "jed": "jendu", - "jef": "jeftu", - "jeg": "jegvo", - "jei": "jenmi", - "jel": "jelca", - "jem": "jenmi", - "jen": "jenca", - "jer": "jbera", - "jes": "jesni", - "jet": "jetnu", - "jev": "je", - "jex": "jerxo", - "jez": "jei", - "jga": "jganu", - "jge": "jgena", - "jgi": "jgira", - "ji'a": "jinga", - "ji'e": "jmive", - "ji'i": "jinvi", - "ji'o": "jipno", - "ji'u": "jvinu", - "jib": "jibri", - "jic": "jimca", - "jif": "jitfa", - "jig": "jinga", - "jij": "jijnu", - "jik": "jikca", - "jil": "jilka", - "jim": "jinme", - "jin": "djine", - "jip": "jipno", - "jir": "jinru", - "jis": "jinsa", - "jit": "jimte", - "jiv": "jinvi", - "jiz": "jinzi", - "jma": "jamfu", - "jme": "jemna", - "jmi": "jimpe", - "jo'e": "jorne", - "jo'o": "jordo", - "jo'u": "jo'u", - "joi": "joi", - "jol": "joi", - "jom": "jo'e", - "jon": "jorne", - "jor": "jordo", - "jov": "jo", - "ju'a": "jufra", - "ju'e": "julne", - "ju'i": "jundi", - "ju'o": "djuno", - "jub": "jubme", - "jud": "jundi", - "juf": "jufra", - "jug": "jungo", - "juk": "jukni", - "jul": "junla", - "jum": "jurme", - "jun": "djuno", - "jup": "jukpa", - "jur": "junri", - "jus": "jursa", - "jut": "jutsi", - "juv": "ju", - "jux": "juxre", - "jva": "javni", - "jve": "je", - "jvi": "jivna", - "jvo": "lujvo", - "ka'a": "katna", - "ka'e": "kakne", - "ka'i": "krati", - "ka'o": "kanro", - "ka'u": "kantu", - "kab": "karbi", - "kac": "kancu", - "kad": "kandi", - "kaf": "ckafi", - "kag": "kagni", - "kai": "ckaji", - "kaj": "kanji", - "kak": "klaku", - "kal": "kanla", - "kam": "ka", - "kan": "kansa", - "kap": "skapi", - "kar": "kalri", - "kas": "kalsa", - "kat": "kalte", - "kau": "kampu", - "kav": "kavbu", - "kax": "kanxe", - "ke'a": "kevna", - "ke'e": "ke'e", - "ke'i": "kecti", - "ke'o": "kelvo", - "ke'u": "krefu", - "kec": "kecti", - "kei": "kelci", - "kej": "ckeji", - "kel": "kelci", - "kem": "ke", - "ken": "kenra", - "kep": "ke'e", - "ker": "kerlo", - "kes": "kensa", - "ket": "ketco", - "kev": "kevna", - "kez": "kei", - "ki'a": "krixa", - "ki'e": "kicne", - "ki'i": "ckini", - "ki'o": "kilto", - "ki'u": "krinu", - "kib": "kibro", - "kic": "kicne", - "kij": "kijno", - "kik": "ckiku", - "kil": "kinli", - "kin": "skina", - "kir": "ckire", - "kis": "kisto", - "kit": "kliti", - "kix": "krixa", - "kla": "klama", - "kle": "klesi", - "kli": "klina", - "klo": "diklo", - "klu": "kulnu", - "ko'a": "kojna", - "ko'e": "kolme", - "ko'i": "kobli", - "ko'o": "skoto", - "ko'u": "konju", - "kob": "kobli", - "koi": "korbi", - "koj": "kojna", - "kok": "korka", - "kol": "kolme", - "kom": "komcu", - "kon": "konju", - "kor": "korbi", - "kos": "kosta", - "kot": "skoto", - "kra": "krasi", - "kre": "kerfa", - "kri": "krici", - "kro": "korcu", - "kru": "kruvi", - "ku'a": "kumfa", - "ku'e": "kuspe", - "ku'i": "kurji", - "ku'o": "skuro", - "ku'u": "ckunu", - "kub": "kubli", - "kuc": "kruca", - "kuf": "kufra", - "kuj": "kurji", - "kuk": "kukte", - "kul": "ckule", - "kum": "kumfa", - "kun": "kunra", - "kup": "kuspe", - "kur": "kurfa", - "kus": "kusru", - "kut": "kunti", - "kuz": "ku'a", - "la'a": "lasna", - "la'e": "lakne", - "la'i": "lamji", - "la'o": "latmo", - "la'u": "lalxu", - "lab": "blabi", - "lac": "lacri", - "lad": "ladru", - "laf": "lafti", - "lag": "vlagi", - "lai": "klani", - "laj": "klaji", - "lak": "lakse", - "lal": "lanli", - "lam": "lamji", - "lan": "lanme", - "lap": "lacpu", - "lar": "larcu", - "las": "slasi", - "lat": "mlatu", - "lau": "cladu", - "lax": "lanxe", - "laz": "lanzu", - "le'a": "lebna", - "le'i": "pleji", - "le'o": "lenjo", - "le'u": "lerfu", - "leb": "lebna", - "lec": "lerci", - "led": "mledi", - "lei": "klesi", - "lej": "pleji", - "lek": "lenku", - "lem": "le'e", - "len": "lenjo", - "ler": "lerfu", - "let": "gletu", - "li'a": "cliva", - "li'e": "lidne", - "li'i": "linji", - "li'o": "linto", - "li'u": "litru", - "lib": "libjo", - "lic": "litce", - "lid": "lindi", - "lif": "lifri", - "lig": "sligu", - "lij": "linji", - "lik": "litki", - "lil": "livla", - "lim": "limna", - "lin": "linsi", - "lir": "clira", - "lis": "lisri", - "lit": "clite", - "liv": "cliva", - "lix": "plixa", - "liz": "li'i", - "lo'i": "bloti", - "lo'o": "slovo", - "lo'u": "lorxu", - "lob": "lojbo", - "loi": "loldi", - "loj": "logji", - "lol": "loldi", - "lom": "lo'e", - "lor": "lorxu", - "lot": "bloti", - "lov": "slovo", - "lu'a": "pluta", - "lu'e": "klupe", - "lu'i": "lumci", - "lu'o": "lubno", - "lub": "lunbe", - "luj": "pluja", - "lum": "lumci", - "lun": "mluni", - "lup": "klupe", - "lur": "lunra", - "lus": "lunsa", - "lut": "pluta", - "luv": "lujvo", - "luz": "kluza", - "ma'a": "cmana", - "ma'e": "marce", - "ma'i": "masti", - "ma'o": "cmavo", - "ma'u": "makcu", - "mab": "mabru", - "mac": "manci", - "mad": "marde", - "maf": "makfa", - "mag": "margu", - "mai": "marji", - "maj": "marji", - "mak": "maksi", - "mal": "mabla", - "mam": "mamta", - "man": "manku", - "map": "mapku", - "mar": "manri", - "mas": "malsi", - "mat": "mapti", - "mau": "zmadu", - "mav": "mavji", - "max": "marxa", - "me'a": "mleca", - "me'e": "cmene", - "me'i": "mensi", - "me'o": "mekso", - "me'u": "mentu", - "meb": "mebri", - "mec": "mleca", - "meg": "megdo", - "mei": "mei", - "mej": "meljo", - "mek": "mekso", - "mel": "melbi", - "mem": "mei", - "men": "menli", - "mer": "merko", - "mes": "mensi", - "met": "mentu", - "mex": "mexno", - "mi'a": "cmila", - "mi'e": "minde", - "mi'i": "minji", - "mi'o": "misno", - "mi'u": "mintu", - "mib": "mi", - "mic": "mikce", - "mid": "minde", - "mif": "mifra", - "mij": "midju", - "mik": "mikri", - "mil": "milti", - "mim": "cmima", - "min": "jmina", - "mip": "mipri", - "mir": "minra", - "mis": "misno", - "mit": "mintu", - "miv": "jmive", - "mix": "mixre", - "mla": "mlana", - "mle": "melbi", - "mli": "milxe", - "mlo": "molki", - "mlu": "simlu", - "mo'a": "morna", - "mo'i": "morji", - "mo'o": "molro", - "mo'u": "moklu", - "mob": "mo'a", - "moc": "mokca", - "moi": "moi", - "moj": "morji", - "mol": "moklu", - "mom": "moi", - "mon": "morna", - "mor": "morko", - "mos": "mosra", - "mov": "mo'i", - "mra": "marbi", - "mre": "merli", - "mri": "mrilu", - "mro": "morsi", - "mru": "mruli", - "mu'a": "murta", - "mu'e": "munje", - "mu'i": "mukti", - "mu'o": "mulno", - "mu'u": "muvdu", - "muc": "smuci", - "mud": "mudri", - "muf": "mu'e", - "muj": "munje", - "muk": "mukti", - "mul": "mulno", - "mum": "mu", - "mun": "smuni", - "mup": "mupli", - "mur": "murta", - "mus": "muslo", - "mut": "mucti", - "muv": "muvdu", - "muz": "muzga", - "na'a": "nanca", - "na'e": "natfe", - "na'i": "nalci", - "na'o": "cnano", - "na'u": "namcu", - "nab": "nanba", - "nac": "namcu", - "nad": "nandu", - "naf": "natfe", - "nag": "narge", - "nai": "natmi", - "naj": "narju", - "nak": "nakni", - "nal": "na'e", - "nam": "nabmi", - "nan": "snanu", - "nar": "na", - "nat": "natmi", - "nau": "nanmu", - "nav": "nanvi", - "nax": "naxle", - "naz": "nazbi", - "ne'i": "nenri", - "ne'o": "cnebo", - "ne'u": "cnemu", - "neb": "cnebo", - "nei": "nelci", - "nel": "nelci", - "nem": "cnemu", - "nen": "nejni", - "ner": "nenri", - "ni'a": "cnita", - "ni'e": "nilce", - "ni'i": "nibli", - "ni'o": "cnino", - "ni'u": "ninmu", - "nib": "nibli", - "nic": "cnici", - "nid": "snidu", - "nik": "nikle", - "nil": "ni", - "nim": "ninmu", - "nin": "cnino", - "nip": "snipa", - "nir": "nirna", - "nis": "cnisa", - "nit": "cnita", - "niv": "nivji", - "nix": "nixli", - "no'e": "no'e", - "no'i": "nobli", - "noi": "notci", - "nol": "nobli", - "non": "no", - "nor": "no'e", - "not": "notci", - "nu'a": "snura", - "nu'e": "nupre", - "nu'i": "nutli", - "nu'o": "nu'o", - "nuj": "snuji", - "nuk": "nukni", - "nul": "nutli", - "num": "nurma", - "nun": "nu", - "nup": "nupre", - "nur": "snura", - "nut": "snuti", - "nuz": "nuzba", - "pa'a": "pacna", - "pa'e": "prane", - "pa'i": "prami", - "pa'o": "panlo", - "pa'u": "patfu", - "pab": "parbi", - "pac": "palci", - "pad": "pandi", - "paf": "patfu", - "pag": "pagbu", - "pai": "pajni", - "paj": "spaji", - "pak": "palku", - "pal": "prali", - "pam": "prami", - "pan": "panci", - "pap": "panpi", - "par": "cpare", - "pas": "pastu", - "pat": "pante", - "pau": "pagbu", - "pav": "pa", - "pax": "patxu", - "paz": "panzi", - "pe'a": "preja", - "pe'i": "penmi", - "pe'o": "pendo", - "pe'u": "pencu", - "peb": "penbi", - "pec": "pencu", - "ped": "pendo", - "pei": "pensi", - "pej": "preja", - "pel": "pelxu", - "pem": "pemci", - "pen": "penmi", - "per": "perli", - "pes": "pensi", - "pet": "petso", - "pev": "pe'a", - "pex": "pesxu", - "pez": "pezli", - "pi'a": "pilka", - "pi'e": "plipe", - "pi'i": "pilji", - "pi'o": "pipno", - "pi'u": "pimlu", - "pib": "plibu", - "pic": "picti", - "pid": "pindi", - "pif": "pinfu", - "pij": "prije", - "pik": "pinka", - "pil": "pilka", - "pim": "pimlu", - "pin": "pinta", - "pip": "plipe", - "pir": "pixra", - "pis": "pinsi", - "pit": "plita", - "piv": "pi'u", - "pix": "pinxe", - "piz": "pi", - "pla": "platu", - "ple": "pelji", - "pli": "pilno", - "plo": "polje", - "plu": "daplu", - "po'a": "spoja", - "po'e": "ponse", - "po'i": "porpi", - "po'o": "ponjo", - "po'u": "spofu", - "pof": "spofu", - "poi": "porsi", - "poj": "spoja", - "pol": "polno", - "pon": "ponjo", - "pop": "porpi", - "por": "porsi", - "pos": "ponse", - "pot": "porto", - "pra": "cupra", - "pre": "prenu", - "pri": "prina", - "pro": "fapro", - "pru": "purci", - "pu'a": "pluka", - "pu'e": "pulce", - "pu'i": "punji", - "pu'o": "purmo", - "pu'u": "sputu", - "puc": "pulce", - "pud": "purdi", - "puj": "punji", - "puk": "pluka", - "pul": "punli", - "pum": "purmo", - "pun": "pruni", - "pur": "purci", - "pus": "pu'i", - "put": "sputu", - "puv": "pu'u", - "ra'a": "srana", - "ra'e": "ralte", - "ra'i": "ranji", - "ra'o": "radno", - "ra'u": "raktu", - "rab": "xrabo", - "rac": "ralci", - "rad": "randa", - "raf": "rafsi", - "rag": "rango", - "rai": "traji", - "raj": "sraji", - "rak": "sraku", - "ral": "ralju", - "ram": "ranmi", - "ran": "ranti", - "rap": "rapli", - "rar": "rarna", - "ras": "grasu", - "rat": "ratni", - "rau": "gradu", - "rav": "ragve", - "rax": "ranxi", - "raz": "brazo", - "re'a": "remna", - "re'e": "trene", - "re'i": "renvi", - "re'o": "renro", - "re'u": "rectu", - "reb": "rebla", - "rec": "rectu", - "red": "bredi", - "ref": "krefu", - "rei": "preti", - "rej": "vreji", - "rek": "greku", - "rel": "re", - "rem": "remna", - "ren": "trene", - "rep": "crepu", - "rer": "renro", - "res": "respa", - "ret": "preti", - "rev": "renvi", - "ri'a": "rinka", - "ri'e": "rirxe", - "ri'i": "ritli", - "ri'o": "crino", - "ri'u": "rinju", - "rib": "cribe", - "ric": "tricu", - "rid": "crida", - "rif": "ricfu", - "rig": "rigni", - "rij": "rijno", - "rik": "rinka", - "ril": "rilti", - "rim": "rimni", - "rin": "krinu", - "rip": "cripu", - "rir": "rirni", - "ris": "rismi", - "rit": "brito", - "riv": "rivbi", - "rix": "trixe", - "ro'a": "prosa", - "ro'i": "rokci", - "ro'o": "ropno", - "ro'u": "rotsu", - "rod": "broda", - "rog": "romge", - "roi": "roi", - "rok": "rokci", - "rol": "ro", - "rom": "roi", - "ron": "ropno", - "ror": "rorci", - "ros": "prosa", - "rot": "rotsu", - "roz": "rozgu", - "ru'a": "sruma", - "ru'e": "pruce", - "ru'i": "pruxi", - "ru'o": "rusko", - "ru'u": "rupnu", - "rub": "ruble", - "ruc": "pruce", - "rud": "drudi", - "ruf": "rufsu", - "ruj": "kruji", - "ruk": "rusko", - "rul": "xrula", - "rum": "runme", - "run": "rutni", - "rup": "rupnu", - "rur": "sruri", - "rus": "grusi", - "rut": "grute", - "ruv": "kruvi", - "rux": "pruxi", - "sa'a": "sanga", - "sa'e": "satre", - "sa'i": "sanli", - "sa'o": "salpo", - "sa'u": "sarcu", - "sab": "sabji", - "sac": "stace", - "sad": "snada", - "sag": "sanga", - "sai": "sanmi", - "saj": "sanji", - "sak": "sakci", - "sal": "sakli", - "sam": "skami", - "san": "spano", - "sap": "sampu", - "sar": "slari", - "sas": "srasu", - "sat": "sakta", - "sau": "slabu", - "sav": "savru", - "sax": "sarxe", - "saz": "sazri", - "se'a": "setca", - "se'i": "sevzi", - "se'u": "selfu", - "seb": "steba", - "sec": "senci", - "sed": "stedu", - "sef": "selfu", - "sei": "sepli", - "sel": "se", - "sen": "senpi", - "sep": "sepli", - "ser": "serti", - "set": "senta", - "sev": "senva", - "sez": "sevzi", - "sfa": "sfasa", - "sfe": "sefta", - "sfo": "sfofa", - "sfu": "sufti", - "si'a": "sinma", - "si'e": "snime", - "si'i": "sicni", - "si'o": "sidbo", - "si'u": "simxu", - "sib": "sidbo", - "sic": "stici", - "sid": "stidi", - "sig": "sigja", - "sij": "skiji", - "sik": "silka", - "sil": "siclu", - "sim": "simxu", - "sin": "tsina", - "sip": "sipna", - "sir": "sirji", - "sis": "sisku", - "sit": "sitna", - "siv": "sivni", - "six": "sirxo", - "siz": "si'o", - "ska": "skari", - "ske": "saske", - "ski": "skicu", - "sko": "skori", - "sku": "cusku", - "sla": "salci", - "sle": "selci", - "sli": "slilu", - "slo": "solji", - "slu": "sluji", - "sma": "smaji", - "sme": "semto", - "smi": "simsa", - "smo": "smoka", - "smu": "smuni", - "sna": "sance", - "sne": "senva", - "sni": "sinxa", - "sno": "masno", - "snu": "casnu", - "so'a": "sovda", - "so'e": "sobde", - "so'i": "so'i", - "so'o": "sombo", - "sob": "sobde", - "soc": "sorcu", - "sod": "sodva", - "sof": "softo", - "sog": "sorgu", - "soi": "sonci", - "soj": "so'a", - "sol": "solri", - "som": "sombo", - "son": "sonci", - "sop": "so'e", - "sor": "so'i", - "sos": "so'o", - "sot": "so'u", - "sov": "sovda", - "soz": "so", - "spa": "spati", - "spe": "speni", - "spi": "spisa", - "spo": "daspo", - "spu": "spuda", - "sra": "sarji", - "sre": "srera", - "sri": "dasri", - "sro": "sorcu", - "sru": "sruri", - "sta": "stali", - "ste": "liste", - "sti": "sisti", - "sto": "stodi", - "stu": "stuzi", - "su'a": "stura", - "su'e": "su'e", - "su'i": "sumti", - "su'o": "su'o", - "su'u": "sfubu", - "sub": "sfubu", - "suc": "sucta", - "sud": "sudga", - "sug": "sunga", - "suj": "sumji", - "suk": "suksa", - "sul": "sunla", - "sum": "sumti", - "sun": "stuna", - "sup": "su'e", - "sur": "surla", - "sut": "sutra", - "suv": "su'u", - "suz": "su'o", - "ta'a": "tavla", - "ta'e": "tanxe", - "ta'i": "tatpi", - "ta'o": "tanbo", - "ta'u": "taxfu", - "tab": "tabno", - "tac": "tance", - "tad": "tadni", - "taf": "taxfu", - "tag": "tagji", - "tai": "tarmi", - "taj": "tamji", - "tak": "staku", - "tal": "talsa", - "tam": "tarmi", - "tan": "tsani", - "tap": "stapa", - "tar": "tarci", - "tas": "tansi", - "tat": "tatru", - "tau": "tanru", - "tav": "tavla", - "tax": "tanxe", - "taz": "ta", - "tca": "tcadu", - "tce": "mutce", - "tci": "tutci", - "tco": "ketco", - "tcu": "nitcu", - "te'a": "terpa", - "te'i": "steci", - "te'o": "stero", - "te'u": "tengu", - "teb": "ctebi", - "tec": "steci", - "ted": "terdi", - "tef": "tenfa", - "teg": "tengu", - "tei": "temci", - "tek": "cteki", - "tel": "stela", - "tem": "temci", - "ten": "tcena", - "tep": "terpa", - "ter": "te", - "tet": "terto", - "ti'a": "tcima", - "ti'e": "trixe", - "ti'i": "stidi", - "ti'o": "ctino", - "ti'u": "tixnu", - "tib": "tinbe", - "tic": "tcica", - "tid": "tcidu", - "tif": "ti", - "tig": "tigni", - "tij": "tilju", - "tik": "stika", - "til": "tcila", - "tim": "tcima", - "tin": "tirna", - "tip": "tikpa", - "tir": "tirse", - "tis": "tisna", - "tit": "titla", - "tiv": "tivni", - "tix": "tixnu", - "tiz": "stizu", - "to'a": "tonga", - "to'e": "to'e", - "to'i": "torni", - "to'u": "tordu", - "toc": "troci", - "tod": "toldi", - "tog": "tonga", - "toi": "troci", - "tok": "toknu", - "tol": "to'e", - "ton": "torni", - "tor": "tordu", - "tra": "tarti", - "tre": "mitre", - "tri": "trina", - "tro": "jitro", - "tru": "turni", - "tsa": "tsali", - "tse": "zutse", - "tsi": "tsiju", - "tsu": "rotsu", - "tu'a": "tumla", - "tu'e": "tuple", - "tu'i": "tugni", - "tu'o": "tunlo", - "tu'u": "tubnu", - "tub": "tunba", - "tuf": "tu", - "tug": "tugni", - "tuj": "tujli", - "tuk": "tunka", - "tul": "tunlo", - "tum": "tumla", - "tun": "tunta", - "tup": "tuple", - "tur": "stura", - "tut": "tutra", - "tuz": "stuzi", - "va'i": "vamji", - "va'u": "vasxu", - "vab": "vanbi", - "vac": "vanci", - "vai": "vajni", - "vaj": "vajni", - "val": "valsi", - "vam": "vamji", - "van": "vanju", - "var": "vacri", - "vas": "vasru", - "vat": "vamtu", - "vau": "vasru", - "vax": "vasxu", - "vaz": "va", - "ve'a": "verba", - "ve'e": "ve'e", - "ve'u": "vecnu", - "vef": "venfu", - "vei": "vreji", - "vel": "ve", - "ven": "vecnu", - "ver": "verba", - "ves": "vensa", - "vi'a": "viska", - "vi'e": "vitke", - "vi'i": "vikmi", - "vi'o": "vitno", - "vi'u": "vimcu", - "vib": "vibna", - "vic": "vimcu", - "vid": "vindu", - "vif": "vifne", - "vij": "vinji", - "vik": "viknu", - "vil": "vlile", - "vim": "vikmi", - "vin": "jvinu", - "vip": "vipsi", - "vir": "vidru", - "vis": "viska", - "vit": "vitci", - "viz": "vi", - "vla": "valsi", - "vle": "zivle", - "vli": "vlipa", - "vo'a": "voksa", - "voi": "vofli", - "vok": "voksa", - "vol": "vofli", - "von": "vo", - "vor": "vorme", - "vra": "vraga", - "vre": "vreta", - "vri": "virnu", - "vro": "vorme", - "vru": "savru", - "vu'e": "vrude", - "vu'i": "vrusi", - "vu'o": "vukro", - "vud": "vrude", - "vur": "vukro", - "vus": "vrusi", - "vuz": "vu", - "xa'a": "xatra", - "xa'e": "xance", - "xa'i": "xarci", - "xa'o": "xampo", - "xa'u": "xabju", - "xab": "xadba", - "xac": "xarci", - "xad": "xadni", - "xag": "xamgu", - "xai": "xrani", - "xaj": "xarju", - "xak": "xaksu", - "xal": "xalka", - "xam": "xajmi", - "xan": "xance", - "xap": "xampo", - "xar": "xanri", - "xas": "xamsi", - "xat": "xatsi", - "xau": "xamgu", - "xav": "xa", - "xaz": "xazdo", - "xe'a": "xedja", - "xe'i": "xekri", - "xe'o": "xendo", - "xe'u": "xenru", - "xeb": "xebro", - "xed": "xendo", - "xei": "xebni", - "xej": "xedja", - "xek": "xekri", - "xel": "xe", - "xen": "xebni", - "xer": "xenru", - "xes": "xelso", - "xet": "xecto", - "xex": "xexso", - "xi'a": "xirma", - "xi'o": "xriso", - "xi'u": "xislu", - "xil": "xislu", - "xim": "xinmo", - "xin": "xindo", - "xip": "xispo", - "xir": "xirma", - "xis": "xriso", - "xla": "xlali", - "xle": "naxle", - "xli": "nixli", - "xlu": "xlura", - "xoi": "xotli", - "xol": "xotli", - "xra": "pixra", - "xre": "mixre", - "xri": "maxri", - "xru": "xruti", - "xu'a": "xusra", - "xu'e": "xunre", - "xu'i": "xukmi", - "xu'o": "xurdo", - "xub": "xruba", - "xuk": "xruki", - "xul": "xutla", - "xum": "xukmi", - "xun": "xunre", - "xur": "xurdo", - "xus": "xusra", - "za'a": "zabna", - "za'i": "zasti", - "za'o": "za'o", - "za'u": "zargu", - "zac": "zarci", - "zag": "zargu", - "zai": "zarci", - "zaj": "zajba", - "zal": "zalvi", - "zan": "zabna", - "zar": "zanru", - "zas": "zasni", - "zat": "zasti", - "zau": "zanru", - "zaz": "za'i", - "zba": "zbasu", - "zbe": "zbepi", - "zbi": "nazbi", - "zda": "zdani", - "zdi": "zdile", - "zdo": "xazdo", - "ze'a": "zenba", - "ze'e": "ze'e", - "ze'o": "ze'o", - "zei": "zekri", - "zel": "ze", - "zen": "zenba", - "zep": "zepti", - "zer": "zekri", - "zet": "zetro", - "zev": "ze'o", - "zga": "zgana", - "zgi": "zgike", - "zgu": "rozgu", - "zi'e": "zifre", - "zi'i": "zinki", - "zi'o": "dzipo", - "zi'u": "zirpu", - "zif": "zifre", - "zin": "zinki", - "zip": "dzipo", - "zir": "zirpu", - "ziv": "zivle", - "zma": "zmadu", - "zme": "guzme", - "zmi": "zmiku", - "zmu": "zumri", - "zo'a": "zo'a", - "zo'i": "zo'i", - "zon": "zo'a", - "zor": "zo'i", - "zu'e": "zukte", - "zu'i": "zunti", - "zug": "zungi", - "zuk": "zukte", - "zul": "zunle", - "zum": "zu'o", - "zun": "zunti", - "zut": "zutse", - "zva": "zvati"} - -gismu = { - "bacru", - "badna", - "badri", - "bajra", - "bakfu", - "bakni", - "bakri", - "baktu", - "balji", - "balni", - "balre", - "balvi", - "bancu", - "bandu", - "banfi", - "bangu", - "banli", - "banro", - "banxa", - "banzu", - "bapli", - "barda", - "bargu", - "barja", - "barna", - "bartu", - "basna", - "basti", - "batci", - "batke", - "bavmi", - "baxso", - "bebna", - "bemro", - "bende", - "bengo", - "benji", - "bersa", - "berti", - "besna", - "betfu", - "betri", - "bevri", - "bidju", - "bifce", - "bikla", - "bilga", - "bilma", - "bilni", - "bindo", - "binra", - "binxo", - "birje", - "birka", - "birti", - "bisli", - "bitmu", - "blabi", - "blaci", - "blanu", - "bliku", - "bloti", - "bolci", - "bongu", - "botpi", - "boxfo", - "boxna", - "bradi", - "bratu", - "brazo", - "bredi", - "bridi", - "brife", - "briju", - "brito", - "broda", - # "brode", - # "brodi", - # "brodo", - # "brodu", - "bruna", - "budjo", - "bukpu", - "bumru", - "bunda", - "bunre", - "burcu", - "burna", - "cabna", - "cabra", - "cacra", - "cadzu", - "cafne", - "cakla", - "calku", - "canci", - "cando", - "cange", - "canja", - "canko", - "canlu", - "canpa", - "canre", - "canti", - "carce", - "carmi", - "carna", - "cartu", - "carvi", - "casnu", - "catke", - "catlu", - "catni", - "catra", - "caxno", - "cecla", - "cecmu", - "cedra", - "cenba", - "censa", - "centi", - "cerda", - "cerni", - "certu", - "cevni", - "cfari", - "cfika", - "cfila", - "cfine", - "cfipu", - "ciblu", - "cicna", - "cidja", - "cidni", - "cidro", - "cifnu", - "cigla", - "cikna", - "cikre", - "ciksi", - "cilce", - "cilmo", - "cilre", - "cilta", - "cimde", - "cimni", - "cinba", - "cindu", - "cinfo", - "cinje", - "cinki", - "cinla", - "cinmo", - "cinri", - "cinse", - "cinta", - "cinza", - "cipni", - "cipra", - "cirko", - "cirla", - "ciska", - "cisma", - "ciste", - "citka", - "citno", - "citri", - "citsi", - "civla", - "cizra", - "ckabu", - "ckafi", - "ckaji", - "ckana", - "ckape", - "ckasu", - "ckeji", - "ckiku", - "ckilu", - "ckini", - "ckire", - "ckule", - "ckunu", - "cladu", - "clani", - "claxu", - "clika", - "clira", - "clite", - "cliva", - "clupa", - "cmaci", - "cmalu", - "cmana", - "cmavo", - "cmene", - "cmila", - "cmima", - "cmoni", - "cnano", - "cnebo", - "cnemu", - "cnici", - "cnino", - "cnisa", - "cnita", - "cokcu", - "condi", - "cortu", - "cpacu", - "cpana", - "cpare", - "cpedu", - "cpina", - "cradi", - "crane", - "creka", - "crepu", - "cribe", - "crida", - "crino", - "cripu", - "crisa", - "critu", - "ctaru", - "ctebi", - "cteki", - "ctile", - "ctino", - "ctuca", - "cukla", - "cukta", - "culno", - "cumki", - "cumla", - "cunmi", - "cunso", - "cuntu", - "cupra", - "curmi", - "curnu", - "curve", - "cusku", - "cutci", - "cutne", - "cuxna", - "dacru", - "dacti", - "dadjo", - "dakfu", - "dakli", - "damba", - "damri", - "dandu", - "danfu", - "danlu", - "danmo", - "danre", - "dansu", - "danti", - "daplu", - "dapma", - "dargu", - "darlu", - "darno", - "darsi", - "darxi", - "daski", - "dasni", - "daspo", - "dasri", - "datka", - "datni", - "decti", - "degji", - "dejni", - "dekpu", - "dekto", - "delno", - "dembi", - "denci", - "denmi", - "denpa", - "dertu", - "derxi", - "desku", - "detri", - "dicra", - "dikca", - "diklo", - "dikni", - "dilcu", - "dilnu", - "dimna", - "dinju", - "dinko", - "dirba", - "dirce", - "dirgo", - "dizlo", - "djacu", - "djedi", - "djica", - "djine", - "djuno", - "donri", - "dotco", - "draci", - "drani", - "drata", - "drudi", - "dugri", - "dukse", - "dukti", - "dunda", - "dunja", - "dunku", - "dunli", - "dunra", - "dzena", - "dzipo", - "facki", - "fadni", - "fagri", - "falnu", - "famti", - "fancu", - "fange", - "fanmo", - "fanri", - "fanta", - "fanva", - "fanza", - "fapro", - "farlu", - "farna", - "farvi", - "fasnu", - "fatci", - "fatne", - "fatri", - "febvi", - "femti", - "fendi", - "fengu", - "fenki", - "fenra", - "fenso", - "fepni", - "fepri", - "ferti", - "festi", - "fetsi", - "figre", - "filso", - "finpe", - "finti", - "flalu", - "flani", - "flecu", - "fliba", - "flira", - "foldi", - "fonmo", - "fonxa", - "forca", - "fraso", - "frati", - "fraxu", - "frica", - "friko", - "frili", - "frinu", - "friti", - "frumu", - "fukpi", - "fulta", - "funca", - "fusra", - "fuzme", - "gacri", - "gadri", - "galfi", - "galtu", - "galxe", - "ganlo", - "ganra", - "ganse", - "ganti", - "ganxo", - "ganzu", - "gapci", - "gapru", - "garna", - "gasnu", - "gasta", - "genja", - "gento", - "genxu", - "gerku", - "gerna", - "gidva", - "gigdo", - "ginka", - "girzu", - "gismu", - "glare", - "gleki", - "gletu", - "glico", - "gluta", - "gocti", - "gotro", - "gradu", - "grake", - "grana", - "grasu", - "greku", - "grusi", - "grute", - "gubni", - "gugde", - "gumri", - "gundi", - "gunka", - "gunma", - "gunro", - "gunse", - "gunta", - "gurni", - "guska", - "gusni", - "gusta", - "gutci", - "gutra", - "guzme", - "jabre", - "jadni", - "jakne", - "jalge", - "jalna", - "jalra", - "jamfu", - "jamna", - "janbe", - "janco", - "janli", - "jansu", - "janta", - "jarbu", - "jarco", - "jarki", - "jaspu", - "jatna", - "javni", - "jbama", - "jbari", - "jbena", - "jbera", - "jbini", - "jdari", - "jdice", - "jdika", - "jdima", - "jdini", - "jduli", - "jecta", - "jeftu", - "jegvo", - "jelca", - "jemna", - "jenca", - "jendu", - "jenmi", - "jerna", - "jersi", - "jerxo", - "jesni", - "jetce", - "jetnu", - "jgalu", - "jganu", - "jgari", - "jgena", - "jgina", - "jgira", - "jgita", - "jibni", - "jibri", - "jicla", - "jicmu", - "jijnu", - "jikca", - "jikru", - "jilka", - "jilra", - "jimca", - "jimpe", - "jimte", - "jinci", - "jinga", - "jinku", - "jinme", - "jinru", - "jinsa", - "jinto", - "jinvi", - "jinzi", - "jipci", - "jipno", - "jirna", - "jisra", - "jitfa", - "jitro", - "jivbu", - "jivna", - "jmaji", - "jmifa", - "jmina", - "jmive", - "jordo", - "jorne", - "jubme", - "judri", - "jufra", - "jukni", - "jukpa", - "julne", - "jundi", - "jungo", - "junla", - "junri", - "junta", - "jurme", - "jursa", - "jutsi", - "juxre", - "jvinu", - "kabri", - "kacma", - "kadno", - "kafke", - "kagni", - "kajde", - "kajna", - "kakne", - "kakpa", - "kalci", - "kalri", - "kalsa", - "kalte", - "kamju", - "kamni", - "kampu", - "kanba", - "kancu", - "kandi", - "kanji", - "kanla", - "kanro", - "kansa", - "kantu", - "kanxe", - "karbi", - "karce", - "karda", - "kargu", - "karli", - "karni", - "katna", - "kavbu", - "kecti", - "kelci", - "kelvo", - "kenra", - "kensa", - "kerfa", - "kerlo", - "ketco", - "kevna", - "kibro", - "kicne", - "kijno", - "kilto", - "kinli", - "kisto", - "klaji", - "klaku", - "klama", - "klani", - "klesi", - "klina", - "kliru", - "kliti", - "klupe", - "kluza", - "kobli", - "kojna", - "kolme", - "komcu", - "konju", - "korbi", - "korcu", - "korka", - "kosta", - "kramu", - "krasi", - "krati", - "krefu", - "krici", - "krili", - "krinu", - "krixa", - "kruca", - "kruji", - "kruvi", - "kubli", - "kucli", - "kufra", - "kukte", - "kulnu", - "kumfa", - "kumte", - "kunra", - "kunti", - "kurfa", - "kurji", - "kurki", - "kuspe", - "kusru", - "labno", - "lacpu", - "lacri", - "ladru", - "lafti", - "lakne", - "lakse", - "laldo", - "lalxu", - "lamji", - "lanbi", - "lanci", - "lanka", - "lanli", - "lanme", - "lante", - "lanxe", - "lanzu", - "larcu", - "lasna", - "lastu", - "latmo", - "latna", - "lazni", - "lebna", - "lenjo", - "lenku", - "lerci", - "lerfu", - "libjo", - "lidne", - "lifri", - "lijda", - "limna", - "lindi", - "linji", - "linsi", - "linto", - "lisri", - "liste", - "litce", - "litki", - "litru", - "livga", - "livla", - "logji", - "lojbo", - "loldi", - "lorxu", - "lubno", - "lujvo", - "lumci", - "lunbe", - "lunra", - "lunsa", - "mabla", - "mabru", - "macnu", - "makcu", - "makfa", - "maksi", - "malsi", - "mamta", - "manci", - "manfo", - "manku", - "manri", - "mansa", - "manti", - "mapku", - "mapni", - "mapti", - "marbi", - "marce", - "marde", - "margu", - "marji", - "marna", - "marxa", - "masno", - "masti", - "matci", - "matli", - "matne", - "matra", - "mavji", - "maxri", - "mebri", - "megdo", - "mekso", - "melbi", - "meljo", - "menli", - "mensi", - "mentu", - "merko", - "merli", - "mexno", - "midju", - "mifra", - "mikce", - "mikri", - "milti", - "milxe", - "minde", - "minji", - "minli", - "minra", - "mintu", - "mipri", - "mirli", - "misno", - "misro", - "mitre", - "mixre", - "mlana", - "mlatu", - "mleca", - "mledi", - "mluni", - "mokca", - "moklu", - "molki", - "molro", - "morji", - "morko", - "morna", - "morsi", - "mosra", - "mraji", - "mrilu", - "mruli", - "mucti", - "mudri", - "mukti", - "mulno", - "munje", - "mupli", - "murse", - "murta", - "muslo", - "mutce", - "muvdu", - "muzga", - "nabmi", - "nakni", - "nalci", - "namcu", - "nanba", - "nanca", - "nandu", - "nanla", - "nanmu", - "nanvi", - "narge", - "narju", - "natfe", - "natmi", - "navni", - "naxle", - "nazbi", - "nejni", - "nelci", - "nenri", - "nibli", - "nicte", - "nikle", - "nilce", - "nimre", - "ninmu", - "nirna", - "nitcu", - "nivji", - "nixli", - "nobli", - "notci", - "nukni", - "nupre", - "nurma", - "nutli", - "nuzba", - "pacna", - "pagbu", - "pagre", - "pajni", - "palci", - "palku", - "palne", - "palta", - "pambe", - "panci", - "pandi", - "panje", - "panka", - "panlo", - "panpi", - "panra", - "pante", - "panzi", - "papri", - "parbi", - "pastu", - "patfu", - "patlu", - "patxu", - "pelji", - "pelxu", - "pemci", - "penbi", - "pencu", - "pendo", - "penmi", - "pensi", - "perli", - "pesxu", - "petso", - "pezli", - "picti", - "pijne", - "pikci", - "pikta", - "pilji", - "pilka", - "pilno", - "pimlu", - "pinca", - "pindi", - "pinfu", - "pinji", - "pinka", - "pinsi", - "pinta", - "pinxe", - "pipno", - "pixra", - "plana", - "platu", - "pleji", - "plibu", - "plini", - "plipe", - "plise", - "plita", - "plixa", - "pluja", - "pluka", - "pluta", - "polje", - "polno", - "ponjo", - "ponse", - "porpi", - "porsi", - "porto", - "prali", - "prami", - "prane", - "preja", - "prenu", - "preti", - "prije", - "prina", - "pritu", - "prosa", - "pruce", - "pruni", - "pruxi", - "pulce", - "pulji", - "pulni", - "punji", - "punli", - "purci", - "purdi", - "purmo", - "racli", - "ractu", - "radno", - "rafsi", - "ragve", - "rakso", - "raktu", - "ralci", - "ralju", - "ralte", - "randa", - "rango", - "ranji", - "ranmi", - "ransu", - "ranti", - "ranxi", - "rapli", - "rarna", - "ratcu", - "ratni", - "rebla", - "rectu", - "remna", - "renro", - "renvi", - "respa", - "ricfu", - "rigni", - "rijno", - "rilti", - "rimni", - "rinci", - "rinju", - "rinka", - "rinsa", - "rirci", - "rirni", - "rirxe", - "rismi", - "risna", - "ritli", - "rivbi", - "rokci", - "romge", - "ropno", - "rorci", - "rotsu", - "rozgu", - "ruble", - "rufsu", - "runme", - "runta", - "rupnu", - "rusko", - "rutni", - "sabji", - "sabnu", - "sacki", - "saclu", - "sadjo", - "sakci", - "sakli", - "sakta", - "salci", - "salpo", - "salta", - "samcu", - "sampu", - "sance", - "sanga", - "sanji", - "sanli", - "sanmi", - "sanso", - "santa", - "sarcu", - "sarji", - "sarlu", - "sarxe", - "saske", - "satci", - "satre", - "savru", - "sazri", - "sefta", - "selci", - "selfu", - "semto", - "senci", - "senpi", - "senta", - "senva", - "sepli", - "serti", - "setca", - "sevzi", - "sfani", - "sfasa", - "sfofa", - "sfubu", - "siclu", - "sicni", - "sidbo", - "sidju", - "sigja", - "silka", - "silna", - "simlu", - "simsa", - "simxu", - "since", - "sinma", - "sinso", - "sinxa", - "sipna", - "sirji", - "sirxo", - "sisku", - "sisti", - "sitna", - "sivni", - "skaci", - "skami", - "skapi", - "skari", - "skicu", - "skiji", - "skina", - "skori", - "skoto", - "skuro", - "slabu", - "slaka", - "slami", - "slanu", - "slari", - "slasi", - "sligu", - "slilu", - "sliri", - "slovo", - "sluji", - "sluni", - "smacu", - "smadi", - "smaji", - "smani", - "smoka", - "smuci", - "smuni", - "snada", - "snanu", - "snidu", - "snime", - "snipa", - "snuji", - "snura", - "snuti", - "sobde", - "sodna", - "sodva", - "softo", - "solji", - "solri", - "sombo", - "sonci", - "sorcu", - "sorgu", - "sovda", - "spaji", - "spali", - "spano", - "spati", - "speni", - "spisa", - "spita", - "spofu", - "spoja", - "spuda", - "sputu", - "sraji", - "sraku", - "sralo", - "srana", - "srasu", - "srera", - "srito", - "sruma", - "sruri", - "stace", - "stagi", - "staku", - "stali", - "stani", - "stapa", - "stasu", - "stati", - "steba", - "steci", - "stedu", - "stela", - "stero", - "stici", - "stidi", - "stika", - "stizu", - "stodi", - "stuna", - "stura", - "stuzi", - "sucta", - "sudga", - "sufti", - "suksa", - "sumji", - "sumne", - "sumti", - "sunga", - "sunla", - "surla", - "sutra", - "tabno", - "tabra", - "tadji", - "tadni", - "tagji", - "talsa", - "tamca", - "tamji", - "tamne", - "tanbo", - "tance", - "tanjo", - "tanko", - "tanru", - "tansi", - "tanxe", - "tapla", - "tarbi", - "tarci", - "tarla", - "tarmi", - "tarti", - "taske", - "tatpi", - "tatru", - "tavla", - "taxfu", - "tcaci", - "tcadu", - "tcana", - "tcati", - "tcena", - "tcica", - "tcidu", - "tcika", - "tcila", - "tcima", - "tcini", - "tcita", - "temci", - "tenfa", - "tengu", - "terdi", - "terpa", - "terto", - "tigni", - "tikpa", - "tilju", - "tinbe", - "tinci", - "tinsa", - "tirna", - "tirse", - "tirxu", - "tisna", - "titla", - "tivni", - "tixnu", - "toknu", - "toldi", - "tonga", - "tordu", - "torni", - "traji", - "trano", - "trati", - "trene", - "tricu", - "trina", - "trixe", - "troci", - "tsali", - "tsani", - "tsapi", - "tsiju", - "tsina", - "tubnu", - "tugni", - "tujli", - "tumla", - "tunba", - "tunka", - "tunlo", - "tunta", - "tuple", - "turni", - "tutci", - "tutra", - "vacri", - "vajni", - "valsi", - "vamji", - "vamtu", - "vanbi", - "vanci", - "vanju", - "vasru", - "vasxu", - "vecnu", - "venfu", - "vensa", - "verba", - "vibna", - "vidni", - "vidru", - "vifne", - "vikmi", - "viknu", - "vimcu", - "vindu", - "vinji", - "vipsi", - "virnu", - "viska", - "vitci", - "vitke", - "vitno", - "vlagi", - "vlile", - "vlina", - "vlipa", - "vofli", - "voksa", - "vorme", - "vraga", - "vreji", - "vreta", - "vrici", - "vrude", - "vrusi", - "vukro", - "xabju", - "xadba", - "xadni", - "xagji", - "xagri", - "xajmi", - "xaksu", - "xalbo", - "xalka", - "xalni", - "xamgu", - "xampo", - "xamsi", - "xance", - "xanka", - "xanri", - "xanto", - "xarci", - "xarju", - "xarnu", - "xasli", - "xasne", - "xatra", - "xatsi", - "xazdo", - "xebni", - "xebro", - "xecto", - "xedja", - "xekri", - "xelso", - "xendo", - "xenru", - "xexso", - "xindo", - "xinmo", - "xirma", - "xislu", - "xispo", - "xlali", - "xlura", - "xotli", - "xrabo", - "xrani", - "xriso", - "xruba", - "xruki", - "xrula", - "xruti", - "xukmi", - "xunre", - "xurdo", - "xusra", - "xutla", - "zabna", - "zajba", - "zalvi", - "zanru", - "zarci", - "zargu", - "zasni", - "zasti", - "zbabu", - "zbani", - "zbasu", - "zbepi", - "zdani", - "zdile", - "zekri", - "zenba", - "zepti", - "zetro", - "zgana", - "zgike", - "zifre", - "zinki", - "zirpu", - "zivle", - "zmadu", - "zmiku", - "zukte", - "zumri", - "zungi", - "zunle", - "zunti", - "zutse", - "zvati" } - -for g in gismu: - rafsi_dict[g[0:4]] = g - -def expand(rafsi): - short = rafsi_dict.get(rafsi,None) - if short: - return short - elif len(rafsi) == 5: - return rafsi - else: - return "UNDEF" def make_rafsi(word, pos, out): WORD = util.read_annotation(word) @@ -2950,28 +45,64 @@ def make_rafsi(word, pos, out): for tokid in WORD: w = WORD[tokid] - if POS[tokid] == "BRIVLA": + if POS[tokid] == "OTHER": rafsi = compound_to_affixes(w) OUT[tokid] = "|".join(rafsi) util.clear_annotation(out) util.write_annotation(out, OUT) -def make_longrafsi(rafsi, out): + +def make_longrafsi(rafsi, out, in_pickle): RAFSI = util.read_annotation(rafsi) OUT = {} + rafsi_dict = pickle.load(open(in_pickle, 'rb')) for tokid in RAFSI: rafsi = RAFSI[tokid].split("|") if rafsi and rafsi[0]: - OUT[tokid] = "|".join(expand(a) for a in rafsi) + OUT[tokid] = "|".join(rafsi_dict.get(r, 'UNDEF') for r in rafsi) util.clear_annotation(out) util.write_annotation(out, OUT) +def pickle_jbovlaste(jbovlaste_file, out_pickle): + import xml.etree.ElementTree as ET + root = ET.parse(jbovlaste_file).getroot() + # rafsi_re = re.compile(r"proposed rafsi[: \-]*([a-z][a-z]'?[a-z])[.\- ]") + rafsi_re = re.compile(r"-([a-z][a-z]'?[a-z])-") + rd = {} + erd = {} + for valsi in root.iter('valsi'): + ty = valsi.attrib['type'] + word = valsi.attrib['word'] + for rafsi in valsi.iter('rafsi'): + rd[rafsi.text] = word + if ty == 'gismu': + rd[word[0:4]] = word + rd[word] = word + if ty == 'experimental gismu': + erd[word[0:4]] = word + erd[word] = word + if 'gismu' in ty or 'cmavo' in ty: + for note in valsi.iter('notes'): + for m in re.findall(rafsi_re, note.text.lower()): + erd[m] = word + + for k in erd: + if k in rd: + print 'duplicate: ' + k + else: + rd[k] = erd[k] + + pickle.dump(rd, open(out_pickle, 'wb')) + + ###################################################################### if __name__ == '__main__': - util.run.main(make_rafsi = make_rafsi, make_longrafsi = make_longrafsi) + util.run.main(make_rafsi=make_rafsi, + make_longrafsi=make_longrafsi, + pickle_jbovlaste=pickle_jbovlaste) diff --git a/corpus_import/annotate/python/jk/irclogs.py b/corpus_import/annotate/python/jk/irclogs.py index f1302f0..17429b2 100644 --- a/corpus_import/annotate/python/jk/irclogs.py +++ b/corpus_import/annotate/python/jk/irclogs.py @@ -4,17 +4,23 @@ import re import subprocess from unidecode import unidecode +import codecs + +from collections import Counter matchers = [] +def pat(r): + matchers.append(re.compile(r"^" + r + r"$")) + # ircname = r"/\A[a-z_\-\[\]\\^{}|`][a-z0-9_\-\[\]\\^{}|`]*\z/i" ircname = r"\S*" # Broca: oi le dei velsku -matchers.append(re.compile(r"^\s?(?P" + ircname + r"): (?P.*)$")) +pat(r"\s?(?P" + ircname + r"): (?P.*)") # go'i -matchers.append(re.compile(r"^<\s?(?P" + ircname + r")> (?P.*)$")) +pat(r"<\s?(?P" + ircname + r")> (?P.*)") # 01 Aug 2003 02:10:18 pretty_full_date = r"(?P\d{2}) (?P\S{3}) (?P\d{4}) (?P\d{2}):(?P\d{2}):(?P\d{2})" @@ -25,108 +31,154 @@ # 2014-03-28 12:13:11 PDT/-0700 digit_date = r"(?P\d{4})-(?P\d{2})-(?P\d{2}) (?P\d{2}):(?P\d{2}):(?P\d{2}) ...\/....." +# 19:39 +hhmm_time = r"(?P\d{2}):(?P\d{2})" + # [19:39] -brack_time = r"\[(?P\d{2}):(?P\d{2})\]" +brack_time = r"\[" + hhmm_time + r"\]" # 01 Aug 2003 02:10:18 la'o gy. gyrations gy. -matchers.append(re.compile(r"^" + pretty_full_date + r" <\s?(?P" + ircname + r")> (?P.*)$")) +pat(pretty_full_date + r" <\s?(?P" + ircname + r")> (?P.*)") # 20 Sep 2010 15:22 < jaupre> no. -matchers.append(re.compile(r"^" + pretty_mini_date + r" <\s?(?P" + ircname + r")> (?P.*)$")) +pat(pretty_mini_date + r" <\s?(?P" + ircname + r")> (?P.*)") # 20 Jan 2010 07:21:58 * codrus na'e co'e cusku da poi ve vimcu de noi vo'a jinvi fi ra # 11 Jun 2008 20:46:50 * durka cu slilu lo stedu -matchers.append(re.compile(r"^" + pretty_full_date + r" \s?\* (?P (?P" + ircname + r") .*)$")) +pat(pretty_full_date + r" \s?\* (?P(?P" + ircname + r") .*)") # 23 Sep 2010 16:09 * rlpowell terpa -matchers.append(re.compile(r"^" + pretty_mini_date + r" \s?\* (?P (?P" + ircname + r") .*)$")) +pat(pretty_mini_date + r" \s?\* (?P(?P" + ircname + r") .*)") + +relayed_name = r"[^>]+" + +# 2016-10-27 05:33:35 PDT/-0700 <^^^^> > "<03gleki> i za'a so'e lo jbopre ca'o drani be na ku pilno lo cnima'o" +pat(digit_date + r" <\s?(?P" + ircname + r")> > \"<.[0-9][0-9]..(?P" + relayed_name + r").> (?P.*)\"") + +# 2016-10-22 02:43:40 PDT/-0700 13ilmen: cu'u la'o gy.la_aLEKsolas.gy.: doi te frica be lo cmavo bei lo rafsi ko sezgle ga'i (╯°□°)つ ======> | 2016-10-22T02:20:59.478Z +pat(digit_date + r" <\s?(?P" + ircname + r")> [0-9][0-9](?P" + relayed_name + r"): (?P.*)") + +# 2016-10-19 08:57:38 PDT/-0700 <^^^^> <03Kleo Kapaj>: .i mi ba lo nu mi mulgau lo ckule djedi ku vau kei ku jungau do +# 2016-10-29 16:42:59 PDT/-0700 <^^^^> <06selckiku>: .i .au bu'o zo cladaxi cu jbocme lo mensi +pat(digit_date + r" <\s?(?P" + ircname + r")> <[0-9][0-9](?P" + relayed_name + r")>: (?P.*)") +# 2016-09-28 03:48:03 PDT/-0700 <07aksilys> .i lo cmene tanbargu skarai zvati +pat(digit_date + r" <\s?(?P" + ircname + r")> <.[0-9][0-9](?P" + relayed_name + r").>:? (?P.*)") + +# 2016-02-01 07:07:00 PST/-0800 : .i xu jbonunsla ca +pat(digit_date + r" <\s?(?P" + ircname + r")> <(?P" + relayed_name + r")>:? (?P.*)") # 2014-03-28 12:13:11 PDT/-0700 .u'i -matchers.append(re.compile(r"^" + digit_date + r" <\s?(?P" + ircname + r")> (?P.*)$")) +pat(digit_date + r" <\s?(?P" + ircname + r")> (?P.*)") # 2014-03-26 13:49:13 PDT/-0700 * durka42 cu nitcu lo nu cliva -matchers.append(re.compile(r"^" + digit_date + r" \s?\* (?P (?P" + ircname + r") .*)$")) +pat(digit_date + r" \s?\* (?P(?P" + ircname + r") .*)") # [19:39] coi zinks -matchers.append(re.compile(r"^" + brack_time + r" \s?\* (?P (?P" + ircname + r") .*)$")) +pat(brack_time + r" <(?P" + ircname + r")> (?P.*)") + +# 09:11 < cliva> go'i +pat(hhmm_time + r" <\s?(?P" + ircname + r")> (?P.*)") + +# 14:59 * Ilmen ca'o tinju'i lo .albumza'o +pat(hhmm_time + r" \s?\* (?P(?P" + ircname + r") .*)") # [22:06] *** bancus sezgletu -matchers.append(re.compile(r"^" + brack_time + r" \s?\*\*\* \s?(?P (?P" + ircname + r") .*)$")) +pat(brack_time + r" \s?\*\*\* \s?(?P(?P" + ircname + r") .*)") # 19 Jan 2010 20:01:06 -!- vesna [i=4d7c290c@gateway/web/freenode/x-xprmfgfzgrnhorgn] has joined #lojban -matchers.append(re.compile(r"^" + pretty_full_date + r" -!-")) -matchers.append(re.compile(r"^" + pretty_mini_date + r" -!-")) months = dict(zip(["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],range(1,13))) -MSGS_PER_FILE = 10001 +def parse_irc(in_file): + LIMIT = 10000 + roots = {} + files = Counter() + docs = Counter() -written = {} -store = {} -items = {} + def write_root(year, root): + fname = "irc" + year + "-" + str(files[year]) + ".wip" + ET.ElementTree(root).write(fname, encoding='utf-8') + print "wrote", fname + root.clear() + del roots[year] + files[year] += 1 + docs[year] = 0 -def banned(nick): - return nick == "livla" or nick == "mensi" + for year, attach in messages(in_file): + if year not in roots: + roots[year] = ET.Element('text') -def add_msg(d): - year = d.get('year', "undef") - if not year in store: - store[year] = ET.Element('text') - root = store[year] - try: - msg = ET.SubElement(root, 'msg', - date=d.get('date',''), - time=d.get('time',''), - nick=d['nick']) - msg.text = unicode(unidecode(d['msg'])) - items[year] = items.get(year, 0) + 1 - except: - # print "failed to add ", d['msg'], " to ", year - pass - -def write_cycle(limit=MSGS_PER_FILE): - kill = [] - for year, amt in items.iteritems(): - if amt > limit: - written[year] = written.get(year, -1) + 1 - fname = "irc" + year + "-" + str(written[year]) + ".wip" - with open(fname, "w") as f: - f.write(ET.tostring(store[year], pretty_print = True)) - print "wrote", fname - kill.append(year) - for year in kill: - items.pop(year, None) - store.pop(year, None) + root = roots[year] + attach(root) + docs[year] += 1 + + if docs[year] > LIMIT: + write_root(year, root) + + for year, root in list(roots.iteritems()): + write_root(year, root) -def parse_irc(in_file): - for l in open(in_file).readlines(): +def messages(in_file): + for l in codecs.open(in_file, encoding="utf-8", errors='ignore').readlines(): for m in matchers: d = m.match(l) if d is not None: - d = d.groupdict() - if d.get('msg') and not banned(d["nick"]): + m = handle_match(d.groupdict()) + if m: + yield m + break + else: + # print(l.encode('utf-8')) + # print 'no match!' + pass + + +def banned(nick): + return nick in ["livla","mensi","zbagamumble","||","||1","^^^^","o`","o`1","xx","nuzba"] - if d.get('pretty_month'): - d['month'] = "%02d" % months[d['pretty_month']] - y, m, day = d.get('year'), d.get('month'), d.get('day') +def handle_match(d): + if d.get('msg') and not banned(d["nick"]): + if d.get('pretty_month'): + d['month'] = "%02d" % months[d['pretty_month']] - if y and m and day: - d['date'] = y + "-" + m + "-" + day + y, m, day = d.get('year'), d.get('month'), d.get('day') - if not d.get('sec'): - d['sec'] = "00" + if y and m and day: + d['date'] = y + "-" + m + "-" + day - hh, mm, ss = d.get('hour'), d.get('min'), d.get('sec') + if not d.get('sec'): + d['sec'] = "00" - if hh and mm and ss: - d['time'] = hh + ":" + mm + ":" + ss + hh, mm, ss = d.get('hour'), d.get('min'), d.get('sec') - add_msg(d) - write_cycle() - write_cycle(0) + if hh and mm and ss: + d['time'] = hh + ":" + mm + ":" + ss + + # print(d.encode('utf-8')) + return make_message(d) + +clean_re = re.compile(u'[^\u0020-\uD7FF\u0009\u000A\u000D\uE000-\uFFFD\u10000-\u10FFFF]+') +def clean(s): + return re.sub(clean_re, '', s) + +def make_message(d): + year = d.get('year', "undef") + + try: + def attach(root): + msg = ET.SubElement(root, 'msg', + date=d.get('date',''), + time=d.get('time',''), + relay=d.get('relay',''), + nick=clean(d['nick'])) + msg.text = clean(d['msg']) + return year, attach + except Exception as e: + print e + print "failed to add ", d['msg'].encode('utf-8'), " to ", year if __name__ == '__main__': util.run.main(parse_irc) diff --git a/corpus_import/annotate/python/jk/pos.py b/corpus_import/annotate/python/jk/pos.py new file mode 100644 index 0000000..1afcf16 --- /dev/null +++ b/corpus_import/annotate/python/jk/pos.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import re +import sb.util as util +import cPickle as pickle + + +def pos(word, out, in_pickle): + WORD = util.read_annotation(word) + OUT = {} + pos = pickle.load(open(in_pickle, 'rb')) + + for tokid in WORD: + OUT[tokid] = pos.get(WORD[tokid],'OTHER').rstrip('0123456789*abcdefghijklmnopqrstuvwxyz') + + util.clear_annotation(out) + util.write_annotation(out, OUT) + + +def pickle_jbovlaste(jbovlaste_file, out_pickle): + import xml.etree.ElementTree as ET + root = ET.parse(jbovlaste_file).getroot() + pos = {} + for valsi in root.iter('valsi'): + w = valsi.attrib['word'] + t = valsi.attrib['type'] + for selmaho in valsi.iter('selmaho'): + pos[w] = selmaho.text + + pickle.dump(pos, open(out_pickle, 'wb')) + + +###################################################################### + +if __name__ == '__main__': + util.run.main(pos, + pickle_jbovlaste=pickle_jbovlaste) + diff --git a/corpus_import/annotate/python/jk/segment_crude.py b/corpus_import/annotate/python/jk/segment_crude.py index 9791ee7..c1e66dc 100644 --- a/corpus_import/annotate/python/jk/segment_crude.py +++ b/corpus_import/annotate/python/jk/segment_crude.py @@ -3,40 +3,167 @@ import sb.util as util import re import subprocess +from collections import defaultdict +import json -def tokenise(cmd,txt): - p = subprocess.Popen(cmd, - shell=True, + +def call_tool(cmd,txt): + p = subprocess.Popen(cmd.split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out = p.communicate(input=txt)[0] + out, err = p.communicate(input=txt.encode('ascii',errors='ignore')) p.wait() return out, p.returncode -def segment_crude(in_file,out_file,cmd): - if cmd == "segment": - run_cmd = lambda txt : tokenise("cmafihe -t",txt)[0] - elif cmd == "parse": - def g(txt): - parse, excode = tokenise("jbofihe -X",txt) - if excode: - return tokenise("cmafihe -X",txt)[0] - else: - return parse - run_cmd = g +import xml.etree.ElementTree as ET + + +def on_text(in_file, out_file, handle): + xml = ET.parse(in_file) + root = xml.getroot() + + ks = [] + + for elem in root.iter(): + if elem.text: + def k(elem): + r = handle(elem.text) + if isinstance(r, basestring): + elem.text = r + else: + elem.text = '' + elem.append(r) + ks.append((k, elem)) + + for k, elem in ks: + k(elem) + + xml.write(out_file, encoding='utf-8') + + +clean_re = re.compile(r"[^a-zA-Z0-9' \n\t]+") +def rm_junk(s): + return re.sub(clean_re, '', s).lower() + + +# BUG: splits up zoi-quotes, too +def vlatai_text(doc): + out, exc = call_tool('vlatai', '\n'.join(rm_junk(doc).split())) + return ' '.join(w + for line in out.strip().split('\n') + if line + for w in line.split(':')[2].strip().split()) + + +def jbofihe_text(doc): + p = ET.Element('p') + # BUG: splits at "zo i" and "i" inside lu...li'u + for sent in re.compile(r' (?=i )').split(doc): + # print sent + out, exc = call_tool('jbofihe -X', rm_junk(sent)) + # print out + if exc == 0: + p.append(jbofihe_process_output(out)) + else: + s = ET.SubElement(p, 's') + s.attrib['grammar'] = "none" + for w in sent.split(): + word = ET.SubElement(s, 'word') + word.text = w + return p + - soup = BeautifulSoup(open(in_file), "html.parser") +def jbofihe(in_file, out_file): + on_text(in_file, out_file, jbofihe_text) - for s in list(soup.strings): - if len(s.strip()) > 0: - txt = unidecode(s) - txt_soup = BeautifulSoup(unidecode(run_cmd(txt)), "html.parser") - s.replace_with(txt_soup) - open(out_file,"w").write(unidecode(unicode(soup))) +def vlatai(in_file, out_file): + on_text(in_file, out_file, vlatai_text) + + +def selbriplaces(ds): + out = [] + for d in ds: + out.append(d['selbriplace'].rstrip('t')) + return '|'.join(out) + + +def jbofihe_process_output(doc): + args = [] + newinfo = [] + newargs = [] + i = 0 + s = ET.Element('s') + s.attrib['grammar'] = 'jbofihe' + for line in doc.split('\n'): + try: + d = json.loads(line) + if d['type'] == 'info': + newinfo.append(d['info']) + elif d['type'] == 'argbegin': + del d['type'] + newargs.append(d) + elif d['type'] == 'argend': + args.pop() + except ValueError: + for w in quicksplit(line.replace('_',' ')): + w = w.strip() + if w: + word = ET.SubElement(s, 'word') + word.text = w + if newinfo: + word.attrib['info'] = '|'.join(newinfo) + newinfo = [] + word.attrib['dephead'] = str((args + [(None,)])[0][0]) + word.attrib['ref'] = str(i) + word.attrib['deprel'] = selbriplaces(map(lambda arg: arg[1], args[0:1])) + word.attrib['tags'] = selbriplaces(newargs) + for n in newargs: + args.append((i, n)) + newargs=[] + i+=1 + return s + + +c='bcdfgjklmnprstvxz' +cc=[a+b for a in c for b in c]+[a+'y'+b for a in c for b in c] + + +def has_cc(w): + for x in cc: + if x in w: + return True + return False + + +def split_at_c(w): + out = [] + temp = "" + for s in re.split('(['+c+'])',w): + if s == '': + continue + elif s in c: + temp += s + else: + yield temp + s + temp = "" + + +# does not work with zoi-quotes +# used to break apart things like uinai that jbofihe insists on grouping +def quicksplit(ws): + for w in ws.split(): + if has_cc(w): + yield w + elif w.strip()[-1:] in c: + yield w # cmevla + else: + for cmavo in split_at_c(w): + yield cmavo if __name__ == '__main__': - util.run.main(segment_crude) + util.run.main(vlatai=vlatai, jbofihe=jbofihe) + diff --git a/corpus_import/annotate/python/jk/vlatai.py b/corpus_import/annotate/python/jk/vlatai.py new file mode 100644 index 0000000..74d1c5c --- /dev/null +++ b/corpus_import/annotate/python/jk/vlatai.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +import re +import sb.util as util +import cPickle as pickle + +from subprocess import Popen, PIPE + +def vlatai(word, pos, out): + WORD = util.read_annotation(word) + POS = util.read_annotation(pos) + + inp = [] + tokids = [] + + for tokid in WORD: + inp.append(WORD[tokid].replace('.','')) + tokids.append(tokid) + + p = Popen('vlatai', stdin=PIPE, stdout=PIPE, stderr=PIPE) + lines, err = p.communicate(input='\n'.join(inp)) + p.wait() + + OUT = {} + for tokid, line in zip(tokids, lines.split('\n')): + v = line.split(':')[1].strip().split()[0] + if v == 'cmavo(s)': + v = 'cmavo' + OUT[tokid] = v + + util.clear_annotation(out) + util.write_annotation(out, OUT) + + +def experimental(word, tai, out, in_pickle): + WORD = util.read_annotation(word) + TAI = util.read_annotation(tai) + catni = pickle.load(open(in_pickle, 'rb')) + OUT = {} + + for tokid in WORD: + if TAI[tokid] in ['cmavo','gismu']: + OUT[tokid] = str(WORD[tokid].replace('.','') not in catni) + else: + OUT[tokid] = "UNDEF" + + util.clear_annotation(out) + util.write_annotation(out, OUT) + + + +def pickle_jbovlaste(jbovlaste_file, out_pickle): + import xml.etree.ElementTree as ET + root = ET.parse(jbovlaste_file).getroot() + catni = {} + for valsi in root.iter('valsi'): + ty = valsi.attrib['type'] + word = valsi.attrib['word'] + if ty in ['gismu','cmavo']: + catni[word] = True + + pickle.dump(catni, open(out_pickle, 'wb')) + + +###################################################################### + +if __name__ == '__main__': + util.run.main(vlatai=vlatai, experimental=experimental, pickle_jbovlaste=pickle_jbovlaste) + diff --git a/corpus_import/irclogs/Makefile b/corpus_import/irclogs/Makefile index 0b9c1ab..7e8302e 100644 --- a/corpus_import/irclogs/Makefile +++ b/corpus_import/irclogs/Makefile @@ -3,14 +3,14 @@ original_dir = intermediate really_original = original files := $(basename $(notdir $(wildcard $(really_original)/*.xml))) -vrt_columns_annotations = word pos tags trans rafsi longrafsi ref dephead deprel -vrt_columns = word pos tags trans rafsi longrafsi ref dephead deprel +vrt_columns_annotations = word pos tags info rafsi longrafsi vlatai exp ref dephead deprel +vrt_columns = word pos tags info rafsi longrafsi vlatai exp ref dephead deprel -vrt_structs_annotations = sentence.id sentence paragraph.n text.nick text.date text.time text.datefrom text.dateto -vrt_structs = sentence:id sentence paragraph text:nick text:date text:time text:datefrom text:dateto +vrt_structs_annotations = sentence.id sentence paragraph.n sentence.grammar text.nick text.date text.time text.datefrom text.dateto text.relay +vrt_structs = sentence:id sentence paragraph sentence:grammar text:nick text:date text:time text:datefrom text:dateto text:relay -xml_elements = word word:pos word:tags word:trans word:ref word:dephead word:deprel msg:nick msg:date msg:time s p msg -xml_annotations = token token.pos token.tags token.trans token.ref token.dephead token.deprel text.nick text.date text.time sentence paragraph text +xml_elements = word word:tags word:info word:ref word:dephead word:deprel msg:nick msg:date msg:time msg:relay s s:grammar p msg +xml_annotations = token token.tags token.info token.ref token.dephead token.deprel text.nick text.date text.time text.relay sentence sentence.grammar paragraph text # Using tag word for words diff --git a/corpus_import/irclogs/original/Makefile b/corpus_import/irclogs/original/Makefile index b8b5efb..838855a 100644 --- a/corpus_import/irclogs/original/Makefile +++ b/corpus_import/irclogs/original/Makefile @@ -2,7 +2,7 @@ # make miniclean && make wips -B && make xmls -B wips: all_logs.txt - python -m jk.irclogs --in_file $< + python2 -m jk.irclogs --in_file $< irclogs.zip: wget http://www.lojban.org/irclogs/irclogs.zip @@ -14,7 +14,7 @@ all_logs.txt: irclogs.zip miniclean: rm -f irc*.wip - rm irclogs.zip + rm -f irclogs.zip rm -f all_logs.txt clean: diff --git a/corpus_import/irclogs/update.sh b/corpus_import/irclogs/update.sh new file mode 100755 index 0000000..7ab4189 --- /dev/null +++ b/corpus_import/irclogs/update.sh @@ -0,0 +1,9 @@ +#!/bin/bash +echo "=== CORPUS PIPELINE STARTED ===" +(cd original && + make python=python2 miniclean && + make python=python2 wips -B && + make python=python2 xmls -B) && +make python=python2 annotations/fileids -B && +make python=python2 vrt -j8 && make python=python2 installcorpus installtimespan installinfo +# ŭo diff --git a/corpus_import/jboselkei/Makefile b/corpus_import/jboselkei/Makefile index 799f45a..98974b6 100644 --- a/corpus_import/jboselkei/Makefile +++ b/corpus_import/jboselkei/Makefile @@ -3,8 +3,8 @@ original_dir = intermediate really_original = original files := $(basename $(notdir $(wildcard $(really_original)/*.xml))) -vrt_columns_annotations = word pos tags trans rafsi longrafsi ref dephead deprel -vrt_columns = word pos tags trans rafsi longrafsi ref dephead deprel +vrt_columns_annotations = word pos tags trans rafsi longrafsi vlatai exp ref dephead deprel +vrt_columns = word pos tags trans rafsi longrafsi vlatai exp ref dephead deprel vrt_structs_annotations = sentence.id sentence paragraph.n text.author text.date text.datefrom text.dateto text.difficulty text.comment text.time text.value text.reviews text.source text.sourceauthor text.sourceid text.sourcelang text.sourcecomment vrt_structs = sentence:id sentence paragraph text:author text:date text:datefrom text:dateto text:difficulty text:comment text:time text:value text:reviews text:source text:sourceauthor text:sourceid text:sourcelang text:sourcecomment diff --git a/corpus_import/mriste/Makefile b/corpus_import/mriste/Makefile index 377dc95..be041e1 100644 --- a/corpus_import/mriste/Makefile +++ b/corpus_import/mriste/Makefile @@ -3,8 +3,8 @@ original_dir = intermediate really_original = original files := $(basename $(notdir $(wildcard $(really_original)/*.xml))) -vrt_columns_annotations = word pos tags trans rafsi longrafsi ref dephead deprel -vrt_columns = word pos tags trans rafsi longrafsi ref dephead deprel +vrt_columns_annotations = word pos tags trans rafsi longrafsi ref vlatai exp dephead deprel +vrt_columns = word pos tags trans rafsi longrafsi ref vlatai exp dephead deprel vrt_structs_annotations = sentence.id sentence paragraph.n text.author text.date text.subject text.datefrom text.dateto vrt_structs = sentence:id sentence paragraph text:author text:date text:subject text:datefrom text:dateto diff --git a/corpus_import/ralju/Makefile b/corpus_import/ralju/Makefile index 35d9aed..b1e41b8 100644 --- a/corpus_import/ralju/Makefile +++ b/corpus_import/ralju/Makefile @@ -3,14 +3,14 @@ original_dir = intermediate really_original = original files := $(basename $(notdir $(wildcard $(really_original)/*.xml))) -vrt_columns_annotations = word pos tags trans ref rafsi longrafsi dephead deprel -vrt_columns = word pos tags trans ref rafsi longrafsi dephead deprel +vrt_columns_annotations = word pos tags trans ref rafsi longrafsi vlatai exp dephead deprel +vrt_columns = word pos tags trans ref rafsi longrafsi vlatai exp dephead deprel -vrt_structs_annotations = sentence.id sentence paragraph.n text.date text.title text.author text.original_author text.url text.datefrom text.dateto -vrt_structs = sentence:id sentence paragraph text:date text:title text:author text:original_author text:url text:datefrom text:dateto +vrt_structs_annotations = sentence.id sentence paragraph.n text.date text.title text.original_title text.author text.original_author text.url text.datefrom text.dateto +vrt_structs = sentence:id sentence paragraph text:date text:title text:original_title text:author text:original_author text:url text:datefrom text:dateto -xml_elements = word word:pos word:tags word:trans word:ref word:dephead word:deprel text text:date text:title text:author text:original_author text:url s p -xml_annotations = token token.pos token.tags token.trans token.ref token.dephead token.deprel text text.date text.title text.author text.original_author text.url sentence paragraph +xml_elements = word word:pos word:tags word:trans word:ref word:dephead word:deprel text text:date text:title text:original_title text:author text:original_author text:url s p +xml_annotations = token token.pos token.tags token.trans token.ref token.dephead token.deprel text text.date text.title text.original_title text.author text.original_author text.url sentence paragraph parents = token|paragraph token|sentence token|text diff --git a/corpus_import/tatoeba/Makefile b/corpus_import/tatoeba/Makefile index 0f27cf9..f531f5d 100644 --- a/corpus_import/tatoeba/Makefile +++ b/corpus_import/tatoeba/Makefile @@ -3,11 +3,11 @@ original_dir = intermediate really_original = original files := $(basename $(notdir $(wildcard $(really_original)/*.xml))) -vrt_columns_annotations = word pos tags trans ref dephead deprel -vrt_columns = word pos tags trans ref dephead deprel +vrt_columns_annotations = word pos tags trans ref rafsi longrafsi vlatai exp dephead deprel +vrt_columns = word pos tags trans ref rafsi longrafsi vlatai exp dephead deprel -vrt_structs_annotations = sentence.id sentence paragraph.n text.author text.tatoebaid text.date text.datefrom text.dateto text.time text.value text.reviews text.source -vrt_structs = sentence:id sentence paragraph text:author text:tatoebaid text:date text:datefrom text:dateto text:time text:value text:reviews text:source +vrt_structs_annotations = sentence.id sentence paragraph.n text.author text.tatoebaid text.date text.datefrom text.dateto text.time text.value text.reviews text.source +vrt_structs = sentence:id sentence paragraph text:author text:tatoebaid text:date text:datefrom text:dateto text:time text:value text:reviews text:source xml_elements = word word:pos word:tags word:trans word:ref word:dephead word:deprel msg:author msg:tatoebaid msg:date msg:time msg:value msg:reviews msg:source s p msg xml_annotations = token token.pos token.tags token.trans token.ref token.dephead token.deprel text.author text.tatoebaid text.date text.time text.value text.reviews text.source sentence paragraph text diff --git a/corpus_import/tatoeba/original/Makefile b/corpus_import/tatoeba/original/Makefile index 3bc8d1d..7b1fa41 100644 --- a/corpus_import/tatoeba/original/Makefile +++ b/corpus_import/tatoeba/original/Makefile @@ -1,6 +1,6 @@ tatoeba.xml: sentences_detailed.csv links.csv - python bregau.py > tatoeba.xml + python2 bregau.py > tatoeba.xml sentences_detailed.csv: wget http://tatoeba.org/files/downloads/sentences_detailed.csv diff --git a/corpus_import/tiki/Makefile b/corpus_import/tiki/Makefile index df96121..bee7ee9 100644 --- a/corpus_import/tiki/Makefile +++ b/corpus_import/tiki/Makefile @@ -3,11 +3,11 @@ original_dir = intermediate really_original = chunked files := $(basename $(notdir $(wildcard $(really_original)/*.xml))) -vrt_columns_annotations = word pos tags trans rafsi longrafsi ref dephead deprel -vrt_columns = word pos tags trans rafsi longrafsi ref dephead deprel +vrt_columns_annotations = word pos tags trans rafsi longrafsi vlatai exp ref dephead deprel +vrt_columns = word pos tags trans rafsi longrafsi vlatai exp ref dephead deprel -vrt_structs_annotations = sentence.id sentence paragraph.n text.title -vrt_structs = sentence:id sentence paragraph text:title +vrt_structs_annotations = sentence.id sentence paragraph.n text.title +vrt_structs = sentence:id sentence paragraph text:title xml_elements = word word:pos word:tags word:trans word:ref word:dephead word:deprel text text:title s p xml_annotations = token token.pos token.tags token.trans token.ref token.dephead token.deprel text text.title sentence paragraph