Commit caadb80095e7f7cc0889e08e52aa762a23a0533d
1 parent
50793551
- dodawanie wszystkich "atomowych" i samodzielnych segmentów dla generatora
- dodanie "magii" ze zmianą typów segmentów z sierżantem git-svn-id: svn://svn.nlp.ipipan.waw.pl/morfeusz/trunk@273 ff4e3ee1-f430-4e82-ade0-24591c43f1fd
Showing
17 changed files
with
1035 additions
and
91 deletions
fsabuilder/morfeuszbuilder/fsa/common.py
... | ... | @@ -80,7 +80,8 @@ class Interpretation4Analyzer(object): |
80 | 80 | tuple(self.encodedForm.casePattern), |
81 | 81 | tuple(self.orthCasePattern), |
82 | 82 | self.tagnum, |
83 | - self.namenum) | |
83 | + self.namenum, | |
84 | + self.typenum) | |
84 | 85 | |
85 | 86 | def __eq__(self, other): |
86 | 87 | if isinstance(other, Interpretation4Analyzer): |
... | ... | @@ -109,7 +110,8 @@ class Interpretation4Generator(object): |
109 | 110 | self.encodedForm.cutLength, |
110 | 111 | tuple(self.encodedForm.suffixToAdd), |
111 | 112 | # tuple(self.encodedForm.casePattern), |
112 | - self.namenum) | |
113 | + self.namenum, | |
114 | + self.typenum) | |
113 | 115 | |
114 | 116 | def __eq__(self, other): |
115 | 117 | if isinstance(other, Interpretation4Generator): |
... | ... |
fsabuilder/morfeuszbuilder/fsa/convertinput.py
... | ... | @@ -14,9 +14,10 @@ def _mergeEntries(inputLines, lowercase): |
14 | 14 | for key, interp in inputLines: |
15 | 15 | key = key.lower() if lowercase else key |
16 | 16 | # print 'key=', key, 'interp=', interp |
17 | - if not key: | |
18 | - print 'key=', key, 'interp=', interp | |
19 | - assert key | |
17 | +# if not key: | |
18 | +# print 'key=', key, 'interp=', interp | |
19 | +# assert key | |
20 | + assert key | |
20 | 21 | if prevKey and prevKey == key: |
21 | 22 | prevInterps.append(interp) |
22 | 23 | else: |
... | ... | @@ -64,6 +65,15 @@ class PolimorfConverter4Analyzer(object): |
64 | 65 | typenum = self.segmentRulesManager.lexeme2SegmentTypeNum(base, tagnum) |
65 | 66 | qualifiers = qualifier.split('|') if qualifier else frozenset([u'']) |
66 | 67 | qualsnum = self.qualifiersMap[frozenset(qualifiers)] |
68 | + | |
69 | + assert not ( | |
70 | + self.segmentRulesManager.shiftOrthMagic.shouldReplaceLemmaWithOrth(typenum) | |
71 | + and self.segmentRulesManager.shiftOrthMagic.getNewSegnum4ShiftOrth(typenum) != None) | |
72 | + | |
73 | + if self.segmentRulesManager.shiftOrthMagic.shouldReplaceLemmaWithOrth(typenum): | |
74 | + # print 'replace %s %s %s %d with %s %s %s %d' % (orth, base, tag, typenum, orth, orth, tag, typenum) | |
75 | + base = orth | |
76 | + | |
67 | 77 | yield '\t'.join(( |
68 | 78 | orth.encode(self.inputEncoding), |
69 | 79 | base.encode(self.inputEncoding), |
... | ... | @@ -71,7 +81,18 @@ class PolimorfConverter4Analyzer(object): |
71 | 81 | str(namenum), |
72 | 82 | str(typenum), |
73 | 83 | str(qualsnum))) |
74 | - #~ qualifier.encode(self.inputEncoding))) | |
84 | + | |
85 | + if self.segmentRulesManager.shiftOrthMagic.getNewSegnum4ShiftOrth(typenum) != None: | |
86 | + # print 'add to existing %s %s %s %d also this: %s %s %s %d' % (orth, base, tag, typenum, orth, orth, tag, self.segmentRulesManager.shiftOrthMagic.getNewSegnum4ShiftOrth(typenum)) | |
87 | + base = orth | |
88 | + typenum = self.segmentRulesManager.shiftOrthMagic.getNewSegnum4ShiftOrth(typenum) | |
89 | + yield '\t'.join(( | |
90 | + orth.encode(self.inputEncoding), | |
91 | + base.encode(self.inputEncoding), | |
92 | + str(tagnum), | |
93 | + str(namenum), | |
94 | + str(typenum), | |
95 | + str(qualsnum))) | |
75 | 96 | |
76 | 97 | # input lines are encoded and partially parsed |
77 | 98 | def _sortLines(self, inputLines): |
... | ... | @@ -89,7 +110,7 @@ class PolimorfConverter4Analyzer(object): |
89 | 110 | #~ qualifiers = qualifierStr.split('|') if qualifierStr else [] |
90 | 111 | qualsnum = int(qualsnum) |
91 | 112 | yield (orth, Interpretation4Analyzer(orth, base, tagnum, namenum, typenum, qualsnum)) |
92 | - | |
113 | + | |
93 | 114 | def convert(self, inputLines): |
94 | 115 | return _mergeEntries(self._reallyParseLines(self._sortLines(self._partiallyParseLines(inputLines))), lowercase=True) |
95 | 116 | |
... | ... | @@ -120,15 +141,11 @@ class PolimorfConverter4Generator(object): |
120 | 141 | qualifiers = qualifier.split('|') if qualifier else frozenset([u'']) |
121 | 142 | qualsnum = self.qualifiersMap[frozenset(qualifiers)] |
122 | 143 | typenum = self.segmentRulesManager.lexeme2SegmentTypeNum(base, tagnum) |
123 | - | |
124 | - #~ print '\t'.join(( | |
125 | - #~ orth.encode(self.inputEncoding), | |
126 | - #~ base.encode(self.inputEncoding), | |
127 | - #~ str(tagnum), | |
128 | - #~ str(namenum), | |
129 | - #~ str(typenum), | |
130 | - #~ homonymId.encode(self.inputEncoding), | |
131 | - #~ qualifier.encode(self.inputEncoding))) | |
144 | + | |
145 | + if self.segmentRulesManager.shiftOrthMagic.shouldReplaceLemmaWithOrth(typenum): | |
146 | + # print 'replace %s %s %s %d with %s %s %s %d' % (orth, base, tag, typenum, orth, orth, tag, typenum) | |
147 | + base = orth | |
148 | + | |
132 | 149 | yield '\t'.join(( |
133 | 150 | orth.encode(self.inputEncoding), |
134 | 151 | base.encode(self.inputEncoding), |
... | ... | @@ -137,6 +154,18 @@ class PolimorfConverter4Generator(object): |
137 | 154 | str(typenum), |
138 | 155 | homonymId.encode(self.inputEncoding), |
139 | 156 | str(qualsnum))) |
157 | + | |
158 | + if self.segmentRulesManager.shiftOrthMagic.getNewSegnum4ShiftOrth(typenum) != None: | |
159 | + base = orth | |
160 | + typenum = self.segmentRulesManager.shiftOrthMagic.getNewSegnum4ShiftOrth(typenum) | |
161 | + yield '\t'.join(( | |
162 | + orth.encode(self.inputEncoding), | |
163 | + base.encode(self.inputEncoding), | |
164 | + str(tagnum), | |
165 | + str(namenum), | |
166 | + str(typenum), | |
167 | + homonymId.encode(self.inputEncoding), | |
168 | + str(qualsnum))) | |
140 | 169 | else: |
141 | 170 | logging.warn('Ignoring line: "%s" - contains empty lemma', line.strip()) |
142 | 171 | |
... | ... |
fsabuilder/morfeuszbuilder/fsa/encode.py
... | ... | @@ -47,21 +47,6 @@ class Encoder(object): |
47 | 47 | u'Too many segment types. The limit is %d' % limits.MAX_SEGMENT_TYPES) |
48 | 48 | return bytearray([typenum]) |
49 | 49 | |
50 | - #~ def _encodeQualifiers(self, qualifiers): | |
51 | - #~ res = bytearray() | |
52 | - #~ key = frozenset(qualifiers) | |
53 | - #~ if key in self.qualifiersMap: | |
54 | - #~ exceptions.validate(key in self.qualifiersMap, u'Unknown qualifiers: %s' % qualifiers) | |
55 | - #~ n = self.qualifiersMap[key] | |
56 | - #~ else: | |
57 | - #~ n = len(self.qualifiersMap) | |
58 | - #~ self.qualifiersMap[key] = n | |
59 | - #~ exceptions.validate( | |
60 | - #~ n <= limits.MAX_QUALIFIERS_COMBINATIONS, | |
61 | - #~ u'Too many qualifiers combinations. The limit is %d' % limits.MAX_QUALIFIERS_COMBINATIONS) | |
62 | - #~ res.extend(htons(n)) | |
63 | - #~ return res | |
64 | - | |
65 | 50 | def _hasUpperPrefix(self, casePattern): |
66 | 51 | for i in range(len(casePattern) + 1): |
67 | 52 | if all(casePattern[:i]) and not any(casePattern[i:]): |
... | ... | @@ -99,7 +84,6 @@ class Encoder(object): |
99 | 84 | |
100 | 85 | segnum2Interps = self._groupInterpsByType(interpsList) |
101 | 86 | |
102 | - | |
103 | 87 | res = bytearray() |
104 | 88 | |
105 | 89 | for typenum, interpsList in segnum2Interps.iteritems(): |
... | ... |
fsabuilder/morfeuszbuilder/segrules/rules.py
... | ... | @@ -13,6 +13,7 @@ class SegmentRule(object): |
13 | 13 | |
14 | 14 | self.weak = False |
15 | 15 | self.linenum = linenum |
16 | + self.autogenerated = False | |
16 | 17 | |
17 | 18 | def setWeak(self, weak): |
18 | 19 | self.weak = weak |
... | ... | @@ -36,16 +37,27 @@ class SegmentRule(object): |
36 | 37 | def isShiftOrthRule(self): |
37 | 38 | raise NotImplementedError() |
38 | 39 | |
40 | + def getAtomicRules(self): | |
41 | + raise NotImplementedError() | |
42 | + | |
43 | + def getAdditionalAtomicRules4Generator(self): | |
44 | + raise NotImplementedError() | |
45 | + | |
46 | + def __repr__(self): | |
47 | + return str(self) | |
48 | + | |
39 | 49 | class TagRule(SegmentRule): |
40 | 50 | |
41 | - def __init__(self, segnum, shiftOrth, segtype, linenum): | |
51 | + def __init__(self, segnum, shiftOrth, segtype, linenum, weak=False): | |
42 | 52 | self.segnum = segnum |
43 | 53 | self.segtype = segtype |
44 | 54 | self.shiftOrth = shiftOrth |
45 | 55 | self.linenum = linenum |
46 | - | |
56 | + self.weak = weak | |
57 | + self.autogenerated = False | |
58 | + | |
47 | 59 | def addToNFA(self, fsa): |
48 | - endState = RulesNFAState(self, final=True, weak=self.weak) | |
60 | + endState = RulesNFAState(self, final=True, weak=self.weak, autogenerated=self.autogenerated) | |
49 | 61 | self._doAddToNFA(fsa.initialState, endState) |
50 | 62 | |
51 | 63 | def _doAddToNFA(self, startState, endState): |
... | ... | @@ -68,6 +80,14 @@ class TagRule(SegmentRule): |
68 | 80 | def isShiftOrthRule(self): |
69 | 81 | return self.shiftOrth |
70 | 82 | |
83 | + def getAtomicRules(self): | |
84 | + yield self | |
85 | + | |
86 | + def getAdditionalAtomicRules4Generator(self): | |
87 | + res = [ copy.deepcopy(self) ] | |
88 | + res[0].autogenerated = True | |
89 | + return res | |
90 | + | |
71 | 91 | class UnaryRule(SegmentRule): |
72 | 92 | |
73 | 93 | def __init__(self, child, linenum): |
... | ... | @@ -78,6 +98,13 @@ class UnaryRule(SegmentRule): |
78 | 98 | def isShiftOrthRule(self): |
79 | 99 | return self.child.isShiftOrthRule() |
80 | 100 | |
101 | + def getAtomicRules(self): | |
102 | + for leaf in self.child.getAtomicRules(): | |
103 | + yield leaf | |
104 | + | |
105 | + def getAdditionalAtomicRules4Generator(self): | |
106 | + return self.child.getAdditionalAtomicRules4Generator() | |
107 | + | |
81 | 108 | class ComplexRule(SegmentRule): |
82 | 109 | |
83 | 110 | def __init__(self, children, linenum): |
... | ... | @@ -86,13 +113,19 @@ class ComplexRule(SegmentRule): |
86 | 113 | assert not any(map(lambda c: c.isSinkRule(), children)) |
87 | 114 | |
88 | 115 | def addToNFA(self, fsa): |
89 | - endState = RulesNFAState(self, final=True, weak=self.weak) | |
116 | + endState = RulesNFAState(self, final=True, weak=self.weak, autogenerated=self.autogenerated) | |
90 | 117 | self._doAddToNFA(fsa.initialState, endState) |
91 | 118 | |
119 | + def getAtomicRules(self): | |
120 | + for child in self.children: | |
121 | + for leaf in child.getAtomicRules(): | |
122 | + yield leaf | |
123 | + | |
92 | 124 | class ConcatRule(ComplexRule): |
93 | 125 | |
94 | 126 | def __init__(self, children, linenum): |
95 | 127 | super(ConcatRule, self).__init__(children, linenum) |
128 | + assert type(children) == list | |
96 | 129 | |
97 | 130 | def _doAddToNFA(self, startState, endState): |
98 | 131 | currStartState = startState |
... | ... | @@ -129,7 +162,27 @@ class ConcatRule(ComplexRule): |
129 | 162 | res = ConcatRule(newChildren, self.linenum) |
130 | 163 | res.setWeak(self.weak) |
131 | 164 | return res |
132 | - | |
165 | + | |
166 | + def getAdditionalAtomicRules4Generator(self): | |
167 | + res = [] | |
168 | + currShiftOrthRule = None | |
169 | + for rule in list(self.children): | |
170 | + if rule.isShiftOrthRule(): | |
171 | + if currShiftOrthRule: | |
172 | + currShiftOrthRule = ConcatRule([currShiftOrthRule, rule], rule.linenum) | |
173 | + else: | |
174 | + currShiftOrthRule = rule | |
175 | + else: | |
176 | + for atomicRule in rule.getAdditionalAtomicRules4Generator(): | |
177 | + if currShiftOrthRule: | |
178 | + res.append(ConcatRule([currShiftOrthRule, atomicRule], atomicRule.linenum)) | |
179 | + else: | |
180 | + res.append(atomicRule) | |
181 | + currShiftOrthRule = None | |
182 | + for rule in res: | |
183 | + rule.autogenerated = True | |
184 | + return res | |
185 | + | |
133 | 186 | class OrRule(ComplexRule): |
134 | 187 | |
135 | 188 | def __init__(self, children, linenum): |
... | ... | @@ -161,6 +214,12 @@ class OrRule(ComplexRule): |
161 | 214 | res = OrRule(newChildren, self.linenum) |
162 | 215 | res.setWeak(self.weak) |
163 | 216 | return res |
217 | + | |
218 | + def getAdditionalAtomicRules4Generator(self): | |
219 | + res = [] | |
220 | + for rule in self.children: | |
221 | + res.extend(rule.getAdditionalAtomicRules4Generator()) | |
222 | + return res | |
164 | 223 | |
165 | 224 | class ZeroOrMoreRule(UnaryRule): |
166 | 225 | |
... | ... | @@ -245,3 +304,6 @@ class SinkRule(SegmentRule): |
245 | 304 | |
246 | 305 | def __str__(self): |
247 | 306 | return '<<REMOVED>>' |
307 | + | |
308 | + def getAdditionalAtomicRules4Generator(self): | |
309 | + return [] | |
248 | 310 | \ No newline at end of file |
... | ... |
fsabuilder/morfeuszbuilder/segrules/rulesManager.py
... | ... | @@ -7,6 +7,7 @@ import logging |
7 | 7 | from morfeuszbuilder.utils.serializationUtils import htons, htonl |
8 | 8 | from morfeuszbuilder.utils import serializationUtils |
9 | 9 | from morfeuszbuilder.utils import exceptions |
10 | +import shiftOrthMagic | |
10 | 11 | |
11 | 12 | class RulesManager(object): |
12 | 13 | |
... | ... | @@ -15,6 +16,7 @@ class RulesManager(object): |
15 | 16 | self.segtypes = segtypes |
16 | 17 | self.separatorsList = separatorsList |
17 | 18 | self.defaultOptions = None |
19 | + self.shiftOrthMagic = shiftOrthMagic.ShiftOrthMagic() | |
18 | 20 | |
19 | 21 | def _options2Key(self, optionsMap): |
20 | 22 | return frozenset(optionsMap.items()) |
... | ... |
fsabuilder/morfeuszbuilder/segrules/rulesNFA.py
... | ... | @@ -10,13 +10,14 @@ class RulesNFAState(object): |
10 | 10 | |
11 | 11 | statesCounter = 0 |
12 | 12 | |
13 | - def __init__(self, rule, initial=False, final=False, weak=False): | |
13 | + def __init__(self, rule, initial=False, final=False, weak=False, autogenerated=False): | |
14 | 14 | self.rule = rule |
15 | 15 | self.transitionsMap = {} |
16 | 16 | # self.transitionsDataMap = {} |
17 | 17 | self.initial = initial |
18 | 18 | self.final = final |
19 | 19 | self.weak = weak |
20 | + self.autogenerated = autogenerated | |
20 | 21 | self.idx = RulesNFAState.statesCounter |
21 | 22 | RulesNFAState.statesCounter += 1 |
22 | 23 | |
... | ... | @@ -69,12 +70,19 @@ class RulesNFA(object): |
69 | 70 | return res |
70 | 71 | |
71 | 72 | def _doConvertState(self, dfaState, nfaStates, nfaSubset2DFAState): |
72 | - if not all(map(lambda state: state.weak, filter(lambda state: state.final, nfaStates))) \ | |
73 | - and any(map(lambda state: state.weak, filter(lambda state: state.final, nfaStates))): | |
73 | + weakHits = map( | |
74 | + lambda state: state.weak, | |
75 | + filter( | |
76 | + lambda state: state.final and not state.autogenerated, | |
77 | + nfaStates)) | |
78 | + if not all(weakHits) \ | |
79 | + and any(weakHits): | |
74 | 80 | weakState = list(filter(lambda state: state.final and state.weak, nfaStates))[0] |
75 | 81 | nonWeakState = list(filter(lambda state: state.final and not state.weak, nfaStates))[0] |
76 | 82 | raise InconsistentStateWeaknessException(weakState, nonWeakState) |
77 | - weak = any(map(lambda state: state.weak and state.final, nfaStates)) | |
83 | + weak = any(map( | |
84 | + lambda state: state.weak and state.final, | |
85 | + filter(lambda state: not state.autogenerated, nfaStates))) | |
78 | 86 | final = any(map(lambda state: state.final, nfaStates)) |
79 | 87 | # assert not weak or not final |
80 | 88 | if final: |
... | ... |
fsabuilder/morfeuszbuilder/segrules/rulesParser.py
... | ... | @@ -28,15 +28,17 @@ class RulesParser(object): |
28 | 28 | except Exception as ex: |
29 | 29 | raise exceptions.ConfigFileException(segtypesConfigFile.filename, lineNum, u'Error in [options] section: %s' % str(ex)) |
30 | 30 | return res |
31 | - | |
31 | + | |
32 | + def _key2DefAsKey(self, key2Def): | |
33 | + return frozenset(key2Def.items()) | |
34 | + | |
32 | 35 | def parse(self, filename): |
33 | 36 | |
34 | 37 | segtypesConfigFile = configFile.ConfigFile(filename, |
35 | 38 | [ |
36 | 39 | 'options', |
37 | 40 | 'combinations', |
38 | - 'generator combinations', | |
39 | - 'tags', | |
41 | + 'tags', | |
40 | 42 | 'lexemes', |
41 | 43 | 'segment types', |
42 | 44 | 'separator chars']) |
... | ... | @@ -53,14 +55,11 @@ class RulesParser(object): |
53 | 55 | for define in defs: |
54 | 56 | def2Key[define] = key |
55 | 57 | |
56 | - firstNFA = None | |
58 | + resultsMap = {} | |
57 | 59 | for idx, defs in enumerate(itertools.product(*key2Defs.values())): |
58 | 60 | key2Def = dict([(def2Key[define], define) for define in defs]) |
59 | - print key2Def | |
60 | - nfa = rulesNFA.RulesNFA() | |
61 | - if not firstNFA: | |
62 | - firstNFA = nfa | |
63 | -# section = 'combinations' if self.rulesType == RulesParser.PARSE4ANALYZER else 'generator combinations' | |
61 | + currRes = [] | |
62 | + resultsMap[self._key2DefAsKey(key2Def)] = currRes | |
64 | 63 | combinationEnumeratedLines = segtypesConfigFile.enumerateLinesInSection('combinations', ignoreComments=False) |
65 | 64 | combinationEnumeratedLines = list(preprocessor.preprocess(combinationEnumeratedLines, defs, filename)) |
66 | 65 | for rule in self._doParse(combinationEnumeratedLines, segtypesHelper, filename): |
... | ... | @@ -70,10 +69,28 @@ class RulesParser(object): |
70 | 69 | rule.linenum, |
71 | 70 | 'This rule allows empty segments sequence to be accepted') |
72 | 71 | if self.rulesType == RulesParser.PARSE4GENERATOR: |
72 | + additionalRules = rule.getAdditionalAtomicRules4Generator() | |
73 | + for rule in additionalRules: | |
74 | + rule.autogenerated = True | |
75 | + currRes.extend(additionalRules) | |
73 | 76 | rule = rule.transformToGeneratorVersion() |
74 | 77 | if not rule.isSinkRule(): |
75 | - rule.addToNFA(nfa) | |
78 | + currRes.append(rule) | |
76 | 79 | # nfa.debug() |
80 | + | |
81 | + # if self.rulesType == RulesParser.PARSE4GENERATOR: | |
82 | + # self.doGeneratorMagic(resultsMap) | |
83 | + | |
84 | + self.doShiftOrthMagic(resultsMap, res) | |
85 | + | |
86 | + for idx, defs in enumerate(itertools.product(*key2Defs.values())): | |
87 | + key2Def = dict([(def2Key[define], define) for define in defs]) | |
88 | + | |
89 | + nfa = rulesNFA.RulesNFA() | |
90 | + | |
91 | + for rule in resultsMap[self._key2DefAsKey(key2Def)]: | |
92 | + rule.addToNFA(nfa) | |
93 | + | |
77 | 94 | try: |
78 | 95 | dfa = nfa.convertToDFA() |
79 | 96 | res.addDFA(key2Def, dfa) |
... | ... | @@ -82,11 +99,9 @@ class RulesParser(object): |
82 | 99 | filename, |
83 | 100 | ex.weakState.rule.linenum, |
84 | 101 | 'conflicts with rule at line %d. Segmentation for some chunks can be both weak and non-weak which is illegal.' % ex.nonWeakState.rule.linenum) |
85 | -# print '********* DFA **************' | |
86 | -# dfa.debug() | |
87 | -# print dfa.tryToRecognize(bytearray([14])) | |
88 | 102 | if idx == 0: |
89 | 103 | res.setDefaultOptions(key2Def) |
104 | + | |
90 | 105 | return res |
91 | 106 | |
92 | 107 | def _doParse(self, combinationEnumeratedLines, segtypesHelper, filename): |
... | ... | @@ -162,9 +177,31 @@ class RulesParser(object): |
162 | 177 | quantRule3.setParseAction(lambda string, loc, toks: self._createQuantRule3(toks[0], int(toks[1], 10), lineNum, line, segtypesHelper)) |
163 | 178 | optionalRule.setParseAction(lambda string, loc, toks: rules.OptionalRule(toks[0], lineNum)) |
164 | 179 | oneOrMoreRule.setParseAction(lambda string, loc, toks: rules.ConcatRule([toks[0], rules.ZeroOrMoreRule(toks[0], lineNum)], lineNum)) |
165 | - oneOfRule.setParseAction(lambda string, loc, toks: rules.OrRule(toks, lineNum)) | |
166 | - concatRule.setParseAction(lambda string, loc, toks: toks[0] if len(toks) == 1 else rules.ConcatRule(toks, lineNum)) | |
180 | + oneOfRule.setParseAction(lambda string, loc, toks: rules.OrRule(list(toks), lineNum)) | |
181 | + concatRule.setParseAction(lambda string, loc, toks: toks[0] if len(toks) == 1 else rules.ConcatRule(list(toks), lineNum)) | |
167 | 182 | rule.setParseAction(lambda string, loc, toks: toks[0].setWeak(len(toks) == 2)) |
168 | 183 | parsedRule = pyparseString.pyparseString(rule, lineNum, line, filename)[0] |
169 | 184 | # print parsedRule, '-->', parsedRule.transformToGeneratorVersion() |
170 | 185 | return parsedRule |
186 | + | |
187 | + # def doGeneratorMagic(self, resultsMap): | |
188 | + # print resultsMap | |
189 | + # for _, rules in resultsMap.iteritems(): | |
190 | + # for rule in list(rules): | |
191 | + # rules.extend(rule.getAdditionalAtomicRules4Generator()) | |
192 | + # print resultsMap | |
193 | + | |
194 | + def doShiftOrthMagic(self, resultsMap, rulesManager): | |
195 | + | |
196 | + shiftOrthSegtypes = set() | |
197 | + nonShiftOrthSegtypes = set() | |
198 | + | |
199 | + for _, rules in resultsMap.iteritems(): | |
200 | + for rule in rules: | |
201 | + for atomicRule in rule.getAtomicRules(): | |
202 | + if atomicRule.shiftOrth: | |
203 | + shiftOrthSegtypes.add(atomicRule.segtype) | |
204 | + else: | |
205 | + nonShiftOrthSegtypes.add(atomicRule.segtype) | |
206 | + | |
207 | + rulesManager.shiftOrthMagic.doShiftOrthMagic(resultsMap, rulesManager.segtypes, shiftOrthSegtypes, nonShiftOrthSegtypes) | |
... | ... |
fsabuilder/morfeuszbuilder/segrules/shiftOrthMagic.py
0 → 100644
1 | + | |
2 | +import sys | |
3 | +import logging | |
4 | + | |
5 | +class ShiftOrthMagic(object): | |
6 | + | |
7 | + def __init__(self): | |
8 | + # segnum -> newSegnum | |
9 | + # used to add (orth, orth, newSegnum) to input dictionary for each (orth, lemma, segnum) entry | |
10 | + self._bothShiftAndNonShiftSegnums = {} | |
11 | + | |
12 | + # list of segnums | |
13 | + # used to replace each (orth, lemma, segnum) with (orth, orth, segnum) in input dictionary | |
14 | + self._onlyShiftSegnums = set() | |
15 | + | |
16 | + def shouldReplaceLemmaWithOrth(self, typenum): | |
17 | + return typenum in self._onlyShiftSegnums | |
18 | + | |
19 | + def getNewSegnum4ShiftOrth(self, typenum): | |
20 | + return self._bothShiftAndNonShiftSegnums.get(typenum, None) | |
21 | + | |
22 | + def doShiftOrthMagic(self, resultsMap, segtypesHelper, shiftOrthSegtypes, nonShiftOrthSegtypes): | |
23 | + | |
24 | + nextNewSegnum = segtypesHelper.getMaxSegnum() + 1 | |
25 | + | |
26 | + additionalIdsMap = {} | |
27 | + | |
28 | + for segtype in (shiftOrthSegtypes & nonShiftOrthSegtypes): | |
29 | + oldSegnum = segtypesHelper.getSegnum4Segtype(segtype) | |
30 | + if not oldSegnum in self._bothShiftAndNonShiftSegnums: | |
31 | + self._bothShiftAndNonShiftSegnums[oldSegnum] = nextNewSegnum | |
32 | + logging.info('') | |
33 | + additionalIdsMap[nextNewSegnum] = (segtype + '>') | |
34 | + nextNewSegnum += 1 | |
35 | + | |
36 | + logging.info('segment number -> additional segment type (with ">")') | |
37 | + logging.info(str(additionalIdsMap)) | |
38 | + | |
39 | + for segtype in shiftOrthSegtypes - nonShiftOrthSegtypes: | |
40 | + self._onlyShiftSegnums.add(segtypesHelper.getSegnum4Segtype(segtype)) | |
41 | + | |
42 | + for _, rules in resultsMap.iteritems(): | |
43 | + for rule in rules: | |
44 | + for atomicRule in rule.getAtomicRules(): | |
45 | + if atomicRule.segnum in self._bothShiftAndNonShiftSegnums and atomicRule.shiftOrth: | |
46 | + # print 'replace segnum %d -> %d' % (atomicRule.segnum, self._bothShiftAndNonShiftSegnums[atomicRule.segnum]) | |
47 | + atomicRule.segnum = self._bothShiftAndNonShiftSegnums[atomicRule.segnum] | |
... | ... |
fsabuilder/morfeuszbuilder/tagset/segtypes.py
morfeusz/MorfeuszImpl.cpp
... | ... | @@ -181,7 +181,6 @@ namespace morfeusz { |
181 | 181 | } |
182 | 182 | |
183 | 183 | MorfeuszImpl::~MorfeuszImpl() { |
184 | - cerr << "DELETE MorfeuszImpl" << endl; | |
185 | 184 | } |
186 | 185 | |
187 | 186 | const char* getWordEndPtr(const TextReader& reader, const Environment& env) { |
... | ... | @@ -339,6 +338,9 @@ namespace morfeusz { |
339 | 338 | const string& homonymId, |
340 | 339 | const InterpsGroup& ig, |
341 | 340 | vector<SegrulesState>& newSegrulesStates) const { |
341 | + if (this->options.debug) { | |
342 | + std::cerr << "FOUND interps group, segmentType=" << (int) ig.type << std::endl; | |
343 | + } | |
342 | 344 | bool caseMatches = env.getCasePatternHelper().checkInterpsGroupOrthCasePatterns(env, reader.getWordStartPtr(), reader.getCurrPtr(), ig); |
343 | 345 | if (caseMatches || options.caseHandling == CONDITIONALLY_CASE_SENSITIVE) { |
344 | 346 | |
... | ... |
nbproject/configurations.xml
... | ... | @@ -339,8 +339,6 @@ |
339 | 339 | ex="false" |
340 | 340 | tool="1" |
341 | 341 | flavor2="4"> |
342 | - <ccTool flags="2"> | |
343 | - </ccTool> | |
344 | 342 | </item> |
345 | 343 | <item path="build/morfeusz/wrappers/morfeuszPERL_wrap.cxx" |
346 | 344 | ex="false" |
... | ... | @@ -878,45 +876,29 @@ |
878 | 876 | </ccTool> |
879 | 877 | </item> |
880 | 878 | <item path="morfeusz/c_api/ResultsManager.cpp" ex="false" tool="1" flavor2="4"> |
881 | - <ccTool flags="2"> | |
882 | - </ccTool> | |
883 | 879 | </item> |
884 | 880 | <item path="morfeusz/case/CaseConverter.cpp" ex="false" tool="1" flavor2="4"> |
885 | - <ccTool flags="2"> | |
886 | - </ccTool> | |
887 | 881 | </item> |
888 | 882 | <item path="morfeusz/case/CasePatternHelper.cpp" |
889 | 883 | ex="false" |
890 | 884 | tool="1" |
891 | 885 | flavor2="4"> |
892 | - <ccTool flags="2"> | |
893 | - </ccTool> | |
894 | 886 | </item> |
895 | 887 | <item path="morfeusz/case/caseconv.cpp" ex="false" tool="1" flavor2="4"> |
896 | - <ccTool flags="2"> | |
897 | - </ccTool> | |
898 | 888 | </item> |
899 | 889 | <item path="morfeusz/charset/CharsetConverter.cpp" |
900 | 890 | ex="false" |
901 | 891 | tool="1" |
902 | 892 | flavor2="4"> |
903 | - <ccTool flags="2"> | |
904 | - </ccTool> | |
905 | 893 | </item> |
906 | 894 | <item path="morfeusz/charset/TextReader.cpp" ex="false" tool="1" flavor2="4"> |
907 | - <ccTool flags="2"> | |
908 | - </ccTool> | |
909 | 895 | </item> |
910 | 896 | <item path="morfeusz/charset/conversion_tables.cpp" |
911 | 897 | ex="false" |
912 | 898 | tool="1" |
913 | 899 | flavor2="4"> |
914 | - <ccTool flags="2"> | |
915 | - </ccTool> | |
916 | 900 | </item> |
917 | 901 | <item path="morfeusz/cli/cli.cpp" ex="false" tool="1" flavor2="4"> |
918 | - <ccTool flags="2"> | |
919 | - </ccTool> | |
920 | 902 | </item> |
921 | 903 | <item path="morfeusz/const.cpp" ex="false" tool="1" flavor2="4"> |
922 | 904 | <ccTool flags="2"> |
... | ... | @@ -938,40 +920,28 @@ |
938 | 920 | ex="false" |
939 | 921 | tool="1" |
940 | 922 | flavor2="4"> |
941 | - <ccTool flags="2"> | |
942 | - </ccTool> | |
943 | 923 | </item> |
944 | 924 | <item path="morfeusz/deserialization/MorphDeserializer.cpp" |
945 | 925 | ex="false" |
946 | 926 | tool="1" |
947 | 927 | flavor2="4"> |
948 | - <ccTool flags="2"> | |
949 | - </ccTool> | |
950 | 928 | </item> |
951 | 929 | <item path="morfeusz/deserialization/morphInterps/InterpretedChunksDecoder.cpp" |
952 | 930 | ex="false" |
953 | 931 | tool="1" |
954 | 932 | flavor2="4"> |
955 | - <ccTool flags="2"> | |
956 | - </ccTool> | |
957 | 933 | </item> |
958 | 934 | <item path="morfeusz/deserialization/morphInterps/InterpretedChunksDecoder4Analyzer.cpp" |
959 | 935 | ex="false" |
960 | 936 | tool="1" |
961 | 937 | flavor2="4"> |
962 | - <ccTool flags="2"> | |
963 | - </ccTool> | |
964 | 938 | </item> |
965 | 939 | <item path="morfeusz/deserialization/morphInterps/InterpretedChunksDecoder4Generator.cpp" |
966 | 940 | ex="false" |
967 | 941 | tool="1" |
968 | 942 | flavor2="4"> |
969 | - <ccTool flags="2"> | |
970 | - </ccTool> | |
971 | 943 | </item> |
972 | 944 | <item path="morfeusz/fsa/const.cpp" ex="false" tool="1" flavor2="4"> |
973 | - <ccTool flags="2"> | |
974 | - </ccTool> | |
975 | 945 | </item> |
976 | 946 | <item path="morfeusz/morfeusz2_c.cpp" ex="false" tool="1" flavor2="4"> |
977 | 947 | <ccTool flags="2"> |
... | ... | @@ -1020,12 +990,8 @@ |
1020 | 990 | </ccTool> |
1021 | 991 | </item> |
1022 | 992 | <item path="morfeusz/segrules/SegrulesFSA.cpp" ex="false" tool="1" flavor2="4"> |
1023 | - <ccTool flags="2"> | |
1024 | - </ccTool> | |
1025 | 993 | </item> |
1026 | 994 | <item path="morfeusz/segrules/segrules.cpp" ex="false" tool="1" flavor2="4"> |
1027 | - <ccTool flags="2"> | |
1028 | - </ccTool> | |
1029 | 995 | </item> |
1030 | 996 | <item path="morfeusz/test_runner.cpp" ex="false" tool="1" flavor2="4"> |
1031 | 997 | <ccTool flags="0"> |
... | ... |
tests/generator/test_additional_atomic_segments/ARGS
0 → 100644
1 | +--aggl permissive | |
... | ... |
tests/generator/test_additional_atomic_segments/dictionary.tab
0 → 100644
tests/generator/test_additional_atomic_segments/input.txt
0 → 100644
tests/generator/test_additional_atomic_segments/output.txt
0 → 100644
tests/generator/test_additional_atomic_segments/segmentation.dat
0 → 100644
1 | +[options] | |
2 | +aggl=strict permissive isolated | |
3 | +praet=split composite | |
4 | + | |
5 | +[combinations] | |
6 | +#define wsz_interp (interp|kropka|przecinek|dywiz)* | |
7 | + | |
8 | +#define moze_interp(segmenty) wsz_interp segmenty wsz_interp | |
9 | + | |
10 | +# Segmenty występujące samodzielnie: | |
11 | +# | |
12 | +# domyślny typ segmentu samodzielnego: | |
13 | +moze_interp(samodz) | |
14 | + | |
15 | +# Pojedyncze znaki interpunkcyjne | |
16 | +moze_interp(interp|kropka|przecinek|dywiz) | |
17 | + | |
18 | +# Liczba zapisana jako ciąg cyfr: | |
19 | +moze_interp( dig>* dig ) | |
20 | + | |
21 | +# np. nisko-kwasowy | |
22 | +moze_interp( adja dywiz adj ) | |
23 | +moze_interp( adja> adj ) | |
24 | + | |
25 | +[segment types] | |
26 | +interp | |
27 | +kropka | |
28 | +przecinek | |
29 | +dywiz | |
30 | +dig | |
31 | +adja | |
32 | +adj | |
33 | +samodz | |
34 | + | |
35 | +[lexemes] | |
36 | +kropka .:interp | |
37 | +przecinek ,:interp | |
38 | +dywiz -:interp | |
39 | + | |
40 | +[tags] | |
41 | +dig dig | |
42 | +interp interp | |
43 | +adja adja | |
44 | +adj adj:% | |
45 | +samodz % | |
46 | + | |
47 | +[separator chars] | |
48 | +# , | |
49 | +44 | |
50 | + | |
51 | +# . | |
52 | +46 | |
53 | + | |
54 | +# ; | |
55 | +59 | |
... | ... |
tests/generator/test_additional_atomic_segments/tagset.dat
0 → 100644
1 | +#!MORFEUSZ-TAGSET 0.1 | |
2 | + | |
3 | +[TAGS] | |
4 | + | |
5 | +0 ign | |
6 | +1 sp | |
7 | +2 adja | |
8 | +3 adjc | |
9 | +4 adjp | |
10 | +5 adj:pl:acc:m1.p1:com | |
11 | +6 adj:pl:acc:m1.p1:pos | |
12 | +7 adj:pl:acc:m1.p1:sup | |
13 | +8 adj:pl:acc:m2.m3.f.n1.n2.p2.p3:com | |
14 | +9 adj:pl:acc:m2.m3.f.n1.n2.p2.p3:pos | |
15 | +10 adj:pl:acc:m2.m3.f.n1.n2.p2.p3:sup | |
16 | +11 adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:com | |
17 | +12 adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:pos | |
18 | +13 adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:sup | |
19 | +14 adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:com | |
20 | +15 adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:pos | |
21 | +16 adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:sup | |
22 | +17 adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:com | |
23 | +18 adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:pos | |
24 | +19 adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:sup | |
25 | +20 adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:com | |
26 | +21 adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:pos | |
27 | +22 adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:sup | |
28 | +23 adj:pl:nom:m1.p1:pos | |
29 | +24 adj:pl:nom:m2.m3.f.n1.n2.p2.p3:pos | |
30 | +25 adj:pl:nom.voc:m1.p1:com | |
31 | +26 adj:pl:nom.voc:m1.p1:pos | |
32 | +27 adj:pl:nom.voc:m1.p1:sup | |
33 | +28 adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:com | |
34 | +29 adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:pos | |
35 | +30 adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:sup | |
36 | +31 adj:sg:acc:f:com | |
37 | +32 adj:sg:acc:f:pos | |
38 | +33 adj:sg:acc:f:sup | |
39 | +34 adj:sg:acc:m1.m2:com | |
40 | +35 adj:sg:acc:m1.m2:pos | |
41 | +36 adj:sg:acc:m1.m2:sup | |
42 | +37 adj:sg:acc:m3:com | |
43 | +38 adj:sg:acc:m3:pos | |
44 | +39 adj:sg:acc:m3:sup | |
45 | +40 adj:sg:acc:n1.n2:com | |
46 | +41 adj:sg:acc:n1.n2:pos | |
47 | +42 adj:sg:acc:n1.n2:sup | |
48 | +43 adj:sg:dat:f:com | |
49 | +44 adj:sg:dat:f:pos | |
50 | +45 adj:sg:dat:f:sup | |
51 | +46 adj:sg:dat:m1.m2.m3.n1.n2:com | |
52 | +47 adj:sg:dat:m1.m2.m3.n1.n2:pos | |
53 | +48 adj:sg:dat:m1.m2.m3.n1.n2:sup | |
54 | +49 adj:sg:gen:f:com | |
55 | +50 adj:sg:gen:f:pos | |
56 | +51 adj:sg:gen:f:sup | |
57 | +52 adj:sg:gen:m1.m2.m3.n1.n2:com | |
58 | +53 adj:sg:gen:m1.m2.m3.n1.n2:pos | |
59 | +54 adj:sg:gen:m1.m2.m3.n1.n2:sup | |
60 | +55 adj:sg:inst:f:com | |
61 | +56 adj:sg:inst:f:pos | |
62 | +57 adj:sg:inst:f:sup | |
63 | +58 adj:sg:inst:m1.m2.m3.n1.n2:com | |
64 | +59 adj:sg:inst:m1.m2.m3.n1.n2:pos | |
65 | +60 adj:sg:inst:m1.m2.m3.n1.n2:sup | |
66 | +61 adj:sg:loc:f:com | |
67 | +62 adj:sg:loc:f:pos | |
68 | +63 adj:sg:loc:f:sup | |
69 | +64 adj:sg:loc:m1.m2.m3.n1.n2:com | |
70 | +65 adj:sg:loc:m1.m2.m3.n1.n2:pos | |
71 | +66 adj:sg:loc:m1.m2.m3.n1.n2:sup | |
72 | +67 adj:sg:nom:f:pos | |
73 | +68 adj:sg:nom:m1.m2.m3:pos | |
74 | +69 adj:sg:nom:n1.n2:pos | |
75 | +70 adj:sg:nom.voc:f:com | |
76 | +71 adj:sg:nom.voc:f:pos | |
77 | +72 adj:sg:nom.voc:f:sup | |
78 | +73 adj:sg:nom.voc:m1.m2.m3:com | |
79 | +74 adj:sg:nom.voc:m1.m2.m3:pos | |
80 | +75 adj:sg:nom.voc:m1.m2.m3:sup | |
81 | +76 adj:sg:nom.voc:n1.n2:com | |
82 | +77 adj:sg:nom.voc:n1.n2:pos | |
83 | +78 adj:sg:nom.voc:n1.n2:sup | |
84 | +79 adv | |
85 | +80 adv:com | |
86 | +81 adv:pos | |
87 | +82 adv:sup | |
88 | +83 aglt:pl:pri:imperf:nwok | |
89 | +84 aglt:pl:pri:imperf:wok | |
90 | +85 aglt:pl:sec:imperf:nwok | |
91 | +86 aglt:pl:sec:imperf:wok | |
92 | +87 aglt:sg:pri:imperf:nwok | |
93 | +88 aglt:sg:pri:imperf:wok | |
94 | +89 aglt:sg:sec:imperf:nwok | |
95 | +90 aglt:sg:sec:imperf:wok | |
96 | +91 bedzie:pl:pri:imperf | |
97 | +92 bedzie:pl:sec:imperf | |
98 | +93 bedzie:pl:ter:imperf | |
99 | +94 bedzie:sg:pri:imperf | |
100 | +95 bedzie:sg:sec:imperf | |
101 | +96 bedzie:sg:ter:imperf | |
102 | +97 brev:pun | |
103 | +98 burk | |
104 | +99 comp | |
105 | +100 cond:pl:m1.p1:pri:imperf | |
106 | +101 cond:pl:m1.p1:pri:imperf.perf | |
107 | +102 cond:pl:m1.p1:pri:perf | |
108 | +103 cond:pl:m1.p1:sec:imperf | |
109 | +104 cond:pl:m1.p1:sec:imperf.perf | |
110 | +105 cond:pl:m1.p1:sec:perf | |
111 | +106 cond:pl:m1.p1:ter:imperf | |
112 | +107 cond:pl:m1.p1:ter:imperf.perf | |
113 | +108 cond:pl:m1.p1:ter:perf | |
114 | +109 cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf | |
115 | +110 cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf | |
116 | +111 cond:pl:m2.m3.f.n1.n2.p2.p3:pri:perf | |
117 | +112 cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf | |
118 | +113 cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf | |
119 | +114 cond:pl:m2.m3.f.n1.n2.p2.p3:sec:perf | |
120 | +115 cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf | |
121 | +116 cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf | |
122 | +117 cond:pl:m2.m3.f.n1.n2.p2.p3:ter:perf | |
123 | +118 cond:sg:f:pri:imperf | |
124 | +119 cond:sg:f:pri:imperf.perf | |
125 | +120 cond:sg:f:pri:perf | |
126 | +121 cond:sg:f:sec:imperf | |
127 | +122 cond:sg:f:sec:imperf.perf | |
128 | +123 cond:sg:f:sec:perf | |
129 | +124 cond:sg:f:ter:imperf | |
130 | +125 cond:sg:f:ter:imperf.perf | |
131 | +126 cond:sg:f:ter:perf | |
132 | +127 cond:sg:m1.m2.m3:pri:imperf | |
133 | +128 cond:sg:m1.m2.m3:pri:imperf.perf | |
134 | +129 cond:sg:m1.m2.m3:pri:perf | |
135 | +130 cond:sg:m1.m2.m3:sec:imperf | |
136 | +131 cond:sg:m1.m2.m3:sec:imperf.perf | |
137 | +132 cond:sg:m1.m2.m3:sec:perf | |
138 | +133 cond:sg:m1.m2.m3:ter:imperf | |
139 | +134 cond:sg:m1.m2.m3:ter:imperf.perf | |
140 | +135 cond:sg:m1.m2.m3:ter:perf | |
141 | +136 cond:sg:n1.n2:imperf | |
142 | +137 cond:sg:n1.n2:imperf.perf | |
143 | +138 cond:sg:n1.n2:perf | |
144 | +139 cond:sg:n1.n2:pri:imperf | |
145 | +140 cond:sg:n1.n2:pri:imperf.perf | |
146 | +141 cond:sg:n1.n2:pri:perf | |
147 | +142 cond:sg:n1.n2:sec:imperf | |
148 | +143 cond:sg:n1.n2:sec:imperf.perf | |
149 | +144 cond:sg:n1.n2:sec:perf | |
150 | +145 cond:sg:n1.n2:ter:imperf | |
151 | +146 cond:sg:n1.n2:ter:imperf.perf | |
152 | +147 cond:sg:n1.n2:ter:perf | |
153 | +148 conj | |
154 | +149 depr:pl:nom:m2 | |
155 | +150 depr:pl:voc:m2 | |
156 | +151 dig | |
157 | +152 emoticon | |
158 | +153 fin:pl:pri:imperf | |
159 | +154 fin:pl:pri:imperf.perf | |
160 | +155 fin:pl:pri:perf | |
161 | +156 fin:pl:sec:imperf | |
162 | +157 fin:pl:sec:imperf.perf | |
163 | +158 fin:pl:sec:perf | |
164 | +159 fin:pl:ter:imperf | |
165 | +160 fin:pl:ter:imperf.perf | |
166 | +161 fin:pl:ter:perf | |
167 | +162 fin:sg:pri:imperf | |
168 | +163 fin:sg:pri:imperf.perf | |
169 | +164 fin:sg:pri:perf | |
170 | +165 fin:sg:sec:imperf | |
171 | +166 fin:sg:sec:imperf.perf | |
172 | +167 fin:sg:sec:perf | |
173 | +168 fin:sg:ter:imperf | |
174 | +169 fin:sg:ter:imperf.perf | |
175 | +170 fin:sg:ter:perf | |
176 | +171 ger:pl:dat.loc:n2:imperf:aff | |
177 | +172 ger:pl:dat.loc:n2:imperf:neg | |
178 | +173 ger:pl:dat.loc:n2:imperf.perf:aff | |
179 | +174 ger:pl:dat.loc:n2:imperf.perf:neg | |
180 | +175 ger:pl:dat.loc:n2:perf:aff | |
181 | +176 ger:pl:dat.loc:n2:perf:neg | |
182 | +177 ger:pl:gen:n2:imperf:aff | |
183 | +178 ger:pl:gen:n2:imperf:neg | |
184 | +179 ger:pl:gen:n2:imperf.perf:aff | |
185 | +180 ger:pl:gen:n2:imperf.perf:neg | |
186 | +181 ger:pl:gen:n2:perf:aff | |
187 | +182 ger:pl:gen:n2:perf:neg | |
188 | +183 ger:pl:inst:n2:imperf:aff | |
189 | +184 ger:pl:inst:n2:imperf:neg | |
190 | +185 ger:pl:inst:n2:imperf.perf:aff | |
191 | +186 ger:pl:inst:n2:imperf.perf:neg | |
192 | +187 ger:pl:inst:n2:perf:aff | |
193 | +188 ger:pl:inst:n2:perf:neg | |
194 | +189 ger:pl:nom.acc:n2:imperf:aff | |
195 | +190 ger:pl:nom.acc:n2:imperf:neg | |
196 | +191 ger:pl:nom.acc:n2:imperf.perf:aff | |
197 | +192 ger:pl:nom.acc:n2:imperf.perf:neg | |
198 | +193 ger:pl:nom.acc:n2:perf:aff | |
199 | +194 ger:pl:nom.acc:n2:perf:neg | |
200 | +195 ger:sg:dat.loc:n2:imperf:aff | |
201 | +196 ger:sg:dat.loc:n2:imperf:neg | |
202 | +197 ger:sg:dat.loc:n2:imperf.perf:aff | |
203 | +198 ger:sg:dat.loc:n2:imperf.perf:neg | |
204 | +199 ger:sg:dat.loc:n2:perf:aff | |
205 | +200 ger:sg:dat.loc:n2:perf:neg | |
206 | +201 ger:sg:gen:n2:imperf:aff | |
207 | +202 ger:sg:gen:n2:imperf:neg | |
208 | +203 ger:sg:gen:n2:imperf.perf:aff | |
209 | +204 ger:sg:gen:n2:imperf.perf:neg | |
210 | +205 ger:sg:gen:n2:perf:aff | |
211 | +206 ger:sg:gen:n2:perf:neg | |
212 | +207 ger:sg:inst:n2:imperf:aff | |
213 | +208 ger:sg:inst:n2:imperf:neg | |
214 | +209 ger:sg:inst:n2:imperf.perf:aff | |
215 | +210 ger:sg:inst:n2:imperf.perf:neg | |
216 | +211 ger:sg:inst:n2:perf:aff | |
217 | +212 ger:sg:inst:n2:perf:neg | |
218 | +213 ger:sg:nom.acc:n2:imperf:aff | |
219 | +214 ger:sg:nom.acc:n2:imperf:neg | |
220 | +215 ger:sg:nom.acc:n2:imperf.perf:aff | |
221 | +216 ger:sg:nom.acc:n2:imperf.perf:neg | |
222 | +217 ger:sg:nom.acc:n2:perf:aff | |
223 | +218 ger:sg:nom.acc:n2:perf:neg | |
224 | +219 imps:imperf | |
225 | +220 imps:imperf.perf | |
226 | +221 imps:perf | |
227 | +222 impt:pl:pri:imperf | |
228 | +223 impt:pl:pri:imperf.perf | |
229 | +224 impt:pl:pri:perf | |
230 | +225 impt:pl:sec:imperf | |
231 | +226 impt:pl:sec:imperf.perf | |
232 | +227 impt:pl:sec:perf | |
233 | +228 impt:sg:sec:imperf | |
234 | +229 impt:sg:sec:imperf.perf | |
235 | +230 impt:sg:sec:perf | |
236 | +231 inf:imperf | |
237 | +232 inf:imperf.perf | |
238 | +233 inf:perf | |
239 | +234 interj | |
240 | +235 interp | |
241 | +236 naj | |
242 | +237 nie | |
243 | +238 num:comp | |
244 | +239 num:pl:acc:m1:rec | |
245 | +240 num:pl:dat.loc:n1.p1.p2:congr.rec | |
246 | +241 num:pl:dat:m1.m2.m3.n2.f:congr | |
247 | +242 num:pl:gen.dat.inst.loc:m1.m2.m3.f.n1.n2.p1.p2:congr | |
248 | +243 num:pl:gen.dat.inst.loc:m1.m2.m3.f.n2:congr | |
249 | +244 num:pl:gen.dat.loc:m1.m2.m3.n2.f:congr | |
250 | +245 num:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2:congr | |
251 | +246 num:pl:gen.loc:m1.m2.m3.n2.f:congr | |
252 | +247 num:pl:gen:n1.p1.p2:rec | |
253 | +248 num:pl:inst:f:congr | |
254 | +249 num:pl:inst:m1.m2.m3.f.n1.n2.p1.p2:congr | |
255 | +250 num:pl:inst:m1.m2.m3.f.n2:congr | |
256 | +251 num:pl:inst:m1.m2.m3.n2:congr | |
257 | +252 num:pl:inst:m1.m2.m3.n2.f:congr | |
258 | +253 num:pl:inst:n1.p1.p2:rec | |
259 | +254 num:pl:nom.acc:m1.m2.m3.f.n1.n2.p1.p2:rec | |
260 | +255 num:pl:nom.acc.voc:f:congr | |
261 | +256 num:pl:nom.acc.voc:m1:rec | |
262 | +257 num:pl:nom.acc.voc:m2.m3.f.n1.n2.p1.p2:rec | |
263 | +258 num:pl:nom.acc.voc:m2.m3.f.n2:rec | |
264 | +259 num:pl:nom.acc.voc:m2.m3.n2:congr | |
265 | +260 num:pl:nom.acc.voc:m2.m3.n2.f:congr | |
266 | +261 num:pl:nom.acc.voc:n1.p1.p2:rec | |
267 | +262 num:pl:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.f.n1.n2.p1.p2:rec | |
268 | +263 num:pl:nom.voc:m1:congr | |
269 | +264 num:pl:nom.voc:m1:rec | |
270 | +265 num:sg:nom.gen.dat.inst.acc.loc.voc:f:rec | |
271 | +266 num:sg:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.n1.n2:rec | |
272 | +267 pact:pl:acc:m1.p1:imperf:aff | |
273 | +268 pact:pl:acc:m1.p1:imperf:neg | |
274 | +269 pact:pl:acc:m1.p1:imperf.perf:aff | |
275 | +270 pact:pl:acc:m1.p1:imperf.perf:neg | |
276 | +271 pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff | |
277 | +272 pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg | |
278 | +273 pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff | |
279 | +274 pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg | |
280 | +275 pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff | |
281 | +276 pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg | |
282 | +277 pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff | |
283 | +278 pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg | |
284 | +279 pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff | |
285 | +280 pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg | |
286 | +281 pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff | |
287 | +282 pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg | |
288 | +283 pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff | |
289 | +284 pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg | |
290 | +285 pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff | |
291 | +286 pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg | |
292 | +287 pact:pl:nom.voc:m1.p1:imperf:aff | |
293 | +288 pact:pl:nom.voc:m1.p1:imperf:neg | |
294 | +289 pact:pl:nom.voc:m1.p1:imperf.perf:aff | |
295 | +290 pact:pl:nom.voc:m1.p1:imperf.perf:neg | |
296 | +291 pact:sg:acc.inst:f:imperf:aff | |
297 | +292 pact:sg:acc.inst:f:imperf:neg | |
298 | +293 pact:sg:acc.inst:f:imperf.perf:aff | |
299 | +294 pact:sg:acc.inst:f:imperf.perf:neg | |
300 | +295 pact:sg:acc:m1.m2:imperf:aff | |
301 | +296 pact:sg:acc:m1.m2:imperf:neg | |
302 | +297 pact:sg:acc:m1.m2:imperf.perf:aff | |
303 | +298 pact:sg:acc:m1.m2:imperf.perf:neg | |
304 | +299 pact:sg:acc:m3:imperf:aff | |
305 | +300 pact:sg:acc:m3:imperf:neg | |
306 | +301 pact:sg:acc:m3:imperf.perf:aff | |
307 | +302 pact:sg:acc:m3:imperf.perf:neg | |
308 | +303 pact:sg:dat:m1.m2.m3.n1.n2:imperf:aff | |
309 | +304 pact:sg:dat:m1.m2.m3.n1.n2:imperf:neg | |
310 | +305 pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff | |
311 | +306 pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg | |
312 | +307 pact:sg:gen.dat.loc:f:imperf:aff | |
313 | +308 pact:sg:gen.dat.loc:f:imperf:neg | |
314 | +309 pact:sg:gen.dat.loc:f:imperf.perf:aff | |
315 | +310 pact:sg:gen.dat.loc:f:imperf.perf:neg | |
316 | +311 pact:sg:gen:m1.m2.m3.n1.n2:imperf:aff | |
317 | +312 pact:sg:gen:m1.m2.m3.n1.n2:imperf:neg | |
318 | +313 pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff | |
319 | +314 pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg | |
320 | +315 pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff | |
321 | +316 pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg | |
322 | +317 pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff | |
323 | +318 pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg | |
324 | +319 pact:sg:nom.acc.voc:n1.n2:imperf:aff | |
325 | +320 pact:sg:nom.acc.voc:n1.n2:imperf:neg | |
326 | +321 pact:sg:nom.acc.voc:n1.n2:imperf.perf:aff | |
327 | +322 pact:sg:nom.acc.voc:n1.n2:imperf.perf:neg | |
328 | +323 pact:sg:nom.voc:f:imperf:aff | |
329 | +324 pact:sg:nom.voc:f:imperf:neg | |
330 | +325 pact:sg:nom.voc:f:imperf.perf:aff | |
331 | +326 pact:sg:nom.voc:f:imperf.perf:neg | |
332 | +327 pact:sg:nom.voc:m1.m2.m3:imperf:aff | |
333 | +328 pact:sg:nom.voc:m1.m2.m3:imperf:neg | |
334 | +329 pact:sg:nom.voc:m1.m2.m3:imperf.perf:aff | |
335 | +330 pact:sg:nom.voc:m1.m2.m3:imperf.perf:neg | |
336 | +331 pant:perf | |
337 | +332 pcon:imperf | |
338 | +333 ppas:pl:acc:m1.p1:imperf:aff | |
339 | +334 ppas:pl:acc:m1.p1:imperf:neg | |
340 | +335 ppas:pl:acc:m1.p1:imperf.perf:aff | |
341 | +336 ppas:pl:acc:m1.p1:imperf.perf:neg | |
342 | +337 ppas:pl:acc:m1.p1:perf:aff | |
343 | +338 ppas:pl:acc:m1.p1:perf:neg | |
344 | +339 ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff | |
345 | +340 ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg | |
346 | +341 ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff | |
347 | +342 ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg | |
348 | +343 ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff | |
349 | +344 ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg | |
350 | +345 ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff | |
351 | +346 ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg | |
352 | +347 ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff | |
353 | +348 ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg | |
354 | +349 ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff | |
355 | +350 ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg | |
356 | +351 ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff | |
357 | +352 ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg | |
358 | +353 ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff | |
359 | +354 ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg | |
360 | +355 ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff | |
361 | +356 ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg | |
362 | +357 ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff | |
363 | +358 ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg | |
364 | +359 ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff | |
365 | +360 ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg | |
366 | +361 ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:aff | |
367 | +362 ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:neg | |
368 | +363 ppas:pl:nom.voc:m1.p1:imperf:aff | |
369 | +364 ppas:pl:nom.voc:m1.p1:imperf:neg | |
370 | +365 ppas:pl:nom.voc:m1.p1:imperf.perf:aff | |
371 | +366 ppas:pl:nom.voc:m1.p1:imperf.perf:neg | |
372 | +367 ppas:pl:nom.voc:m1.p1:perf:aff | |
373 | +368 ppas:pl:nom.voc:m1.p1:perf:neg | |
374 | +369 ppas:sg:acc.inst:f:imperf:aff | |
375 | +370 ppas:sg:acc.inst:f:imperf:neg | |
376 | +371 ppas:sg:acc.inst:f:imperf.perf:aff | |
377 | +372 ppas:sg:acc.inst:f:imperf.perf:neg | |
378 | +373 ppas:sg:acc.inst:f:perf:aff | |
379 | +374 ppas:sg:acc.inst:f:perf:neg | |
380 | +375 ppas:sg:acc:m1.m2:imperf:aff | |
381 | +376 ppas:sg:acc:m1.m2:imperf:neg | |
382 | +377 ppas:sg:acc:m1.m2:imperf.perf:aff | |
383 | +378 ppas:sg:acc:m1.m2:imperf.perf:neg | |
384 | +379 ppas:sg:acc:m1.m2:perf:aff | |
385 | +380 ppas:sg:acc:m1.m2:perf:neg | |
386 | +381 ppas:sg:acc:m3:imperf:aff | |
387 | +382 ppas:sg:acc:m3:imperf:neg | |
388 | +383 ppas:sg:acc:m3:imperf.perf:aff | |
389 | +384 ppas:sg:acc:m3:imperf.perf:neg | |
390 | +385 ppas:sg:acc:m3:perf:aff | |
391 | +386 ppas:sg:acc:m3:perf:neg | |
392 | +387 ppas:sg:dat:m1.m2.m3.n1.n2:imperf:aff | |
393 | +388 ppas:sg:dat:m1.m2.m3.n1.n2:imperf:neg | |
394 | +389 ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff | |
395 | +390 ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg | |
396 | +391 ppas:sg:dat:m1.m2.m3.n1.n2:perf:aff | |
397 | +392 ppas:sg:dat:m1.m2.m3.n1.n2:perf:neg | |
398 | +393 ppas:sg:gen.dat.loc:f:imperf:aff | |
399 | +394 ppas:sg:gen.dat.loc:f:imperf:neg | |
400 | +395 ppas:sg:gen.dat.loc:f:imperf.perf:aff | |
401 | +396 ppas:sg:gen.dat.loc:f:imperf.perf:neg | |
402 | +397 ppas:sg:gen.dat.loc:f:perf:aff | |
403 | +398 ppas:sg:gen.dat.loc:f:perf:neg | |
404 | +399 ppas:sg:gen:m1.m2.m3.n1.n2:imperf:aff | |
405 | +400 ppas:sg:gen:m1.m2.m3.n1.n2:imperf:neg | |
406 | +401 ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff | |
407 | +402 ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg | |
408 | +403 ppas:sg:gen:m1.m2.m3.n1.n2:perf:aff | |
409 | +404 ppas:sg:gen:m1.m2.m3.n1.n2:perf:neg | |
410 | +405 ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff | |
411 | +406 ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg | |
412 | +407 ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff | |
413 | +408 ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg | |
414 | +409 ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:aff | |
415 | +410 ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:neg | |
416 | +411 ppas:sg:nom.acc.voc:n1.n2:imperf:aff | |
417 | +412 ppas:sg:nom.acc.voc:n1.n2:imperf:neg | |
418 | +413 ppas:sg:nom.acc.voc:n1.n2:imperf.perf:aff | |
419 | +414 ppas:sg:nom.acc.voc:n1.n2:imperf.perf:neg | |
420 | +415 ppas:sg:nom.acc.voc:n1.n2:perf:aff | |
421 | +416 ppas:sg:nom.acc.voc:n1.n2:perf:neg | |
422 | +417 ppas:sg:nom.voc:f:imperf:aff | |
423 | +418 ppas:sg:nom.voc:f:imperf:neg | |
424 | +419 ppas:sg:nom.voc:f:imperf.perf:aff | |
425 | +420 ppas:sg:nom.voc:f:imperf.perf:neg | |
426 | +421 ppas:sg:nom.voc:f:perf:aff | |
427 | +422 ppas:sg:nom.voc:f:perf:neg | |
428 | +423 ppas:sg:nom.voc:m1.m2.m3:imperf:aff | |
429 | +424 ppas:sg:nom.voc:m1.m2.m3:imperf:neg | |
430 | +425 ppas:sg:nom.voc:m1.m2.m3:imperf.perf:aff | |
431 | +426 ppas:sg:nom.voc:m1.m2.m3:imperf.perf:neg | |
432 | +427 ppas:sg:nom.voc:m1.m2.m3:perf:aff | |
433 | +428 ppas:sg:nom.voc:m1.m2.m3:perf:neg | |
434 | +429 ppron12:pl:acc:_:pri | |
435 | +430 ppron12:pl:acc:_:sec | |
436 | +431 ppron12:pl:dat:_:pri | |
437 | +432 ppron12:pl:dat:_:sec | |
438 | +433 ppron12:pl:gen:_:pri | |
439 | +434 ppron12:pl:gen:_:sec | |
440 | +435 ppron12:pl:inst:_:pri | |
441 | +436 ppron12:pl:inst:_:sec | |
442 | +437 ppron12:pl:loc:_:pri | |
443 | +438 ppron12:pl:loc:_:sec | |
444 | +439 ppron12:pl:nom:_:pri | |
445 | +440 ppron12:pl:nom:_:sec | |
446 | +441 ppron12:pl:voc:_:pri | |
447 | +442 ppron12:pl:voc:_:sec | |
448 | +443 ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:akc | |
449 | +444 ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:nakc | |
450 | +445 ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:akc | |
451 | +446 ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:nakc | |
452 | +447 ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:akc | |
453 | +448 ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:nakc | |
454 | +449 ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:akc | |
455 | +450 ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:nakc | |
456 | +451 ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:akc | |
457 | +452 ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:nakc | |
458 | +453 ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:akc | |
459 | +454 ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:nakc | |
460 | +455 ppron12:sg:inst:m1.m2.m3.f.n1.n2:pri | |
461 | +456 ppron12:sg:inst:m1.m2.m3.f.n1.n2:sec | |
462 | +457 ppron12:sg:loc:m1.m2.m3.f.n1.n2:pri | |
463 | +458 ppron12:sg:loc:m1.m2.m3.f.n1.n2:sec | |
464 | +459 ppron12:sg:nom:m1.m2.m3.f.n1.n2:pri | |
465 | +460 ppron12:sg:nom:m1.m2.m3.f.n1.n2:sec | |
466 | +461 ppron12:sg:voc:m1.m2.m3.f.n1.n2:sec | |
467 | +462 ppron3:pl:acc:m1.p1:ter:_:npraep | |
468 | +463 ppron3:pl:acc:m1.p1:ter:_:praep | |
469 | +464 ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:npraep | |
470 | +465 ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:praep | |
471 | +466 ppron3:pl:dat:_:ter:_:npraep | |
472 | +467 ppron3:pl:dat:_:ter:_:praep | |
473 | +468 ppron3:pl:gen:_:ter:_:npraep | |
474 | +469 ppron3:pl:gen:_:ter:_:praep | |
475 | +470 ppron3:pl:inst:_:ter:_:_ | |
476 | +471 ppron3:pl:loc:_:ter:_:_ | |
477 | +472 ppron3:pl:nom:m1.p1:ter:_:_ | |
478 | +473 ppron3:pl:nom:m2.m3.f.n1.n2.p2.p3:ter:_:_ | |
479 | +474 ppron3:sg:acc:f:ter:_:npraep | |
480 | +475 ppron3:sg:acc:f:ter:_:praep | |
481 | +476 ppron3:sg:acc:m1.m2.m3:ter:akc:npraep | |
482 | +477 ppron3:sg:acc:m1.m2.m3:ter:akc:praep | |
483 | +478 ppron3:sg:acc:m1.m2.m3:ter:nakc:npraep | |
484 | +479 ppron3:sg:acc:m1.m2.m3:ter:nakc:praep | |
485 | +480 ppron3:sg:acc:n1.n2:ter:_:npraep | |
486 | +481 ppron3:sg:acc:n1.n2:ter:_:praep | |
487 | +482 ppron3:sg:dat:f:ter:_:npraep | |
488 | +483 ppron3:sg:dat:f:ter:_:praep | |
489 | +484 ppron3:sg:dat:m1.m2.m3:ter:akc:npraep | |
490 | +485 ppron3:sg:dat:m1.m2.m3:ter:nakc:npraep | |
491 | +486 ppron3:sg:dat:m1.m2.m3:ter:_:praep | |
492 | +487 ppron3:sg:dat:n1.n2:ter:akc:npraep | |
493 | +488 ppron3:sg:dat:n1.n2:ter:nakc:npraep | |
494 | +489 ppron3:sg:dat:n1.n2:ter:_:praep | |
495 | +490 ppron3:sg:gen.acc:m1.m2.m3:ter:nakc:praep | |
496 | +491 ppron3:sg:gen:f:ter:_:npraep | |
497 | +492 ppron3:sg:gen:f:ter:_:praep | |
498 | +493 ppron3:sg:gen:m1.m2.m3:ter:akc:npraep | |
499 | +494 ppron3:sg:gen:m1.m2.m3:ter:akc:praep | |
500 | +495 ppron3:sg:gen:m1.m2.m3:ter:nakc:npraep | |
501 | +496 ppron3:sg:gen:m1.m2.m3:ter:nakc:praep | |
502 | +497 ppron3:sg:gen:n1.n2:ter:akc:npraep | |
503 | +498 ppron3:sg:gen:n1.n2:ter:nakc:npraep | |
504 | +499 ppron3:sg:gen:n1.n2:ter:_:praep | |
505 | +500 ppron3:sg:inst:f:ter:_:praep | |
506 | +501 ppron3:sg:inst:m1.m2.m3:ter:_:_ | |
507 | +502 ppron3:sg:inst:n1.n2:ter:_:_ | |
508 | +503 ppron3:sg:loc:f:ter:_:_ | |
509 | +504 ppron3:sg:loc:m1.m2.m3:ter:_:_ | |
510 | +505 ppron3:sg:loc:n1.n2:ter:_:_ | |
511 | +506 ppron3:sg:nom:f:ter:_:_ | |
512 | +507 ppron3:sg:nom:m1.m2.m3:ter:_:_ | |
513 | +508 ppron3:sg:nom:n1.n2:ter:_:_ | |
514 | +509 praet:pl:m1.p1:imperf | |
515 | +510 praet:pl:m1.p1:imperf.perf | |
516 | +511 praet:pl:m1.p1:perf | |
517 | +512 praet:pl:m1.p1:pri:imperf | |
518 | +513 praet:pl:m1.p1:pri:imperf.perf | |
519 | +514 praet:pl:m1.p1:pri:perf | |
520 | +515 praet:pl:m1.p1:sec:imperf | |
521 | +516 praet:pl:m1.p1:sec:imperf.perf | |
522 | +517 praet:pl:m1.p1:sec:perf | |
523 | +518 praet:pl:m1.p1:ter:imperf | |
524 | +519 praet:pl:m1.p1:ter:imperf.perf | |
525 | +520 praet:pl:m1.p1:ter:perf | |
526 | +521 praet:pl:m2.m3.f.n1.n2.p2.p3:imperf | |
527 | +522 praet:pl:m2.m3.f.n1.n2.p2.p3:imperf.perf | |
528 | +523 praet:pl:m2.m3.f.n1.n2.p2.p3:perf | |
529 | +524 praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf | |
530 | +525 praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf | |
531 | +526 praet:pl:m2.m3.f.n1.n2.p2.p3:pri:perf | |
532 | +527 praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf | |
533 | +528 praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf | |
534 | +529 praet:pl:m2.m3.f.n1.n2.p2.p3:sec:perf | |
535 | +530 praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf | |
536 | +531 praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf | |
537 | +532 praet:pl:m2.m3.f.n1.n2.p2.p3:ter:perf | |
538 | +533 praet:sg:f:imperf | |
539 | +534 praet:sg:f:imperf.perf | |
540 | +535 praet:sg:f:perf | |
541 | +536 praet:sg:f:pri:imperf | |
542 | +537 praet:sg:f:pri:imperf.perf | |
543 | +538 praet:sg:f:pri:perf | |
544 | +539 praet:sg:f:sec:imperf | |
545 | +540 praet:sg:f:sec:imperf.perf | |
546 | +541 praet:sg:f:sec:perf | |
547 | +542 praet:sg:f:ter:imperf | |
548 | +543 praet:sg:f:ter:imperf.perf | |
549 | +544 praet:sg:f:ter:perf | |
550 | +545 praet:sg:m1.m2.m3:imperf | |
551 | +546 praet:sg:m1.m2.m3:imperf:agl | |
552 | +547 praet:sg:m1.m2.m3:imperf:nagl | |
553 | +548 praet:sg:m1.m2.m3:imperf.perf | |
554 | +549 praet:sg:m1.m2.m3:perf | |
555 | +550 praet:sg:m1.m2.m3:perf:agl | |
556 | +551 praet:sg:m1.m2.m3:perf:nagl | |
557 | +552 praet:sg:m1.m2.m3:pri:imperf | |
558 | +553 praet:sg:m1.m2.m3:pri:imperf.perf | |
559 | +554 praet:sg:m1.m2.m3:pri:perf | |
560 | +555 praet:sg:m1.m2.m3:sec:imperf | |
561 | +556 praet:sg:m1.m2.m3:sec:imperf.perf | |
562 | +557 praet:sg:m1.m2.m3:sec:perf | |
563 | +558 praet:sg:m1.m2.m3:ter:imperf | |
564 | +559 praet:sg:m1.m2.m3:ter:imperf.perf | |
565 | +560 praet:sg:m1.m2.m3:ter:perf | |
566 | +561 praet:sg:n1.n2:imperf | |
567 | +562 praet:sg:n1.n2:imperf.perf | |
568 | +563 praet:sg:n1.n2:perf | |
569 | +564 praet:sg:n1.n2:pri:imperf | |
570 | +565 praet:sg:n1.n2:pri:imperf.perf | |
571 | +566 praet:sg:n1.n2:pri:perf | |
572 | +567 praet:sg:n1.n2:sec:imperf | |
573 | +568 praet:sg:n1.n2:sec:imperf.perf | |
574 | +569 praet:sg:n1.n2:sec:perf | |
575 | +570 praet:sg:n1.n2:ter:imperf | |
576 | +571 praet:sg:n1.n2:ter:imperf.perf | |
577 | +572 praet:sg:n1.n2:ter:perf | |
578 | +573 pred | |
579 | +574 prefa | |
580 | +575 prefppas | |
581 | +576 prefs | |
582 | +577 prefv | |
583 | +578 prep:acc | |
584 | +579 prep:acc:nwok | |
585 | +580 prep:acc:wok | |
586 | +581 prep:dat | |
587 | +582 prep:gen | |
588 | +583 prep:gen:nwok | |
589 | +584 prep:gen:wok | |
590 | +585 prep:inst | |
591 | +586 prep:inst:nwok | |
592 | +587 prep:inst:wok | |
593 | +588 prep:loc | |
594 | +589 prep:loc:nwok | |
595 | +590 prep:loc:wok | |
596 | +591 prep:nom | |
597 | +592 qub | |
598 | +593 romandig | |
599 | +594 siebie:acc | |
600 | +595 siebie:dat | |
601 | +596 siebie:gen | |
602 | +597 siebie:inst | |
603 | +598 siebie:loc | |
604 | +599 substa | |
605 | +600 subst:pl:acc:f | |
606 | +601 subst:pl:acc:m1 | |
607 | +602 subst:pl:acc:m2 | |
608 | +603 subst:pl:acc:m3 | |
609 | +604 subst:pl:acc:n1 | |
610 | +605 subst:pl:acc:n2 | |
611 | +606 subst:pl:acc:p1 | |
612 | +607 subst:pl:acc:p2 | |
613 | +608 subst:pl:acc:p3 | |
614 | +609 subst:pl:dat:f | |
615 | +610 subst:pl:dat:m1 | |
616 | +611 subst:pl:dat:m2 | |
617 | +612 subst:pl:dat:m3 | |
618 | +613 subst:pl:dat:n1 | |
619 | +614 subst:pl:dat:n2 | |
620 | +615 subst:pl:dat:p1 | |
621 | +616 subst:pl:dat:p2 | |
622 | +617 subst:pl:dat:p3 | |
623 | +618 subst:pl:gen:f | |
624 | +619 subst:pl:gen:m1 | |
625 | +620 subst:pl:gen:m2 | |
626 | +621 subst:pl:gen:m3 | |
627 | +622 subst:pl:gen:n1 | |
628 | +623 subst:pl:gen:n2 | |
629 | +624 subst:pl:gen:p1 | |
630 | +625 subst:pl:gen:p2 | |
631 | +626 subst:pl:gen:p3 | |
632 | +627 subst:pl:inst:f | |
633 | +628 subst:pl:inst:m1 | |
634 | +629 subst:pl:inst:m2 | |
635 | +630 subst:pl:inst:m3 | |
636 | +631 subst:pl:inst:n1 | |
637 | +632 subst:pl:inst:n2 | |
638 | +633 subst:pl:inst:p1 | |
639 | +634 subst:pl:inst:p2 | |
640 | +635 subst:pl:inst:p3 | |
641 | +636 subst:pl:loc:f | |
642 | +637 subst:pl:loc:m1 | |
643 | +638 subst:pl:loc:m2 | |
644 | +639 subst:pl:loc:m3 | |
645 | +640 subst:pl:loc:n1 | |
646 | +641 subst:pl:loc:n2 | |
647 | +642 subst:pl:loc:p1 | |
648 | +643 subst:pl:loc:p2 | |
649 | +644 subst:pl:loc:p3 | |
650 | +645 subst:pl:nom:f | |
651 | +646 subst:pl:nom:m1 | |
652 | +647 subst:pl:nom:m2 | |
653 | +648 subst:pl:nom:m3 | |
654 | +649 subst:pl:nom:n1 | |
655 | +650 subst:pl:nom:n2 | |
656 | +651 subst:pl:nom:p1 | |
657 | +652 subst:pl:nom:p2 | |
658 | +653 subst:pl:nom:p3 | |
659 | +654 subst:pl:voc:f | |
660 | +655 subst:pl:voc:m1 | |
661 | +656 subst:pl:voc:m2 | |
662 | +657 subst:pl:voc:m3 | |
663 | +658 subst:pl:voc:n1 | |
664 | +659 subst:pl:voc:n2 | |
665 | +660 subst:pl:voc:p1 | |
666 | +661 subst:pl:voc:p2 | |
667 | +662 subst:pl:voc:p3 | |
668 | +663 subst:sg:acc:f | |
669 | +664 subst:sg:acc:m1 | |
670 | +665 subst:sg:acc:m2 | |
671 | +666 subst:sg:acc:m3 | |
672 | +667 subst:sg:acc:n1 | |
673 | +668 subst:sg:acc:n2 | |
674 | +669 subst:sg:dat:f | |
675 | +670 subst:sg:dat:m1 | |
676 | +671 subst:sg:dat:m2 | |
677 | +672 subst:sg:dat:m3 | |
678 | +673 subst:sg:dat:n1 | |
679 | +674 subst:sg:dat:n2 | |
680 | +675 subst:sg:gen:f | |
681 | +676 subst:sg:gen:m1 | |
682 | +677 subst:sg:gen:m2 | |
683 | +678 subst:sg:gen:m3 | |
684 | +679 subst:sg:gen:n1 | |
685 | +680 subst:sg:gen:n2 | |
686 | +681 subst:sg:inst:f | |
687 | +682 subst:sg:inst:m1 | |
688 | +683 subst:sg:inst:m2 | |
689 | +684 subst:sg:inst:m3 | |
690 | +685 subst:sg:inst:n1 | |
691 | +686 subst:sg:inst:n2 | |
692 | +687 subst:sg:loc:f | |
693 | +688 subst:sg:loc:m1 | |
694 | +689 subst:sg:loc:m2 | |
695 | +690 subst:sg:loc:m3 | |
696 | +691 subst:sg:loc:n1 | |
697 | +692 subst:sg:loc:n2 | |
698 | +693 subst:sg:nom:f | |
699 | +694 subst:sg:nom:m1 | |
700 | +695 subst:sg:nom:m2 | |
701 | +696 subst:sg:nom:m3 | |
702 | +697 subst:sg:nom:n1 | |
703 | +698 subst:sg:nom:n2 | |
704 | +699 subst:sg:voc:f | |
705 | +700 subst:sg:voc:m1 | |
706 | +701 subst:sg:voc:m2 | |
707 | +702 subst:sg:voc:m3 | |
708 | +703 subst:sg:voc:n1 | |
709 | +704 subst:sg:voc:n2 | |
710 | +705 winien:pl:m1.p1:imperf | |
711 | +706 winien:pl:m1.p1:pri:imperf | |
712 | +707 winien:pl:m1.p1:sec:imperf | |
713 | +708 winien:pl:m1.p1:ter:imperf | |
714 | +709 winien:pl:m2.m3.f.n1.n2.p2.p3:imperf | |
715 | +710 winien:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf | |
716 | +711 winien:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf | |
717 | +712 winien:sg:f:imperf | |
718 | +713 winien:sg:f:pri:imperf | |
719 | +714 winien:sg:f:sec:imperf | |
720 | +715 winien:sg:f:ter:imperf | |
721 | +716 winien:sg:m1.m2.m3:imperf | |
722 | +717 winien:sg:m1.m2.m3:pri:imperf | |
723 | +718 winien:sg:m1.m2.m3:sec:imperf | |
724 | +719 winien:sg:m1.m2.m3:ter:imperf | |
725 | +720 winien:sg:n1.n2:imperf | |
726 | +721 winien:sg:n1.n2:pri:imperf | |
727 | +722 winien:sg:n1.n2:sec:imperf | |
728 | +723 winien:sg:n1.n2:ter:imperf | |
... | ... |