Commit 9e4f7e57c451ef131c5be4bffaf99111eb6f97d2

Authored by Michał Lenart
1 parent 3fa5c338

obsługa pozostałych elementów wyrażeń regularnych (opcjonalne występienie, dokła…

…dne podanie liczby wystąpień w nawiasach klamrowych)

git-svn-id: svn://svn.nlp.ipipan.waw.pl/morfeusz/morfeusz@143 ff4e3ee1-f430-4e82-ade0-24591c43f1fd
fsabuilder/morfeuszbuilder/fsa/convertinput.py
... ... @@ -12,7 +12,7 @@ def _mergeEntries(inputLines, lowercase):
12 12 prevInterps = None
13 13 for key, interp in inputLines:
14 14 key = key.lower() if lowercase else key
15   -# print key
  15 +# print 'key=', key, 'interp=', interp
16 16 assert key
17 17 if prevKey and prevKey == key:
18 18 prevInterps.append(interp)
... ... @@ -95,7 +95,7 @@ class PolimorfConverter4Generator(object):
95 95 line = line.decode(self.inputEncoding).strip('\n')
96 96 orth, base, tag, name = _parseLine(line)
97 97 if base:
98   - if u':' in base and len(base) > 1:
  98 + if u':' in base and len(base) > 1 and base.split(u':', 1)[1].isalpha():
99 99 base, homonymId = base.split(u':', 1)
100 100 else:
101 101 homonymId = ''
... ... @@ -130,8 +130,8 @@ class PolimorfConverter4Generator(object):
130 130 tagnum = int(tagnum)
131 131 namenum = int(namenum)
132 132 typenum = int(typenum)
133   - yield (base, Interpretation4Generator(orth, base, tagnum, namenum, typenum, homonymId))
134 133 prevLine = line
  134 + yield (base, Interpretation4Generator(orth, base, tagnum, namenum, typenum, homonymId))
135 135  
136 136 def convert(self, inputLines):
137 137 return _mergeEntries(self._reallyParseLines(self._sortLines(self._partiallyParseLines(inputLines))), lowercase=False)
... ...
fsabuilder/morfeuszbuilder/segrules/preprocessor.py
... ... @@ -9,7 +9,7 @@ from pyparsing import *
9 9 from morfeuszbuilder.utils import exceptions
10 10 from pyparseString import pyparseString
11 11  
12   -identifier = Word(alphas, bodyChars=alphanums+u'_>*+')
  12 +identifier = Word(alphas, bodyChars=alphanums+u'_>*+{},')
13 13 define = Keyword('#define').suppress() + identifier + Optional(Suppress('(') + identifier + Suppress(')')) + restOfLine + LineEnd() + StringEnd()
14 14 ifdef = Keyword('#ifdef').suppress() + identifier + LineEnd() + StringEnd()
15 15 endif = Keyword('#endif').suppress() + LineEnd() + StringEnd()
... ...
fsabuilder/morfeuszbuilder/segrules/rules.py
... ... @@ -24,6 +24,9 @@ class SegmentRule(object):
24 24 def addToNFA(self, fsa):
25 25 raise NotImplementedError()
26 26  
  27 + def allowsEmptySequence(self):
  28 + raise NotImplementedError()
  29 +
27 30 def _doAddToNFA(self, startStates, endState):
28 31 raise NotImplementedError()
29 32  
... ... @@ -42,6 +45,9 @@ class TagRule(SegmentRule):
42 45 def _doAddToNFA(self, startState, endState):
43 46 startState.addTransition((self.segnum, self.shiftOrth), endState)
44 47  
  48 + def allowsEmptySequence(self):
  49 + return False
  50 +
45 51 def __str__(self):
46 52 return u'%s(%d)' % (self.segtype, self.segnum)
47 53  
... ... @@ -77,6 +83,9 @@ class ConcatRule(ComplexRule):
77 83 lastChild = self.children[-1]
78 84 lastChild._doAddToNFA(currStartState, endState)
79 85  
  86 + def allowsEmptySequence(self):
  87 + return all(map(lambda rule: rule.allowsEmptySequence(), self.children))
  88 +
80 89 def __str__(self):
81 90 return u' '.join(map(lambda c: str(c), self.children))
82 91  
... ... @@ -93,6 +102,9 @@ class OrRule(ComplexRule):
93 102 child._doAddToNFA(intermStartState, intermEndState)
94 103 intermEndState.addTransition(None, endState)
95 104  
  105 + def allowsEmptySequence(self):
  106 + return any(map(lambda rule: rule.allowsEmptySequence(), self.children))
  107 +
96 108 def __str__(self):
97 109 return u'|'.join(map(lambda c: str(c), self.children))
98 110  
... ... @@ -115,5 +127,33 @@ class ZeroOrMoreRule(UnaryRule):
115 127 intermEndState.addTransition(None, endState)
116 128 endState.addTransition(None, intermStartState)
117 129  
  130 + def allowsEmptySequence(self):
  131 + return True
  132 +
118 133 def __str__(self):
119 134 return u'(' + str(self.child) + ')*'
  135 +
  136 +class OptionalRule(UnaryRule):
  137 +
  138 + def __init__(self, child, linenum):
  139 + super(OptionalRule, self).__init__(child, linenum)
  140 + assert isinstance(child, SegmentRule)
  141 +
  142 + def addToNFA(self, fsa):
  143 + raise ValueError()
  144 +
  145 + def _doAddToNFA(self, startState, endState):
  146 + intermStartState = RulesNFAState(self)
  147 + intermEndState = RulesNFAState(self)
  148 +
  149 + startState.addTransition(None, intermStartState)
  150 + startState.addTransition(None, endState)
  151 + self.child._doAddToNFA(intermStartState, intermEndState)
  152 + intermEndState.addTransition(None, endState)
  153 +
  154 + def allowsEmptySequence(self):
  155 + return True
  156 +
  157 + def __str__(self):
  158 + return u'(' + str(self.child) + ')?'
  159 +
... ...
fsabuilder/morfeuszbuilder/segrules/rulesParser.py
... ... @@ -56,7 +56,11 @@ class RulesParser(object):
56 56 combinationEnumeratedLines = segtypesConfigFile.enumerateLinesInSection(section, ignoreComments=False)
57 57 combinationEnumeratedLines = list(preprocessor.preprocess(combinationEnumeratedLines, defs, filename))
58 58 for rule in self._doParse(combinationEnumeratedLines, segtypesHelper, filename):
59   -# print rule
  59 + if rule.allowsEmptySequence():
  60 + raise exceptions.ConfigFileException(
  61 + filename,
  62 + rule.linenum,
  63 + 'This rule allows empty segments sequence to be accepted')
60 64 rule.addToNFA(nfa)
61 65 # nfa.debug()
62 66 try:
... ... @@ -86,6 +90,35 @@ class RulesParser(object):
86 90 # return rules.TagRule(segtype)
87 91 return rules.TagRule(segtypesHelper.getSegnum4Segtype(segtype), shiftOrth, segtype, lineNum)
88 92  
  93 + def _createQuantRule1(self, child, quantity, lineNum, line, segtypesHelper):
  94 + if quantity <= 0:
  95 + raise exceptions.ConfigFileException(segtypesHelper.filename, lineNum, u'%s - invalid quantity: %d' % (line, quantity))
  96 + else:
  97 + return rules.ConcatRule(quantity * [child], lineNum)
  98 +
  99 + def _createQuantRule2(self, child, leftN, rightN, lineNum, line, segtypesHelper):
  100 + if leftN > rightN or (leftN, rightN) == (0, 0):
  101 + raise exceptions.ConfigFileException(segtypesHelper.filename, lineNum, u'%s - invalid quantities: %d %d' % (line, leftN, rightN))
  102 + elif leftN == 0:
  103 + children = [rules.OptionalRule(child, lineNum)]
  104 + for n in range(2, rightN + 1):
  105 + children.append(self._createQuantRule1(child, n, lineNum, line, segtypesHelper))
  106 + return rules.OrRule(children, lineNum)
  107 + else:
  108 + children = [self._createQuantRule1(child, n, lineNum, line, segtypesHelper) for n in range(leftN, rightN + 1)]
  109 + return rules.OrRule(children, lineNum)
  110 +
  111 + def _createQuantRule3(self, child, quantity, lineNum, line, segtypesHelper):
  112 + if quantity <= 0:
  113 + raise exceptions.ConfigFileException(segtypesHelper.filename, lineNum, u'%s - invalid quantity: %d' % (line, quantity))
  114 + else:
  115 + return rules.ConcatRule(
  116 + [
  117 + rules.ConcatRule(quantity * [child], lineNum),
  118 + rules.ZeroOrMoreRule(child, lineNum)
  119 + ],
  120 + lineNum)
  121 +
89 122 def _doParseOneLine(self, lineNum, line, segtypesHelper, filename):
90 123 rule = Forward()
91 124 tagRule = Word(alphanums+'_')
... ... @@ -94,7 +127,11 @@ class RulesParser(object):
94 127 atomicRule = tagRule ^ shiftOrthRule ^ parenRule
95 128 zeroOrMoreRule = atomicRule + Suppress('*')
96 129 oneOrMoreRule = atomicRule + Suppress('+')
97   - unaryRule = atomicRule ^ zeroOrMoreRule ^ oneOrMoreRule
  130 + optionalRule = atomicRule + Suppress('?')
  131 + quantRule1 = atomicRule + Suppress('{') + Word(nums) + Suppress('}')
  132 + quantRule2 = atomicRule + Suppress('{') + Word(nums) + Suppress(',') + Word(nums) + Suppress('}')
  133 + quantRule3 = atomicRule + Suppress('{') + Word(nums) + Suppress(',') + Suppress('}')
  134 + unaryRule = atomicRule ^ zeroOrMoreRule ^ oneOrMoreRule ^ optionalRule ^ quantRule1 ^ quantRule2 ^ quantRule3
98 135 oneOfRule = delimitedList(unaryRule, delim='|')
99 136 complexRule = unaryRule ^ oneOfRule
100 137 if self.rulesType == RulesParser.PARSE4ANALYZER:
... ... @@ -107,6 +144,10 @@ class RulesParser(object):
107 144 shiftOrthRule.setParseAction(lambda string, loc, toks: self._createNewTagRule(toks[0], True, lineNum, line, segtypesHelper))
108 145 # parenRule.setParseAction(lambda string, loc, toks: toks[0])
109 146 zeroOrMoreRule.setParseAction(lambda string, loc, toks: rules.ZeroOrMoreRule(toks[0], lineNum))
  147 + quantRule1.setParseAction(lambda string, loc, toks: self._createQuantRule1(toks[0], int(toks[1], 10), lineNum, line, segtypesHelper))
  148 + quantRule2.setParseAction(lambda string, loc, toks: self._createQuantRule2(toks[0], int(toks[1], 10), int(toks[2], 10), lineNum, line, segtypesHelper))
  149 + quantRule3.setParseAction(lambda string, loc, toks: self._createQuantRule3(toks[0], int(toks[1], 10), lineNum, line, segtypesHelper))
  150 + optionalRule.setParseAction(lambda string, loc, toks: rules.OptionalRule(toks[0], lineNum))
110 151 oneOrMoreRule.setParseAction(lambda string, loc, toks: rules.ConcatRule([toks[0], rules.ZeroOrMoreRule(toks[0], lineNum)], lineNum))
111 152 oneOfRule.setParseAction(lambda string, loc, toks: rules.OrRule(toks, lineNum))
112 153 concatRule.setParseAction(lambda string, loc, toks: toks[0] if len(toks) == 1 else rules.ConcatRule(toks, lineNum))
... ...
input/segmenty1.dat
... ... @@ -7,9 +7,245 @@ praet=split composite
7 7  
8 8 #define moze_interp(segmenty) wsz_interp segmenty wsz_interp
9 9  
10   -dig>* dig
11   -(adja dywiz)+ adj
12   -naj> adj_sup
  10 +# Segmenty występujące samodzielnie:
  11 +#
  12 +# domyślny typ segmentu samodzielnego:
  13 +moze_interp(samodz)
  14 +
  15 +# segment samotny, który nie dopuszcza nawet znaku interpunkcyjnego po
  16 +# sobie
  17 +samotny
  18 +
  19 +# przeszlik pojedynczy w formie nieaglutynacyjnej, np. „gniótł”:
  20 +moze_interp(praet_sg_na)
  21 +
  22 +# przeszlik pojedynczy w formie niezróżnicowanej aglutynacyjnie, np. „moze”:
  23 +moze_interp(praet_sg)
  24 +
  25 +# przeszlik mnogi, np. „czytali”:
  26 +moze_interp(praet_pl)
  27 +
  28 +# partykuła „by”:
  29 +moze_interp(by)
  30 +
  31 +# inne segmenty, które dopuszczają po sobie aglutynant,
  32 +# np. „powininna”, „czyżby”:
  33 +moze_interp(z_aglt)
  34 +moze_interp(z_aglt_by)
  35 +
  36 +# forma przymiotnikowa (dopuszcza adja):
  37 +moze_interp(adj)
  38 +
  39 +# dywiz (jako samodzielny segment jest tylko błędnym użyciem w funkcji
  40 +# myślnika, ale trzeba to dopuścić):
  41 +dywiz
  42 +
  43 +# pauza i półpauza w funkcji myślnika
  44 +pauza
  45 +polpauza
  46 +
  47 +#ifdef isolated
  48 +adja
  49 +#endif
  50 +
  51 +
  52 +# Połączenia z aglutynantami:
  53 +#
  54 +#ifdef split
  55 +# Czas przeszły:
  56 +# np. „gniotł·am”
  57 +moze_interp( praet_sg_agl aglsg )
  58 +# np. „czytał·em”
  59 +moze_interp(praet_sg aglsg)
  60 +# np. „czytali·ście”
  61 +moze_interp(praet_pl aglpl)
  62 +
  63 +# Tryb warunkowy:
  64 +# np. „gniótł·by”
  65 +moze_interp(praet_sg_na by)
  66 +# np. „czytało·by”
  67 +moze_interp(praet_sg by)
  68 +# np. „gnietli·by”
  69 +moze_interp(praet_pl by)
  70 +# np. „gniótł·by·ś”
  71 +moze_interp(praet_sg_na by aglsg)
  72 +# np. „czytał·by·m”
  73 +moze_interp(praet_sg by aglsg)
  74 +# np. „gnietli·by·śmy”
  75 +moze_interp(praet_pl by aglpl)
  76 +#else
  77 +# moze_interp(praetcond)
  78 +#endif
  79 +# np. „by·ś”
  80 +moze_interp(by aglsg)
  81 +# np. „by·ście”
  82 +moze_interp(by aglpl)
  83 +
  84 +# np. „gdyby·m”
  85 +moze_interp(z_aglt aglsg)
  86 +moze_interp(z_aglt_by aglsg)
  87 +# np. „gdyby·ście”
  88 +moze_interp(z_aglt aglpl)
  89 +moze_interp(z_aglt_by aglpl)
  90 +# oraz wersje z by, np. chybabym
  91 +moze_interp(z_aglt by aglsg)
  92 +moze_interp(z_aglt by aglpl)
  93 +
  94 +# To jest dużo za dużo, ale tytułem eksperymentu:
  95 +#ifdef permissive
  96 +moze_interp(samodz aglsg)
  97 +moze_interp(samodz aglpl)
  98 +#endif
  99 +
  100 +# Złożone formy przymiotnikowe
  101 +# np. „biało·-·czerwony”
  102 +moze_interp( (adja dywiz)+ adj )
  103 +# poniższe załatwione przez + powyżej:
  104 +# # np. „niebiesko·-·biało·-·czerwona”
  105 +# adja dywiz adja dywiz adj interp?
  106 +# # itd. (zatrzymujemy się pragmatycznie na 5 członach)
  107 +# adja dywiz adja dywiz adja dywiz adj interp?
  108 +# adja dywiz adja dywiz adja dywiz adja dywiz adj interp?
  109 +
  110 +# Formy zanegowane stopnia wyższego przymiotników i przysłówków (WK)
  111 +# np. „nie·grzeczniejszy”, „nie·grzeczniej”
  112 +moze_interp( adj_com )
  113 +moze_interp( nie> adj_com )
  114 +
  115 +# Formy „zanegowane” gerundiów i imiesłowów:
  116 +# np. „nie·czytanie”, „nie·przeczytany”, „nie·czytający”:
  117 +moze_interp( nie> negat )
  118 +
  119 +# Przyimki akceptujące krótką formę „-ń”
  120 +moze_interp(z_on_agl)
  121 +# np. „do·ń”
  122 +moze_interp(z_on_agl on_agl)
  123 +
  124 +# Liczba zapisana jako ciąg cyfr:
  125 +#moze_interp( dig>* dig )
  126 +dig{8}
  127 +dig dig{0,2}
  128 +dig{5,6}
  129 +dig{10,}
  130 +
  131 +# Liczba rzymska zapisana jako ciąg cyfr rzymskich:
  132 +# (kiepskie, trzeba poprawić wyrażeniem regularnym)
  133 +moze_interp( roman>* roman )
  134 +
  135 +# Formacje prefiksalne
  136 +#### trzeba wydzielić odpowiednie samodze!
  137 +# rzeczownikowe
  138 +# np. „euro·sodoma”, „e-·papieros”
  139 +moze_interp(nomina)
  140 +moze_interp( prefs> nomina ) !weak
  141 +# czasownikowe np. „po·nakapywać”
  142 +moze_interp(inf_imperf|praet_imperf|imps_imperf|fin_imperf|impt_sg_imperf|impt_pl_imperf|impt_sg_perf|impt_pl_perf)
  143 +moze_interp( prefv> (inf_imperf|praet_imperf|imps_imperf|fin_imperf|impt_sg_imperf|impt_pl_imperf) ) !weak
  144 +# przymiotnikowe np. „do·żylny”, „euro·sodomski”, „bez·argumentowy”
  145 +moze_interp(ppas|adv_pos|pact)
  146 +# moze_interp(prefa> adj)
  147 +moze_interp( prefa> ( adj|adv_pos|pact|ppas ) ) !weak
  148 +moze_interp( prefppas> ppas ) !weak
  149 +
  150 +# Apozycje z dywizem
  151 +# np. „kobieta-prezydent”
  152 +moze_interp( nomina (dywiz) nomina )
  153 +
  154 +# Zakresy liczbowe, daty, np. 1911-1939.
  155 +moze_interp((dig>* dig) dywiz (dig>* dig))
  156 +
  157 +# poniższe do sprawdzenia, najwyraźniej obecne w tekstach, skoro wprowadziliśmy:
  158 +# ?
  159 +adj dywiz adj
  160 +# ?
  161 +adj dywiz samodz
  162 +# ?
  163 +samodz dywiz adj
  164 +
  165 +#### PONIŻEJ REGUŁY WK
  166 +# Stopień najwyższy:
  167 +# np. „naj·zieleńszy”, „naj·mądrzej”
  168 +moze_interp( naj> adj_sup )
  169 +# Cząstka li przy osobowych formach czasownika oddzielona dywizem: znasz-li ten kraj
  170 +moze_interp( praet_sg dywiz li)
  171 +moze_interp( praet_sg aglsg dywiz li)
  172 +moze_interp( praet_pl dywiz li)
  173 +moze_interp( praet_pl aglpl dywiz li)
  174 +moze_interp( praet_sg_na dywiz li)
  175 +moze_interp( fin_perf)
  176 +moze_interp( fin_imperf)
  177 +moze_interp( (fin_perf|fin_imperf) dywiz li)
  178 +
  179 +# i bez dywizu --- czy bez dywizu jest sens łapać?
  180 +#moze_interp( praet_sg li)
  181 +#moze_interp( praet_pl li)
  182 +#moze_interp( praet_sg_na li)
  183 +#moze_interp( (fin_perf|fin_imperf) li)
  184 +
  185 +# reguła z partykułą ‹+że› przy trybie rozkazującym
  186 +# zakończonym na spółgłoskę
  187 +moze_interp(impt_sg_imperf ze)
  188 +moze_interp(impt_sg_perf ze)
  189 +# dodatkowo reguła dla part+że (niemalże, omalże, nieomalże):
  190 +# moze_interp(part_z_ze ze) --- już niepotrzebne, part. wpisane do słownika
  191 +# potrzebna jeszcze reguła dla ‹onże›
  192 +# i dla ‹+ż› przy zakończonym na samogłoskę
  193 +moze_interp(impt_pl_imperf z)
  194 +moze_interp(impt_pl_perf z)
  195 +
  196 +# aglutynant przy przymiotniku --- obsługiwane wyżej w wersji permissive
  197 +# moze_interp( adj aglsg )
  198 +moze_interp( adj aglpl )
  199 +
  200 +# forma złoż. liczebnika + przymiotnik, np. wieloaspektowy, pięciomasztowy
  201 +# dwudziestopięcioipółletni
  202 +moze_interp( i )
  203 +moze_interp( pol_zloz > adj ) !weak
  204 +moze_interp( num_zloz>+ adj ) !weak
  205 +moze_interp( num_zloz>+ i> pol_zloz> adj ) !weak
  206 +# moze_interp(num_zloz+ (i pol_zloz)? adj)
  207 +
  208 +# półdolarówka, półsiostra
  209 +moze_interp( ( pol_zloz>|num_zloz> ) nomina ) !weak
  210 +# nie analizuje: dwudziestopięcioipółlatek --- powinien?
  211 +# moze_interp( num_zloz nomina )
  212 +# czy dodać sufiksy: +latek m1, +latek m2, +latka f ? Chyba nie trzeba
  213 +
  214 +# wykluczenie ze złożeń przymiotników: ten, ów, ki, si.
  215 +moze_interp(adj_anty_zloz)
  216 +
  217 +# złożenia adja+adj/adv bez dywizu, np. średniopienny, sierściowłosy
  218 +moze_interp(adja>+ adj) !weak
  219 +
  220 +# złożenia konkretnych przyimków z formą -ń rzeczownika on:
  221 +moze_interp(prep_n)
  222 +moze_interp(prep_n n)
  223 +
  224 +# REGUŁY EKSPERYMENTALNE
  225 +# formy złoż. rzeczowników i sufiksy
  226 +moze_interp( substa> sufs ) !weak
  227 +
  228 +# złożenia imiesłowów przymiotnikowych czynnych;
  229 +# z braku form złoż. korzysta się z imiesłowów przysłówkowych + o
  230 +moze_interp(pcon)
  231 +# moze_interp( (pcon> morphconj dywiz)+ pact )
  232 +
  233 +# liczba arabska formą przymiotnikową, przysłówkową lub rzeczownikową: 22-letni, 20-latek,
  234 +# 1-majowy, 3-krotnie
  235 +moze_interp( dig>+ dywiz> (adj|adv_pos|nomina) )
  236 +
  237 +# liczba rzymska z formą przymiotnikową: XIX-wieczny
  238 +moze_interp( roman>+ dywiz> adj )
  239 +
  240 +# formy złoż. z sufiksem +latek:
  241 +moze_interp( num_zloz>+ latek ) !weak
  242 +moze_interp(num_zloz>+ i> pol_zloz> latek ) !weak
  243 +
  244 +# złożenia liczbowe z sufiksem +latek, np. 20-latek:
  245 +moze_interp( dig>+ dywiz> latek )
  246 +
  247 +# interpretacja znaków interpunkcyjnych
  248 +# moze_interp(samodz interp)
13 249  
14 250 [generator combinations]
15 251  
... ... @@ -19,12 +255,35 @@ nie
19 255 prefs
20 256 prefv
21 257 prefa
  258 +prefppas
  259 +ppas
  260 +pcon
  261 +morphconj
  262 +li
  263 +substa
  264 +sufs
  265 +latek
  266 +dywiz
  267 +pauza
  268 +polpauza
  269 +kropka
  270 +adj_anty_zloz
  271 +adj_com
  272 +fin_perf
  273 +fin_imperf
  274 +nomina
  275 +adv_pos
  276 +pact
  277 +inf_imperf
  278 +praet_imperf
  279 +imps_imperf
  280 +ze
  281 +z
22 282 dig
  283 +roman
23 284 adja
24 285 adj
25 286 adj_sup
26   -adj_com
27   -fin
28 287 negat
29 288 on_agl
30 289 z_on_agl
... ... @@ -32,34 +291,45 @@ samotny
32 291 interp
33 292 aglsg
34 293 aglpl
  294 +z_aglt
  295 +z_aglt_by
  296 +by
35 297 praetcond
36 298 praet_sg_agl
37 299 praet_sg_na
38 300 praet_sg
39 301 praet_pl
40   -z_aglt
41   -by
42   -li
43   -nomina
44   -adjectiva
45   -verba_imperf
46   -dywiz
47   -kropka
  302 +impt_sg_perf
  303 +impt_sg_imperf
  304 +impt_pl_perf
  305 +impt_pl_imperf
  306 +pol_zloz
  307 +num_zloz
  308 +i
  309 +n
  310 +prep_n
  311 +emoticon
  312 +killfile
48 313 samodz
49 314  
  315 +
50 316 [tags]
51 317 naj naj
52 318 nie nie
53 319 prefs prefs
54 320 prefv prefv
55 321 prefa prefa
  322 +prefppas prefppas
56 323 dig dig
  324 +roman romandig
57 325 adja adja
  326 +substa substa
58 327 adj adj:%:pos
59 328 adj_sup adj:%:sup
60 329 adj_sup adv:sup
61 330 adj_com adj:%:com
62 331 adj_com adj:%:com
  332 +pcon pcon:imperf
63 333 negat ger:%:neg
64 334 negat pact:%:neg
65 335 negat ppas:%:neg
... ... @@ -67,49 +337,110 @@ on_agl ppron3:sg:gen.acc:m1.m2.m3:ter:nakc:praep
67 337 z_on_agl prep:%
68 338 samotny brev:pun
69 339 samotny brev:npun
70   -samotny interj
  340 +# samotny interj
  341 +samotny emoticon
71 342 interp interp
72 343 aglsg aglt:sg:%
73 344 aglpl aglt:pl:%
74   -samodz %
75   -praet_fin praet:%
76   -praet_fin fin:%
77   -li li:qub:%
  345 +praet_sg_agl praet:sg:%:agl
  346 +praet_sg_na praet:sg:%:nagl
  347 +praet_sg praet:sg:%
  348 +praet_pl praet:pl:%
  349 +praet_sg winien:sg:%
  350 +praet_pl winien:pl:%
  351 +fin_perf fin:%:perf
  352 +fin_imperf fin:%:imperf
78 353 nomina subst:%
79 354 nomina ger:%
80 355 nomina depr:%
81   -adjectiva adj:%
82   -adjectiva adv:%
83   -adjectiva ppas:%
84   -adjectiva pact:%
85   -verba_imperf praet:%:imperf
86   -verba_imperf fin:%:imperf
87   -verba_imperf inf:imperf
88   -verba_imperf imps:imperf
89   -verba_imperf impt:imperf
90   -
  356 +adv_pos adv:pos
  357 +ppas ppas:%
  358 +pact pact:%
  359 +praet_imperf praet:%:imperf
  360 +inf_imperf inf:imperf
  361 +imps_imperf imps:imperf
  362 +impt_sg_imperf impt:sg:%:imperf
  363 +impt_sg_perf impt:sg:%:perf
  364 +impt_pl_imperf impt:pl:%:imperf
  365 +impt_pl_perf impt:pl:%:perf
  366 +num_zloz num:comp
  367 +prep_n prep:%:wok
  368 +samodz %
91 369  
92 370 [lexemes]
  371 +pol_zloz pół:num:comp
  372 +i i:conj
  373 +by by:qub
  374 +li li:qub
  375 +ze +że:qub
  376 +z +ż:qub
  377 +killfile +ć:qub
93 378 z_aglt aby:comp
94 379 z_aglt bowiem:comp
95   -by by:qub
96 380 z_aglt by:comp
97 381 z_aglt cóż:subst
98 382 z_aglt czemu:adv
99   -z_aglt czyżby:qub
100   -z_aglt choćby:comp
101   -z_aglt chociażby:comp
  383 +z_aglt_by czyżby:qub
  384 +z_aglt_by choćby:comp
  385 +z_aglt_by chociażby:comp
102 386 z_aglt dlaczego:adv
103 387 z_aglt dopóki:comp
104 388 z_aglt dopóty:conj
105   -z_aglt gdyby:comp
  389 +z_aglt_by gdyby:comp
106 390 z_aglt gdzie:qub
107 391 z_aglt gdzie:adv
108   -z_aglt jakby:comp
109   -z_aglt jakoby:comp
  392 +z_aglt_by jakby:comp
  393 +z_aglt_by jakoby:comp
110 394 z_aglt kiedy:adv
111 395 z_aglt kiedy:comp
112 396 z_aglt tylko:qub
113 397 z_aglt żeby:comp
  398 +z_aglt to:conj
  399 +z_aglt chyba:qub
  400 +z_aglt że:qub
  401 +z_aglt czy:conj
  402 +z_aglt_by oby:qub
  403 +z_aglt_by bodajby:qub
  404 +z_aglt co:comp
114 405 dywiz -:interp
  406 +pauza —:interp
  407 +polpauza –:interp
115 408 kropka .:interp
  409 +n on:ppron3:sg:gen.acc:m1.m2.m3:ter:nakc:praep
  410 +adj_anty_zloz ten:adj:%
  411 +adj_anty_zloz tenże:adj:%
  412 +adj_anty_zloz ck:adj:%
  413 +adj_anty_zloz c.k.:adj:%
  414 +adj_anty_zloz ki:adj:%
  415 +adj_anty_zloz si:adj:%
  416 +adj_anty_zloz ow:adj:%
  417 +adj_anty_zloz ów:adj:%
  418 +adj_anty_zloz ówże:adj:%
  419 +adj_anty_zloz mój:adj:%
  420 +adj_anty_zloz a-z:adj:%
  421 +adj_anty_zloz a-ż:adj:%
  422 +adj_anty_zloz kiż:adj:%
  423 +adj_anty_zloz be:adj:%
  424 +adj_anty_zloz caca:adj:%
  425 +adj_anty_zloz czyj:adj:%
  426 +adj_anty_zloz oboj:adj:%
  427 +adj_anty_zloz on:adj:%
  428 +adj_anty_zloz tyli:adj:%
  429 +prep_n do:prep:%
  430 +prep_n dla:prep:%
  431 +prep_n koło:prep:%
  432 +prep_n na:prep:%
  433 +prep_n o:prep:%
  434 +prep_n po:prep:%
  435 +prep_n poza:prep:%
  436 +prep_n spoza:prep:%
  437 +prep_n za:prep:%
  438 +prep_n zza:prep:%
  439 +morphconj +o+:morphconj
  440 +# adj_anty_zloz pop:adj:%
  441 +sufs +znawca:subst:%
  442 +sufs +dawca:subst:%
  443 +sufs +biorca:subst:%
  444 +sufs +żerca:subst:%
  445 +sufs +maniak:subst:%
  446 +latek latek:subst:%
... ...