# ============================================================================ # # 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. # # 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 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 ; 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 = A/Advl | A/Subst ; # Verb sets # ========= LIST FiniteVerb = pres past ifi fut fut2 imp opt; LIST Gerund = ger ger_ppot ger_past ger_perf ger_impf ger_abs ; SET V-NotGerund = V - Gerund ; LIST Pres = pres ; LIST Participle = prc_perf prc_impf prc_cond prc_vol prc_plan ; LIST VerbalAdverb = gna_perf gna_cond gna_until gna_after ; LIST Prc-Impf = prc_impf ; LIST Inf = inf ; LIST Ger6 = ger6 ; # Barriers # ======== SET S-BOUNDARY = CS | Interr | EOS; # ======= # SECTION # ======= # # REMOVE Cop IF (NOT 1 EOS OR MARK) ; ## # SELECT Cop IF (1 EOS OR MARK) ; ## TODO (!) 13 . [0]Жоқ, Айгүлдің күшігі жоқ, оның мысығы бар. ## TODO (!) Дұрыс, оның мысығы бар. # ======= # SECTION # ======= # # Part-of-speech marking # ====================== # SELECT FiniteVerb IF (1 EOS OR ("ди"i)) # FIXME s/.*/SentenceBoundary/ (NOT 0 ("бар"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? ## # 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) ; ## Азамат белән Айгөл бакчада. # Determiners # =========== REMOVE Det IF (NOT 1/-1 NPMARK OR N OR Pron); #! Әхмәтнең кечкенә бер эте ^бар/бар/бар/бар/бар$ , #! әлегә эт дә бакчада . ## FIXME:CHECK; 'Pron' was needed because 'нәрсә' is tagged as prn. Maybe we should consider it noun (as in Kazakh)' SELECT Det IF (0C V OR Det OR A OR N) (1 NPMARK OR N) ; #! пример : Бар җирдән карый, әмма Әхмәтне таба алмый. #! Акча бармы? Бар. #! Акча бармы? Бар, ләкин бик аз! SELECT Det IF (-1C A) (1 N); #! Әхмәт тиз генә иске зур бер агачка йөгерә. #! Әхмәт акрын гына иске зур бер агачка йөгерә. # SELECT Pron IF (0C Det OR Pron) (1 Adv) ; ## 44 . [0]Ол енді ол дыбысты анығырақ ести бастады. # 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 pure adjective reading ("predicative" in this case) of an adjective if sentence ends REMOVE Advl IF (0 A1) (1 EOS) ; REMOVE Subst IF (0 A1) (1 EOS) (NOT 0/1 Cop) ## FIXME CHECK ; ## TODO (!) Син әкренсең -- (adj+cop vs adj.subst+cop)? # REMOVE SUB:1 P3 IF (0/1 Cop) (0/1 P1) ; ## "Біз [0]қуаныштымыз." # Postpositions # ============= # "<таба>" SELECT Post IF (-1 Dat) ; ## # "<бергә>" SELECT Post IF (-1 ("белән")) ; ## # "<соң>" 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) ; ## 187 . Біздің дәуірімізден 1 миллион жыл бұрын өмір сүрген "тік жүретін адамнан" [0]бастап, өз замандастарына дейінгі ## кезеңдерді қамтитын, ... орталықтың экспозициясы негізгі сегіз ірі бөлімнен тұрады. SELECT Pres IF (0 Pres OR Prc-Impf) (-1C V); #! Эт бу ике бала белән уйнарга ^ярата/ярат/ярат$. # SELECT (gpr_past) IF (0C (ger_past) + Nom) (1 N) ; ## 172 . Сот арқылы немесе өзгеде осындай құзыреті бар мемлекеттік органдардың ## шешімі арқылы тәркіленген мұражайлық маңызы бар жинақтардың немесе [0]жекелеген заттардың есебінен; # SELECT (prc_impf) IF (0 (pres p3)) (1 Vaux) ; ## яза аласыз ###################################### TO BE SORTED ############################ SELECT A IF (0 ("бар")) (-1 PersonalPossessives ); #! Әхмәтнең кечкенә бер эте ^бар/бар/бар/бар/бар$ . ## FIXME:CHECK # RISKY SELECT Det IF (0 ("берәр")) (1/-1 (px) OR Pron); #! Ул берәр хайванныкы да кошныкы да түгел. ## FIXME:CHECK:# 'Pron' was needed because 'нәрсә' is tagged as prn (e.g. "берәр нәрсә"). ################################################################################ # Wordform/lemma-specific rules # Adding new stuff here is discouraged. # ============================= # Try to generalize, if possible, existing rules. # "<үтә>" SELECT Adv IF (1 A) ; ## Бірақ кеше _өте_ суық еді! # да 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 ("белән")) (1 V) ; ## 6 . Азамат пен Айгүл ойнағанды жақсы көреді, олар әрдайым үлкен үйдің алдындағы бақшада [0]бірге ойнайды. ## (!) Ол Азаматпен бірге келді.