# ============================================================================ # # A COMMENTARY ON FORMATTING OF MAJORITY OF RULES # (read: a wannabe FORMATTING GUIDELINES) # ============================================================================ # # How most of the rules look like? # ================================ # # An explanation of what the rule does (if it's not obvious from # # code!), a name or any other comment # SELECT ABC IF # (0 DEF) # (1 GHI) # ; # ## A sentence the rule was written for. # ## (!) A corner-case-sentence: the rule mispredicted on it initially # ## but was modified accordingly (additional constraints etc.); or the ## ## rule still mispredicts on it, but this kind of sentences aren't ## ## that frequent. (Alternatively, place the corner-case sentence on ## the same line as the constraint). # # Sometimes you can't disambiguate a form with only one rule. In that # # case, several rules dealing with the same thing are grouped # # together # SELECT ABC IF # (0 DEF) # (1 KLM) # ; # REMOVE XYZ IF # (0 DEF) # (1 NOP) # (2 QRS) # ; # ## Example sentences for both of the rules. # ## Another example sentence. # ## (!) And another, on which the rule didn't/doesn't work. # Where a rule must be placed? # ============================ # In general, there are two kinds of rules -- ones that try to disambiguate # a certain wordform and ones which aren't tied up to any particular wordform # or lemma (i.e. no lemma or wordform for 0, they might have lemmas or wordforms # for other constraints). # ============================ # # END OF FORMATTING GUIDELINES # # ============================ # # ========== # # Delimiters # # ========== # DELIMITERS = "<.>" "" "" "<...>" "<¶>" ; SOFT-DELIMITERS = "<,>" ; SUBREADINGS = LTR ; # Alternate, left-to-right (main reading on the left) # ============= # # Tags and sets # # ============= # SETS LIST BOS = (>>>) ; LIST EOS = (<<<) ; # First-level/Parts-of-speech tags # ================================ LIST A = adj ; LIST Adv = adv ; LIST Pron = prn ; LIST N = n ; LIST Prop = np ; LIST V = v ; LIST Vaux = vaux ; LIST Cop = cop ; LIST Det = det ; LIST CC = cnjcoo ; LIST CS = cnjsub ; LIST Interj = ij ; LIST Num = num ; LIST Post = post ; LIST Postadv = postadv ; LIST Cm = cm ; LIST Rquot = rquot ; # POS sub-categories # ================== LIST Pers = pers ; LIST Interr = itg ; # "Syntactic" tags # ================ LIST Advl = advl ; LIST Attr = attr ; LIST Subst = subst ; # Morphosyntactic properties # if you find yourself embracing the same tag in # ========================== # brackets over and over again, you may want to # add it here LIST Sg = sg ; LIST Pl = pl ; LIST Nom = nom ; LIST Gen = gen ; LIST Dat = dat ; LIST Acc = acc ; LIST Abl = abl ; LIST Loc = loc ; LIST Ins = ins ; LIST P1 = p1 ; LIST P3 = p3 ; LIST PersonalPossessives = px1sg px2sg px3sp px1pl px2pl ; # All possible word categories # ============================ SET WORD = N | V | A | Post | Postadv | Pron | Det | Adv | CC | CS | Interj | Num | ("\?") ; SET PRE-N = A | Det | Postadv | Num | (n gen) | (prn gen) | CC | (attr) ; SET MARK = Cm | ("\\") | ("\;") | ("\(") ; SET WORDMARK = WORD | MARK ; SET N-MOD = A | Det | Num | (n gen) | (prn gen) ; SET ADJ-MOD = Postadv | Adv ; SET NPMARK = N-MOD | ADJ-MOD ; # Categories which cannot be part of a noun phrase # ================================================ SET NPNH = WORDMARK - PRE-N ; SET NPNHA = WORDMARK - PRE-N - Adv ; SET NOT-ADV = WORDMARK - Adv ; # Adjective sets # ============== LIST A/Advl = (adj advl) ; LIST A/Subst = (adj subst nom) ; SET A1-Nom = A/Advl | A/Subst ; # Verb sets # ========= LIST FiniteVerb = pres aor past ifi ifi_evid fut fut_plan imp opt; LIST V-P3 = (v p3) (vaux p3) (cop p3) ; LIST Gerund = ger ger_ppot ger_past ger_perf ger_impf ger_abs ; SET V-NotGerund = V - Gerund ; LIST Participle = prc_perf prc_impf prc_cond prc_vol prc_plan ; LIST VerbalAdverb = gna_perf gna_cond gna_until gna_after ; LIST FourAuxiliaries = "тұр" "жүр" "отыр" "жат" ; # Barriers # ======== SET S-BOUNDARY = CS | Interr | EOS ; # ======= # SECTION # ======= # # REMOVE SUB:1 Cop IF (NOT 1 EOS OR MARK) ; REMOVE SUB:1 Cop IF (-1 BOS OR MARK) ## Headings or enumerations ; ## # # SELECT SUB:1 Cop IF # (1 EOS OR MARK) # (NOT 0 Interj) ## Дұрыс, оның мысығы бар. # (NOT 0 FiniteVerb) ## 74 ... барлығы 53 ел [0]қатысты. #; ## Жоқ, Айгүлдің күшігі [0]жоқ, оның мысығы [0]бар. # ======= # SECTION # ======= # # Part-of-speech marking # ====================== # SELECT FiniteVerb IF (1 EOS OR ("де"i)) # FIXME s/.*/SentenceBoundary/ (NOT 0 ("шығар"i) OR ("бар"i)) # FIXME a better way? ; ## (!) 40 . Мүмкін бұл Азамат [0]шығар? ## (!) 13 . Жоқ, Айгүлдің күшігі жоқ, оның мысығы [0]бар. ## Мағынасы төңкеріліп [0]кетті деп ойламағаным үшін ғафу етіңіз. # SELECT Interj IF (-1 BOS) (1 Cm) ; ## "Мысалы, ежелгі заманның өзінде Арал теңізі көп елдерге мәлім болған." # REMOVE Post IF (NOT -1 N OR Prop OR Pron OR Subst OR Gerund) # FIXME What about referring to all ; # these (referring *consistently*) as # 'Nominal's? ## # An adjective ending with -LI is ambiguous with: 1) a noun or adjective in # accusative, and 2) with a verb in form. REMOVE Acc IF (0 (n acc) OR (adj subst nom)) (0 A) (NOT 1 V) ; REMOVE V IF (0 A) (0 (ifi)) (NOT 1 EOS OR Cm) ; SELECT A IF (-1 ("аса"i) OR ("өте"i)) (0 A) (0 (n acc)) ; "<атты>" SELECT A IF (1 N) ; ## 53 . Еуро-2012 туралы [0]қызықты статистикаға көз салыңыз. ## 91 . Өйткені, <...> Әл-Истахри келтірген мәліметтер аса [0]құнды саналады. ## 184 . Үшінші қабатта «Тәуелсіз Қазақстандағы жаңа Түркістан» [0]атты экспозициялар қойылған. # Proper noun vs noun SELECT Prop IF (0 N) (0 Prop) (0 ("[:upper:]+[:lower:]*"r)) (NOT -1 BOS) ; ## 108. Өйткені бүгінгі _Арал_ деген атау сол XVII ғасырдан бергі жерге берілген. SELECT Prop IF (0 N) (0 Prop) (0 ("[:upper:][:upper:]+"r)) ; ## АЗАМАТ ҚАЙДА? SELECT Prop IF (0 Prop) (0 N) (1 ("мен") + Post) (2 Prop) ; ## Азамат пен Айгүл бақшада. # SELECT Pron IF (0C Det OR Pron) (1 Adv) ; ## 44 . [0]Ол енді ол дыбысты анығырақ ести бастады. # Determiners # =========== # FIXME removes determiner even when there is a noun 1 to the right #REMOVE Det IF # ((NEGATE 1 N OR Subst) OR (NEGATE 1 A LINK 1 N OR Subst)) #; ## 44 . Ол енді ол дыбысты анығырақ ести бастады. ## (!) 34 . Ол Азаматтың қайда екенін білсе де айтқысы келген жоқ. # Nouns # ===== # REMOVE Attr IF (0 N OR Prop) (NOT 0 Loc) (NOT 1 N OR Prop) ; ## 176. Орталықта Түркістанның төл тарихына арналған музейлік [0]экспозиция жасақталған. ## (!) 184 . Үшінші қабатта «Тәуелсіз [0]Қазақстандағы жаңа Түркістан» атты экспозициялар қойылған. # Select attributive reading of the first noun of the II izafet construct # (as Tatar grammars call it) SELECT Attr IF (0C N OR Prop) (1 N OR Prop OR Subst) (1 (px3sp)) ; ## 111. Түркияның оңтүстік-шығысындағы [0]Газиантеп қаласында кеше болған жарылыстан қаза тапқандар саны 9-ға жетті. # If a former gerund or verbal adjective was lexicalized as a noun, select noun SELECT N IF (0 N) (0 Gerund OR (gpr_pot)) ; ## professions, such as "оқушы"; -U gerunds , in theory other gerunds too # Adjectives # ========== # select adverbial reading of adjectives if any verbal form except gerund follows # FIXME CHECK it might be a gerund as well SELECT Advl IF (1C V-NotGerund) ; ## # select adj+cop reading at the end of a sentence SELECT Sub:1 Cop IF (0C A1-Nom) (1 EOS OR MARK) ; REMOVE Subst IF # we want adj+cop reading here, not adj.subst+cop (0C A1-Nom) (1 EOS OR MARK) ; ## 19 . Ол еш нәрсені көріп тұрған [0]жоқ, ол санап жатыр. # REMOVE SUB:1 P3 IF (0/1 Cop) (0/1 P1) ; ## "Біз [0]қуаныштымыз." # Postpositions # ============= # "<қатар>" SELECT Post IF (-1 Pron + Ins) ; ## 174 . Орталық сонымен [0]қатар оқушыларға тәрбие беруде де маңызды рөл атқарады. ## 148 . Ол АҚШ үкіметін WikiLeaks сайтын қудалауын тоқтатуға шақырып, ## өзін ресейлік Pussy Riot панк тобымен және New York Times басылымымен [0]қатар қойды. # "<қарай>" SELECT Post IF (-1 Dat) ; ## # "<қарағанда>" SELECT Post IF (-1 Dat) ; ## # "<қарамастан>" SELECT Post IF (-1 Dat) ; ## # "<дейін>" SELECT Post IF (-1 Dat) ; ## # "<бері>" SELECT Post IF (-1 Abl) ; ## # "<бірге>" SELECT Post IF (-1 Ins) ; ## # "<қоса>" SELECT Post IF (-1 Dat) ; ## # "<кейін>" SELECT Post IF (-1 Abl) ; ## 23. Айгүл санап біткеннен кейін айналасына қарады. # Verbs # ===== # REMOVE Participle IF (NOT 1C V OR Vaux) ; ## # vs. REMOVE (prc_cond) IF (NOT 1 ("бол") + V) ; ## 34 . Ол Азаматтың қайда екенін [0]білсе де айтқысы келген жоқ. # SELECT Participle IF (0C Participle OR VerbalAdverb) (1 Vaux) ; ## 16 . Азамат ескі үлкен бір ағашқа қарай қатты [?]жүгіріп бара жатыр, ол сол ## ағаштың артына Айгүлден [0]жасырынып жатыр. # REMOVE Vaux IF (NOT -1 Participle) ; SELECT Vaux IF (-1C Participle) ; ## 187 . Біздің дәуірімізден 1 миллион жыл бұрын өмір сүрген "тік жүретін адамнан" [0]бастап, өз замандастарына дейінгі ## кезеңдерді қамтитын, ... орталықтың экспозициясы негізгі сегіз ірі бөлімнен тұрады. # Imperative or not? # ------------------ # is more common, so let's set it as default # Rules for selecting imperative reading of these three (if any) must be placed # before this rule SELECT (vaux p3) IF (-1 (prc_perf)) (0 ("<жүр>") OR ("<тұр>") OR ("<отыр>")) ; ## 15. Олардың анасы мысығымен бірге үйде, ол терезеден Азамат пен Айгүлдің ## ойнағанына қарап [0]тұр. ## 36 . Әлі де болса Азаматты табуға әрекет етіп [0]жүр. # 2p sg imperative form is a bare stem, so it is often ambigious with other # parts of speech REMOVE (imp) IF (NOT 1 EOS OR MARK OR ("де")) ; ## 96 . Ал оң жақ жағалауы батпақты, онда [0]қалың орман өскен. ## [0]Бар деп айттым мен оған. # ---------- # SELECT (gpr_past) IF (0C (ger_past) + Nom) (1 N) ; ## 172 . Сот арқылы немесе өзгеде осындай құзыреті бар мемлекеттік органдардың ## шешімі арқылы тәркіленген мұражайлық маңызы бар жинақтардың немесе ## [0]жекелеген заттардың есебінен; ################### TO BE DONE #################### # Deciding about the number of a verb or copula in the 3 person # Basic idea is to remove plural reading if subject is not in plural, # but there a lot of corner cases, which lead to lots of mispredictions. # So let's just delete plural reading for now. # # In Tatar, when the subject indicates the number, this LAR affix for the verbs # in 3 person is kind of optional too, so singular reading will work/is right for # the majority of cases. # # Selecting plural reading might be a more productive approach. REMOVE Pl IF (0 V OR Vaux OR Cop) (0 P3) ; ## # Thought that the above rule should cover copulas, seems that sometimes it doesn't REMOVE SUB:1 Pl IF (0/1 Cop) (0/1 P3) ; ## ###################################### TO BE SORTED ############################ ################################################################################ # Wordform/lemma-specific rules # Adding new stuff here is discouraged. # ============================= # Try to generalize, if possible, existing # rules. # "<өте>" SELECT Adv IF (1 A) ; ## Бірақ кеше _өте_ суық еді! # ugly and RISKY "<сол>" SELECT Det IF (NOT 1 ("қол"i) OR ("жақ"i)) ; ## (!) Күйеуім - сол жақтың қазағы. # "<аса>" SELECT Adv IF (1 A) ; ## "Әл-Истахри келтірген мәліметтер аса құнды саналады." # "<ал>" REMOVE CC IF (NOT -1 BOS OR Cm ) ; ## Бөлмеде шкаф бар, содан бiр кiтап ал. # FIXME test SELECT Pron IF (0 ("ешкі"i)) (0 ("ешкім"i)) (1* ("жоқ"i) OR (v neg) BARRIER EOS) ; ## 70. Оның рекордын әзірше ешкім бұза алған жоқ. # "<жылы>" SELECT N IF (-1 Num) ; ## # "<жылы>" SELECT N IF (-1 A) ; ## # "<қарасты>" SELECT A IF (-1 (dat)) ; ## 177. Орталыққа _қарасты_ Түркістан қаласында Н.Оңдасынов атындағы ## тарихи-мемориалдық мұражайы атты филиал жұмыс жасайды. # "<қайта>" SELECT Adv IF (1C V) ; ## 41 . Ол дыбыс қайта естіледі! ## Ол қайта алмайды. # "<енді>" SELECT Adv IF (1* Acc BARRIER EOS) (1* V BARRIER EOS) ; ## # "<көптеген>" SELECT Det IF (1 N + Pl) ; ## # ambigious with v.pass "<құрал>" SELECT N IF (-1 A OR (n attr)) ; ## # UGLY # "сый" is certainly not in the following example, # I don't think that сый is ever used "<сый>" SELECT N ; ## 171. Жеке және заңды тұлғалардан _сый_ немесе мұра ретінде қабылданған заттар ## есебінен. # imperative of "ісу" ("to swell") - just like "<сый>" above sounds odd, # but let's try to deal with it in a less ugly way "<іс>" SELECT N IF (-1 A) ; ## 178. ...тәрбиелік мәні бар іс-шараларды бірге ұйымдастыру... # FIXME: could be achieved with a more general rule I think "<көрме>" SELECT N IF (1 ("зал"i)) ; ## 181. Ғимарат 3 қабаттан, 5 көрме залынан, конференция залынан, ## қолөнершілердің шеберханасы... # SELECT N IF (0 ("же"i) + (gpr_fut)) (0 ("жер"i) + N) ; ## 24 . Ол "Азамат қай [0]жерге кетті? Оны көрдіңдер ме?" деп іздеп жатыр. # "<қарайды>" SELECT ("қара") IF (-1 Dat) ; ## 30 . Айгүл терезеде тұрған анасына қарайды. # SELECT CC IF (0 ("сондай-ақ"i)) (-1 BOS OR Cm) ; ## 87 . Сондай-ақ, Арал теңізінің көлемі жайлы, Арал теңізі жайлы ұғымдар сонау ## ерте дүние әдебиеттерінде де кездеседі. # SELECT N IF (0 ("құрама"i)) (-1 PRE-N) ; ## 76 . Қазақстандық құрама «А» тобында соңғы орында қалып қойды. # SELECT N IF (0 ("қор")) (-1 N) ; ## 169. Музей [0]қоры Қазақстан Республикасы Мәдениет және ақпарат министрінің... # SELECT A IF (0 ("құрама")) (-1 (np top)) ; ## 69. Франция құрамасының бұрынғы ойыншысы Мишель Платини... # "<жинағы>" SELECT N IF (-1 N + Pl) ; ## 165. ...тарихи жәдігерлер жинағы арқылы көрсету. ## Қазақстан заңдарының жинағы # "<Ертең>" SELECT Adv ; "<ертең>" SELECT Adv IF (1 V) ; ## Ертең келесің бе? ## Ертең Елбасы Нұрсұлтан Назарбаев Қазақстанның 2050 жылға дейінгі даму бағдарламасын жариялайды. ## Оны ертең еститін боласыздар. # SELECT N IF (0 ("сыра"i)) (1 ("іш") + V) ; ## Шелекпен сыра ішемін. # да SELECT SUB:1 Postadv IF (0 (gna_cond)) ; ## 34 . Ол Азаматтың қайда екенін [0]білсе+[0/1_or_-1]де айтқысы келген жоқ. # with SUBREADINGS = LTR ; option ## Ол Азаматтың қайла екенін [0]білсе+[0/1]де+[0/2_or_-1]мі? # with SUBREADINGS = LTR ; option # SELECT Adv IF (0 ("бірге")) (NOT -1 Ins) (1 V) ; ## 6 . Азамат пен Айгүл ойнағанды жақсы көреді, олар әрдайым үлкен үйдің алдындағы бақшада [0]бірге ойнайды. ## (!) Ол Азаматпен бірге келді. # "<жасар>" SELECT A IF (-1 Num) ; ## 7 . Азамат алты жасар кішкентай бала. ################### TEMPORARY HACKS TO GET THE STORY TRANSLATED #################### ################### SOME SHOULD BE REWRITTEN LATER #################### REMOVE N IF (0 ("ақырын")); ## Айгүл оны _ақырын_ тыңдайды. SELECT A/Advl IF (0 ("ақырын")); ## Айгүл оны _ақырын_ тыңдайды. REMOVE N IF (0 ("жылы")) (NOT -1 N OR Num) ; #! Ауа райы бүгін әбден жақсы, ^жылы/жыл/жылы/жылы. REMOVE (pass) IF (0 ("қырыл")); ## жасушалардың қырылуы "<жаппай>" SELECT A IF (1 N) ; ## Қытай мамандары ауыл тұрғындарының қалаға жаппай ағылуын тоқтататын жаңа # саясат жүргізуге шақырып отыр. # "<бір>" SELECT Det IF (-1C A) (1 N); ## Әхмәт тиз генә иске зур _бер_ агачка йөгерә. ## Әхмәт акрын гына иске зур _бер_ агачка йөгерә. # Must be placed before "SELECT Det IF (1* NPMARK BARRIER N OR MARK) ;" "<бар>" REMOVE Det IF (1 ("енді"i)) (2 Rquot) ; ## # Себебі Түрік Әуежолдары сынды бір серігіміз бар енді» деді. # "<бар>" SELECT V IF (-1 Dat) ; "<бар>" SELECT A IF (-1 (px3sp)) ; "<бар>" SELECT Det IF (1* NPMARK BARRIER N OR MARK) ; "<бар>" REMOVE Det IF (1 S-BOUNDARY OR MARK) ; ## 172. Сот арқылы немесе өзгеде осындай құзыреті _бар_ мемлекеттік органдардың ## шешімі арқылы тәркіленген мұражайлық маңызы бар жинақтардың немесе жекелеген ## заттардың есебінен. ## Бар җирдән карый, әмма Әхмәтне таба алмый. ## Акча бармы? Бар. ## Акча бармы? Бар, ләкин бик аз! # басым recognized as noun бас, select ADJ form "<басым>" SELECT A IF (1 (px3sp)) ; ## Олардың басым бөлігі – 2011 жылы жұмыс іздеп, # тұрғыны recognized as noun тұрғы should select тұрғын before қаза "<тұрғыны>" SELECT ("тұрғын") IF (1 ("қаза")) ; ## 2011 жылы 16 желтоқсанда 16 тұрғыны қаза тапқан # V-Iп FourAuxiliaries-GAн жоқ-COP SELECT (gpr_past) IF (-1 (prc_perf)) (0 FourAuxiliaries) (1 ("жоқ")) ; "<жоқ>" SELECT SUB:1 Cop IF (-2 (prc_perf)) (-1 FourAuxiliaries) ; "<жоқ>" REMOVE Subst IF (-2 (prc_perf)) (-1 FourAuxiliaries) ; ## 19 . Ол еш нәрсені көріп тұрған жоқ, ол санап жатыр. # "<керек>" SELECT A ; ## 45 . Бұл Азамат болу керек! # ======= # SECTION # experimental # ======= # # The following rules are for _translating_, therefore shouldn't be here (i.e. in apertium-kaz.kaz.rlx) # FIXME SUBSTITUTE (nom) (dat) TARGET (prn pers) IF (1* (ger) + PersonalPossessives LINK 1 ("керек")) ; ## [0]Мен үйге қайтуым керек. >> [0]Миңа өйгә кайтырга кирәк. ## [0]Сен үйге қайтуың керек. >> [0]Сиңа өйгә кайтырга кирәк. # SUBSTITUTE (dat) (nom) TARGET (prn pers) IF (1* (ger_past) + Nom LINK 1 ("ұна") + (aor)) ; SUBSTITUTE (ger_past) (inf) TARGET (ger_past nom) IF (1 ("ұна") + (aor)) ; SUBSTITUTE (nom) (*) TARGET (inf nom) IF (1 ("ұна") + (aor)) ; SUBSTITUTE (p3) (p1) TARGET ("ұна") + (aor) IF (@1 (prn p1)) ; SUBSTITUTE (p3) (p2) TARGET ("ұна") + (aor) IF (@1 (prn p2)) ; # FIXME take the tag from the first word ## Маған сөздік түзіген ұнайды. >> Мин сүзлек төзергә яратам.