WalentyXML.py
8.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#! /usr/bin/python
# -*- coding: utf-8 -*-
from xml.sax import handler
from importer.Entry import Entry
examples_out_file = 'examples_ambig.txt'
misconnected_examples_out_file = 'examples_to_reattach.txt'
class XMLNode:
def __init__(self, name, attrs, parent):
self._name = name
self._attrs = attrs
self._children = []
self._parent = parent
self._content = ""
def addChild(self, child):
self._children.append(child)
def setContent(self, content):
self._content = content
def __str__(self):
att = list(zip(self._attrs.keys(), self._attrs.values()))
return self._name + '[' + str(att) + '](' + ';'.join([str(temp) for temp in self._children]) + ')'
class WalentyTeiHandler(handler.ContentHandler):
def __init__(self, entry_meanings, meanings, frames):
handler.ContentHandler.__init__(self)
self._subtree = None
self._current = None
self._constructing = False
self._content = ""
self._entry_meanings = entry_meanings
self._meanings = meanings
self._frames = frames
self._stored_positions = {}
self._examples_in = None # @TODO: read disambiguated file
self._examples_out = open(examples_out_file, "w")
self._misconnected_out = open(misconnected_examples_out_file, "w")
def startElement(self, name, attrs):
if name == 'date':
#self.printMeta(attrs['when'])
pass
if name == 'entry':
self._constructing = True
self._content = ""
if (self._constructing):
node = XMLNode(name, attrs, self._current)
if self._current is not None:
self._current.addChild(node)
else:
self._subtree = node
self._current = node
def endElement(self, name):
if self._current is not None:
self._current.setContent(self._content.strip())
self._current = self._current._parent
if name == 'entry':
if self._current is not None:
raise TEIStructureError()
base = self._subtree._children[0]._children[0]._content
# TODO sprawdzić i poprawić te hasła
if base not in (
'analogiczny', # compar(jak) bez kontroli
'charakterystyka', # błąd – kontrola nie od pary
'degradacja', # np(gen) + compar(jako) – brakuje kontroli?
'dozwalać', 'dozwolić', # w alternacji występuje tylko controllee – błąd czy uwzględniać? (***)
'eksploatacja', # xp(abl) + xp(locat) – to chyba jest przesadna fiksacja na koordynacji
'fenomen', # np(gen) + compar(jako) – brakuje kontroli?
'gnać', # błąd – brak controllera
'kompromitacja', # possp + compar(jako) – brakuje kontroli?
'metafora', # possp + np(gen) + compar(jako) – brakuje kontroli?
'mianować', # dwa pred_controllee, bez controllera – błąd
'niewiarygodny', # compar(jako) bez kontroli
'obligować', # (***)
'odetkać', # w XML-u 20200626 jest dziwna alternacja, chyba błąd
#'pieprzyć', # brakuje [co] w modyfikacjach cp(rel[co])
'pochwała', # np(gen) + compar(jako) – brakuje kontroli?
'podziw', # prepnp(dla,gen) + compar(jako) – brakuje kontroli?
#'pognać', # brakuje [co] w modyfikacjach cp(rel[co])
'polecać', 'popłacać', # (***)
'porozjeżdżać', # błąd – kontrola nie od pary
'powychodzić', # błąd – kontrola nie od pary
'praktyka', # possp + compar(jako) – brakuje kontroli?
'predestynować', # dziwna alternacja + dlaczego akurat np jest Foreground, a ncp Background?
'proklamacja', # np(gen) + compar(jako) – brakuje kontroli?
'przestać', 'przestawać', # (***)
'rejestracja', # np(gen) + compar(jako) – brakuje kontroli?
'reklama', # np(gen) + compar(jako) – brakuje kontroli?
'reprezentacja', # np(gen) + compar(jako) – brakuje kontroli?
'rewelacja', # prepncp(o,loc,rel) – powinno być int?
'rola', # possp + compar(jako) – brakuje kontroli?
'rozpoznawalność', # np(gen) + compar(jako) – brakuje kontroli?
'spodziewać', # prędzej + śmierci + compar(niż) – brakuje kontroli?
'sprzymierzyć', # imperf – błąd?
'staż', # possp + compar(jako) – brakuje kontroli?
'stygmatyzacja', # np(gen) + compar(jako) – brakuje kontroli?
'trząść', # np(str) + compar(jak) – brakuje kontroli?
'uczestnictwo', # possp + compar(jako) – brakuje kontroli?
#'umilknąć', # brakuje [jakby] w modyfikacjach cp(rel[co])
'ustalać', # błąd – kontrola nie od pary
'uważać', # podwójna kontrola – TODO, ale też patrz notatki
'uwielbiać', # (***)
'uznać', 'uznawać', # podwójna kontrola – TODO, ale też patrz notatki
'walor', # possp + compar(jako) – brakuje kontroli?
'wczołgiwać', # TODO, ale też patrz notatki
'wegetacja', # possp + compar(jako) – brakuje kontroli?
'weryfikacja', # np(gen) + compar(jako) – brakuje kontroli?
'woleć', # cp(gdy) + compar(niż) – brakuje kontroli?
'współbrzmieć', # dziwna alternacja + dlaczego akurat np jest Foreground, a ncp Background?
'wybawiać', 'wybawić', # dziwne przypisanie argumentów do fraz w alternacji z koordynacją
'wykaligrafować', # w XML-u 20200626 jest przedziwna alternacja
'wypruwać', # dziwne schematy z dwiema pozycjami „flaki” i „(jakieś) flaki”
'zależeć', # xp(mod[comprepnp(na sposób);advp(mod);lex(prepnp(w,acc),sg,'sposób',atr({adjp(agr)}))]) – dziwna pozycja
'zapowiedź', # np(gen) + compar(jako) – brakuje kontroli?
'zastygać', 'zastygnąć', # brakuje kontroli?
'zatrząść', # np(str) + compar(jak) – brakuje kontroli?
'zdarzyć', # (***)
'zwać', # (***)
'dzwonić', # – dwie lex(prepnp(w,loc))!
'kapać', # – dwie lex(np(inst))!
'popukać', # – dwie lex(prepnp(do,gen))!
'przeczyć', # – dwie lex(np(dat))!
'pukać', # – dwie lex(prepnp(do,gen))!
'regenerować', # – dwie lex(np(str))!
'rosić', # – dwie lex(np(inst))!
'spychać', # – dwie lex(prepnp(na,acc))!
'szwankować', # – dwie lex(prepnp(na,loc))!
'wypchać', # – dwie lex(np(inst))!
'zapukać', # – dwie lex(prepnp(do,gen))!
'zepchnąć', # – dwie lex(prepnp(na,acc))!
'zrosić', # – dwie lex(np(inst))!
):
entry = Entry(self._subtree, self._entry_meanings, self._meanings, self._frames, self._examples_in, self._examples_out, self._misconnected_out)
entry.store(self._meanings, self._stored_positions)
self._content = ''
else:
if name == 'title':
pass
elif name == 'publisher':
pass
elif name == 'licence':
pass
elif name == 'p':
self._content += '\n% '
def characters(self, content):
self._content += content
def endDocument(self):
self._examples_out.close()
self._misconnected_out.close()