opener-kaf-naf-parser 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +67 -8
  3. data/bin/kaf-naf-parser-daemon +10 -0
  4. data/core/kaf-naf-parser.py +5 -5
  5. data/exec/kaf-naf-parser.rb +9 -0
  6. data/ext/hack/Rakefile +13 -0
  7. data/lib/opener/kaf_naf_parser/version.rb +1 -1
  8. data/opener-kaf-naf-parser.gemspec +5 -1
  9. data/pre_install_requirements.txt +3 -0
  10. metadata +37 -51
  11. data/core/packages/KafNafParser-1.2.tar.gz +0 -0
  12. data/core/packages/VUA_pylib-1.3.tar.gz +0 -0
  13. data/core/site-packages/pre_build/KafNafParser/KafNafParserMod.py +0 -338
  14. data/core/site-packages/pre_build/KafNafParser/__init__.py +0 -14
  15. data/core/site-packages/pre_build/KafNafParser/constituency_data.py +0 -125
  16. data/core/site-packages/pre_build/KafNafParser/coreference_data.py +0 -52
  17. data/core/site-packages/pre_build/KafNafParser/dependency_data.py +0 -80
  18. data/core/site-packages/pre_build/KafNafParser/entity_data.py +0 -59
  19. data/core/site-packages/pre_build/KafNafParser/external_references_data.py +0 -41
  20. data/core/site-packages/pre_build/KafNafParser/feature_extractor/__init__.py +0 -2
  21. data/core/site-packages/pre_build/KafNafParser/feature_extractor/constituency.py +0 -205
  22. data/core/site-packages/pre_build/KafNafParser/feature_extractor/dependency.py +0 -300
  23. data/core/site-packages/pre_build/KafNafParser/features_data.py +0 -71
  24. data/core/site-packages/pre_build/KafNafParser/header_data.py +0 -127
  25. data/core/site-packages/pre_build/KafNafParser/opinion_data.py +0 -200
  26. data/core/site-packages/pre_build/KafNafParser/references_data.py +0 -15
  27. data/core/site-packages/pre_build/KafNafParser/span_data.py +0 -63
  28. data/core/site-packages/pre_build/KafNafParser/term_data.py +0 -111
  29. data/core/site-packages/pre_build/KafNafParser/term_sentiment_data.py +0 -42
  30. data/core/site-packages/pre_build/KafNafParser/text_data.py +0 -90
  31. data/core/site-packages/pre_build/KafNafParser-1.2-py2.7.egg-info/PKG-INFO +0 -10
  32. data/core/site-packages/pre_build/KafNafParser-1.2-py2.7.egg-info/SOURCES.txt +0 -22
  33. data/core/site-packages/pre_build/KafNafParser-1.2-py2.7.egg-info/dependency_links.txt +0 -1
  34. data/core/site-packages/pre_build/KafNafParser-1.2-py2.7.egg-info/installed-files.txt +0 -47
  35. data/core/site-packages/pre_build/KafNafParser-1.2-py2.7.egg-info/top_level.txt +0 -1
  36. data/core/site-packages/pre_build/VUA_pylib/__init__.py +0 -1
  37. data/core/site-packages/pre_build/VUA_pylib/common/__init__.py +0 -1
  38. data/core/site-packages/pre_build/VUA_pylib/common/common.py +0 -28
  39. data/core/site-packages/pre_build/VUA_pylib/corpus_reader/__init__.py +0 -1
  40. data/core/site-packages/pre_build/VUA_pylib/corpus_reader/google_web_nl.py +0 -156
  41. data/core/site-packages/pre_build/VUA_pylib/io_utils/__init__.py +0 -1
  42. data/core/site-packages/pre_build/VUA_pylib/io_utils/feature_file.py +0 -121
  43. data/core/site-packages/pre_build/VUA_pylib/lexicon/__init__.py +0 -1
  44. data/core/site-packages/pre_build/VUA_pylib/lexicon/lexicon.py +0 -72
  45. data/core/site-packages/pre_build/VUA_pylib-1.3-py2.7.egg-info/PKG-INFO +0 -10
  46. data/core/site-packages/pre_build/VUA_pylib-1.3-py2.7.egg-info/SOURCES.txt +0 -14
  47. data/core/site-packages/pre_build/VUA_pylib-1.3-py2.7.egg-info/dependency_links.txt +0 -1
  48. data/core/site-packages/pre_build/VUA_pylib-1.3-py2.7.egg-info/installed-files.txt +0 -23
  49. data/core/site-packages/pre_build/VUA_pylib-1.3-py2.7.egg-info/top_level.txt +0 -1
  50. data/core/site-packages/pre_build/VUKafParserPy/KafDataObjectsMod.py +0 -165
  51. data/core/site-packages/pre_build/VUKafParserPy/KafParserMod.py +0 -439
  52. data/core/site-packages/pre_build/VUKafParserPy/__init__.py +0 -7
  53. data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/PKG-INFO +0 -10
  54. data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/SOURCES.txt +0 -7
  55. data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/dependency_links.txt +0 -1
  56. data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/installed-files.txt +0 -11
  57. data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/top_level.txt +0 -1
  58. data/pre_build_requirements.txt +0 -3
@@ -1,300 +0,0 @@
1
- from operator import itemgetter
2
- from VUA_pylib.common import get_max_distr_dict
3
- import sys
4
-
5
- class Cdependency_extractor:
6
- def __init__(self,knaf_obj):
7
- self.naf = knaf_obj
8
- self.relations_for_term = {}
9
- self.reverse_relations_for_term = {}
10
- self.prefix_for_reverse = ''
11
-
12
-
13
- already_linked = {}
14
- for dep in knaf_obj.get_dependencies():
15
- term_from = dep.get_from()
16
- term_to = dep.get_to()
17
- rfunc = dep.get_function()
18
-
19
- # Dependencies reversed are skipped...
20
- #if rfunc.startswith('rhd/') or rfunc.startswith('whd/'):
21
- # continue
22
-
23
- # For detecting cycles like:
24
- # <!-- rhd/body(geef,wat) -->
25
- # <dep from="t19" to="t15" rfunc="rhd/body"/>
26
- # <!-- hd/su(wat,geef) -->
27
- # <dep from="t15" to="t19" rfunc="hd/su"/>
28
-
29
- '''
30
- if term_from in already_linked and term_to in already_linked[term_from]:
31
- #There could be a cycle, skip this
32
- print>>sys.stderr,'Skipped from',term_from,'to',term_to,'func',rfunc,' cycle detected'
33
- continue
34
- else:
35
- #Include term_from as linked with term_to for future...
36
- if term_to not in already_linked:
37
- already_linked[term_to] = set()
38
- already_linked[term_to].add(term_from)
39
- '''
40
-
41
-
42
-
43
-
44
- if term_from in self.relations_for_term:
45
- self.relations_for_term[term_from].append((rfunc,term_to))
46
- else:
47
- self.relations_for_term[term_from] = [(rfunc,term_to)]
48
-
49
- if term_to in self.reverse_relations_for_term:
50
- self.reverse_relations_for_term[term_to].append((self.prefix_for_reverse+rfunc,term_from))
51
- else:
52
- self.reverse_relations_for_term[term_to] = [(self.prefix_for_reverse+rfunc,term_from)]
53
-
54
-
55
- self.paths_for_termid={}
56
- self.sentence_for_termid={}
57
- self.top_relation_for_term = {} ## termid --> (relation,topnode)
58
- self.root_for_sentence = {} ## sentenceid --> termid
59
-
60
- for term_obj in knaf_obj.get_terms():
61
- termid = term_obj.get_id()
62
-
63
- #Calculating the sentence id for the term id
64
- span_ids = term_obj.get_span().get_span_ids()
65
- token_obj = knaf_obj.get_token(span_ids[0])
66
- sentence = token_obj.get_sent()
67
-
68
- self.sentence_for_termid[termid] = sentence
69
- ###########################################
70
-
71
- #paths = self.__propagate_node(termid,[])
72
- #inversed = self.__reverse_propagate_node(termid)
73
-
74
- ## Due to the change on direction of dependencies...
75
- inversed = self.__propagate_node(termid,[])
76
- paths = self.__reverse_propagate_node(termid)
77
-
78
- ##Calculate the top relation for the node, the relation with the main root of the tree
79
- if len(inversed) != 0:
80
- for ip in inversed:
81
- if len(ip)!=0:
82
- self.top_relation_for_term[termid] = ip[-1] ## ex. ('NMOD', 't2')
83
- root = ip[-1][1]
84
- if sentence not in self.root_for_sentence:
85
- self.root_for_sentence[sentence] = {}
86
-
87
- if root not in self.root_for_sentence[sentence]:
88
- self.root_for_sentence[sentence][root]=0
89
- else:
90
- self.root_for_sentence[sentence][root]+=1
91
- break
92
-
93
- self.paths_for_termid[termid] = paths + inversed
94
- '''
95
- print termid
96
- print 'DIRECT RELS'
97
- for p in paths:
98
- print ' ',p
99
-
100
- print 'INDIRECT RELS'
101
- for p in inversed:
102
- print ' ',p
103
- '''
104
- ####
105
-
106
- for sent_id, distr in self.root_for_sentence.items():
107
- ## get_max_distr_dict imported from VUA_pylib.common
108
- most_freq,c = get_max_distr_dict(distr)
109
- self.root_for_sentence[sent_id] = most_freq
110
-
111
-
112
-
113
-
114
- def __propagate_node(self,node,already_propagated=[]):
115
- paths = []
116
-
117
- relations = self.relations_for_term.get(node)
118
- if relations is None: ##Case base
119
- paths = [[]]
120
- elif node in already_propagated:
121
- paths = [[]]
122
-
123
- else:
124
- already_propagated.append(node)
125
- for func, target_node in relations:
126
- new_paths = self.__propagate_node(target_node, already_propagated)
127
- for new_path in new_paths:
128
- new_path.insert(0,(func,target_node))
129
- paths.append(new_path)
130
- return paths
131
-
132
- def __reverse_propagate_node(self,node,already_propagated=[]):
133
- paths = []
134
- relations = self.reverse_relations_for_term.get(node)
135
- if relations is None: ##Case base
136
- paths = [[]]
137
- elif node in already_propagated:
138
- paths = [[]]
139
- else:
140
- already_propagated.append(node)
141
- for func, target_node in relations:
142
- new_paths = self.__reverse_propagate_node(target_node,already_propagated)
143
- for new_path in new_paths:
144
- new_path.insert(0,(func,target_node))
145
- paths.append(new_path)
146
- return paths
147
-
148
-
149
- # Get the shortest path between 2 term ids
150
- def get_shortest_path(self,term1,term2):
151
- dep_path = None
152
- if term1 == term2: dep_path = []
153
- else:
154
- paths1 = self.paths_for_termid[term1]
155
- paths2 = self.paths_for_termid[term2]
156
-
157
- ##Check if term2 is on paths1
158
- hits = [] ## list of (common_id,idx1,idx2,numpath1,numpath2)
159
- for num1, p1 in enumerate(paths1):
160
-
161
- ids1 = [ my_id for my_func, my_id in p1]
162
- if term2 in ids1:
163
- idx1=ids1.index(term2)
164
- hits.append((term2,idx1+0,idx1,0,num1,None))
165
-
166
- for num2,p2 in enumerate(paths2):
167
- ids2 = [ my_id for my_func, my_id in p2]
168
- if term1 in p2:
169
- idx2=ids2.index(term1)
170
- hits.append((term1,0+idx2,0,idx2,None,num2))
171
-
172
- #Pair by pair
173
- for num1, p1 in enumerate(paths1):
174
- #print 'Path1',term1, p1
175
- ids1 = [ my_id for my_func, my_id in p1]
176
- for num2, p2 in enumerate(paths2):
177
- #print '\t',term2,p2
178
- ids2 = [ my_id for my_func, my_id in p2]
179
- common_ids = set(ids1) & set(ids2)
180
- for common_id in common_ids:
181
- idx1 = ids1.index(common_id)
182
- idx2 = ids2.index(common_id)
183
- hits.append((common_id,idx1+idx2,idx1,idx2,num1,num2))
184
-
185
-
186
- if len(hits) != 0:
187
- dep_path = []
188
- hits.sort(key=itemgetter(1))
189
- best_hit = hits[0]
190
- common_id, _, idx1, idx2, numpath1, numpath2 = best_hit
191
-
192
- if numpath2 is None: #term2 is in one of the paths of t1
193
- path1 = paths1[numpath1]
194
- my_rels1 = path1[:idx1+1]
195
- ##complete_path = ''
196
- ##complete_path_ids = ''
197
- for func,node in my_rels1:
198
- dep_path.append(func)
199
- ##complete_path+=func+'#'
200
- ##complete_path_ids+=node+'#'
201
-
202
- #===========================================================
203
- # print 'CASE1',best_hit
204
- # print complete_path
205
- # print complete_path_ids
206
- #===========================================================
207
- elif numpath1 is None: #term1 is in one of the paths of t2
208
- path2 = paths2[numpath2]
209
- my_rels2 = path2[:idx2+1]
210
- ##complete_path = ''
211
- ##complete_path_ids = ''
212
- for func,node in my_rels2:
213
- dep_path.append(func)
214
- #complete_path+=func+'#'
215
- #complete_path_ids+=node+'#'
216
-
217
- #===========================================================
218
- # print 'CASE2',best_hit
219
- # print complete_path
220
- # print complete_path_ids
221
- #===========================================================
222
- else: #There is a common node linking both
223
- path1 = paths1[numpath1]
224
- my_rels1 = path1[:idx1+1]
225
-
226
- path2 = paths2[numpath2]
227
- my_rels2 = path2[:idx2+1]
228
-
229
- ##complete_path = ''
230
- #complete_path_ids = ''
231
- for func,node in my_rels1:
232
- dep_path.append(func)
233
- ##complete_path+=func+'#'
234
- #complete_path_ids+=func+'->'+self.naf.get_term(node).get_lemma()+'->'
235
-
236
- for func,node in my_rels2[-1::-1]:
237
- dep_path.append(func)
238
- ##complete_path+=func+'#'
239
- #complete_path_ids+=func+'->'+self.naf.get_term(node).get_lemma()+'->'
240
- #===========================================================
241
- #
242
- # print complete_path
243
- # print complete_path_ids
244
- # print path2
245
- # print my_rels1
246
- # print my_rels2
247
- # print 'CASE3',best_hit
248
- #===========================================================
249
- return dep_path
250
-
251
- ## Get the shortest dependency path between 2 sets of spans
252
- def get_shortest_path_spans(self,span1,span2):
253
- shortest_path = None
254
-
255
- for term1 in span1:
256
- for term2 in span2:
257
- this_path = self.get_shortest_path(term1, term2)
258
- if shortest_path is None or (this_path is not None and len(this_path)<len(shortest_path)):
259
- shortest_path = this_path
260
- return shortest_path
261
-
262
- # Get the dependency path to the sentence root for a term id
263
- def get_path_to_root(self,termid):
264
- # Get the sentence for the term
265
- root = None
266
- sentence = self.sentence_for_termid.get(termid)
267
-
268
- if sentence is None: #try with the top node
269
- top_node = self.top_relation_for_term.get(termid)
270
- if top_node is not None:
271
- root = top_node[1]
272
- else:
273
- return None
274
- else:
275
- if sentence in self.root_for_sentence:
276
- root = self.root_for_sentence[sentence]
277
- else:
278
- ##There is no root for this sentence
279
- return None
280
- # In this point top_node should be properly set
281
- path = self.get_shortest_path(termid, root)
282
- return path
283
-
284
- # Get the shortest dependency path to the sentence root for a span of ids
285
- # extractor.get_shortest_path_to_root_span(['t444','t445','t446'])
286
- def get_shortest_path_to_root_span(self,span):
287
- shortest_path = None
288
- for termid in span:
289
- this_path = self.get_path_to_root(termid)
290
- ## In case of , or . or whatever, the path to the root usually is None, there are no dependencies...
291
- if shortest_path is None or (this_path is not None and len(this_path) < len(shortest_path)):
292
- shortest_path = this_path
293
- return shortest_path
294
-
295
-
296
-
297
-
298
-
299
-
300
-
@@ -1,71 +0,0 @@
1
- from lxml import etree
2
- from lxml.objectify import dump
3
- from references_data import *
4
-
5
-
6
-
7
- class Cproperty:
8
- def __init__(self,node=None,type='NAF'):
9
- self.type = type
10
- if node is None:
11
- self.node = etree.Element('property')
12
- else:
13
- self.node = node
14
-
15
- def get_id(self):
16
- if self.type == 'KAF':
17
- return self.node.get('pid')
18
- elif self.type == 'NAF':
19
- return self.node.get('id')
20
-
21
- def get_type(self):
22
- return self.node.get('lemma')
23
-
24
- def get_references(self):
25
- for ref_node in self.node.findall('references'):
26
- yield Creferences(ref_node)
27
-
28
-
29
-
30
- class Cproperties:
31
- def __init__(self,node=None,type='NAF'):
32
- self.type=type
33
- if node is None:
34
- self.node = etree.Element('properties')
35
- else:
36
- self.node = node
37
-
38
- def __iter__(self):
39
- for prop_node in self.node.findall('property'):
40
- yield Cproperty(prop_node,self.type)
41
-
42
- class Cfeatures:
43
- def __init__(self,node=None,type='NAF'):
44
- self.type = type
45
- if node is None:
46
- self.node = etree.Element('features')
47
- else:
48
- self.node = node
49
-
50
- def to_kaf(self):
51
- if self.type == 'NAF':
52
- ##convert all the properties
53
- for node in self.node.findall('properties/property'):
54
- node.set('pid',node.get('id'))
55
- del node.attrib['id']
56
-
57
- def to_naf(self):
58
- if self.type == 'KAF':
59
- ##convert all the properties
60
- for node in self.node.findall('properties/property'):
61
- node.set('id',node.get('pid'))
62
- del node.attrib['pid']
63
-
64
-
65
- def get_properties(self):
66
- node_prop = self.node.find('properties')
67
- if node_prop is not None:
68
- obj_properties = Cproperties(node_prop,self.type)
69
- for prop in obj_properties:
70
- yield prop
71
-
@@ -1,127 +0,0 @@
1
- # Modified to KAF / NAF
2
-
3
- from lxml import etree
4
- import time
5
-
6
- class CfileDesc:
7
- def __init__(self,node=None):
8
- self.type = 'KAF/NAF'
9
- if node is None:
10
- self.node = etree.Element('fileDesc')
11
- else:
12
- self.node = node
13
-
14
- #self.title='' #self.author='' #self.creationtime='' #self.filename='' #self.filetype='' #self.pages=''
15
-
16
-
17
- class Cpublic:
18
- def __init__(self,node=None):
19
- self.type = 'KAF/NAF'
20
- if node is None:
21
- self.node = etree.Element('public')
22
- else:
23
- self.node = node
24
-
25
- #self.publicId = ''
26
- #slf.uri = ''
27
-
28
-
29
- class Clp:
30
- def __init__(self,node=None,name="",version="",timestamp=None):
31
- self.type = 'KAF/NAF'
32
- if node is None:
33
- self.node = etree.Element('lp')
34
- self.set_name(name)
35
- self.set_version(name)
36
- self.set_timestamp(timestamp)
37
- else:
38
- self.node = node
39
-
40
- def set_name(self,name):
41
- self.node.set('name',name)
42
-
43
- def set_version(self,version):
44
- self.node.set('version',version)
45
-
46
- def set_timestamp(self,timestamp=None):
47
- if timestamp is None:
48
- import time
49
- timestamp = time.strftime('%Y-%m-%dT%H:%M:%S%Z')
50
- self.node.set('timestamp',timestamp)
51
-
52
-
53
- def get_node(self):
54
- return self.node
55
-
56
-
57
- class ClinguisticProcessors:
58
- def __init__(self,node=None):
59
- self.type = 'KAF/NAF'
60
- if node is None:
61
- self.node = etree.Element('linguisticProcessors')
62
- else:
63
- self.node = node
64
-
65
- def get_layer(self):
66
- return self.node.get('layer')
67
-
68
- def set_layer(self,layer):
69
- self.node.set('layer',layer)
70
-
71
- def add_linguistic_processor(self,my_lp):
72
- self.node.append(my_lp.get_node())
73
-
74
- def get_node(self):
75
- return self.node
76
-
77
-
78
- class CHeader:
79
- def __init__(self,node=None,type='NAF'):
80
- self.type = type
81
- if node is None:
82
- if self.type == 'NAF':
83
- self.node = etree.Element('nafHeader')
84
- elif self.type == 'KAF':
85
- self.node = etree.Element('kafHeader')
86
- else:
87
- self.node = node
88
-
89
- def to_kaf(self):
90
- if self.type == 'NAF':
91
- self.node.tag = 'kafHeader'
92
- self.type = 'KAF'
93
-
94
- def to_naf(self):
95
- if self.type == 'KAF':
96
- self.node.tag = 'nafHeader'
97
- self.type = 'NAF'
98
-
99
- def add_linguistic_processors(self,linpro):
100
- self.node.append(linpro.get_node())
101
-
102
- def remove_lp(self,layer):
103
- for this_node in self.node.findall('linguisticProcessors'):
104
- if this_node.get('layer') == layer:
105
- self.node.remove(this_node)
106
- break
107
-
108
-
109
- def add_linguistic_processor(self, layer ,my_lp):
110
- ## Locate the linguisticProcessor element for taht layer
111
- found_lp_obj = None
112
- for this_lp in self.node.findall('linguisticProcessors'):
113
- lp_obj = ClinguisticProcessors(this_lp)
114
- if lp_obj.get_layer() == layer:
115
- found_lp_obj = lp_obj
116
- break
117
-
118
- if found_lp_obj is None: #Not found
119
- found_lp_obj = ClinguisticProcessors()
120
- found_lp_obj.set_layer(layer)
121
- self.add_linguistic_processors(found_lp_obj)
122
-
123
- found_lp_obj.add_linguistic_processor(my_lp)
124
-
125
-
126
-
127
-
@@ -1,200 +0,0 @@
1
- #Modified for KAF NAF ok
2
-
3
- from lxml import etree
4
- from lxml.objectify import dump
5
- from span_data import *
6
-
7
-
8
-
9
- class Cholder:
10
- def __init__(self,node=None):
11
- self.type = 'NAF/KAF'
12
- if node is None:
13
- self.node = etree.Element('opinion_holder')
14
- else:
15
- self.node = node
16
-
17
- def set_span(self,my_span):
18
- self.node.append(my_span.get_node())
19
-
20
- def set_comment(self,c):
21
- c = c.replace('--','- -')
22
- self.node.insert(0,etree.Comment(c) )
23
-
24
- def get_span(self):
25
- span_obj = self.node.find('span')
26
- if span_obj is not None:
27
- return Cspan(span_obj)
28
- return None
29
-
30
- def __str__(self):
31
- return dump(self.node)
32
-
33
- def get_node(self):
34
- return self.node
35
-
36
-
37
- class Ctarget:
38
- def __init__(self,node=None):
39
- self.type = 'NAF/KAF'
40
- if node is None:
41
- self.node = etree.Element('opinion_target')
42
- else:
43
- self.node = node
44
-
45
- def set_comment(self,c):
46
- c = c.replace('--','- -')
47
- self.node.insert(0,etree.Comment(c) )
48
-
49
- def get_comment(self):
50
- return self.node_comment
51
-
52
- def set_span(self,my_span):
53
- self.node.append(my_span.get_node())
54
-
55
- def get_span(self):
56
- span_obj = self.node.find('span')
57
- if span_obj is not None:
58
- return Cspan(span_obj)
59
- return None
60
-
61
- def __str__(self):
62
- return dump(self.node)
63
-
64
- def get_node(self):
65
- return self.node
66
-
67
-
68
- class Cexpression:
69
- def __init__(self,node=None):
70
- self.type = 'NAF/KAF'
71
- if node is None:
72
- self.node = etree.Element('opinion_expression')
73
- else:
74
- self.node = node
75
-
76
- def set_comment(self,c):
77
- c = c.replace('--','- -')
78
- self.node.insert(0,etree.Comment(c))
79
-
80
- def set_polarity(self,pol):
81
- self.node.set('polarity',pol)
82
-
83
- def get_polarity(self):
84
- return self.node.get('polarity')
85
-
86
- def set_strength(self,st):
87
- self.node.set('strength',st)
88
-
89
- def get_strength(self):
90
- return self.node.get('strength')
91
-
92
- def set_span(self,my_span):
93
- self.node.append(my_span.get_node())
94
-
95
- def get_span(self):
96
- span_obj = self.node.find('span')
97
- if span_obj is not None:
98
- return Cspan(span_obj)
99
- return None
100
-
101
- def __str__(self):
102
- return dump(self.node)
103
-
104
- def get_node(self):
105
- return self.node
106
-
107
- class Copinion:
108
- def __init__(self,node=None,type='NAF'):
109
- self.type = type
110
- if node is None:
111
- self.node = etree.Element('opinion')
112
- else:
113
- self.node = node
114
-
115
- def set_id(self,my_id):
116
- if self.type == 'NAF':
117
- self.node.set('id',my_id)
118
- elif self.type == 'KAF':
119
- self.node.set('oid',my_id)
120
-
121
- def get_id(self):
122
- if self.type == 'NAF':
123
- self.node.het('id')
124
- elif self.type == 'KAF':
125
- self.node.get('oid')
126
-
127
- def set_holder(self,hol):
128
- self.node.append(hol.get_node())
129
-
130
- def get_holder(self):
131
- node_hol = self.node.find('opinion_holder')
132
- if node_hol is not None:
133
- return Cholder(node_hol)
134
- else:
135
- return None
136
-
137
- def set_target(self,tar):
138
- self.node.append(tar.get_node())
139
-
140
- def get_target(self):
141
- node_target = self.node.find('opinion_target')
142
- if node_target is not None:
143
- return Ctarget(node_target)
144
- else:
145
- return None
146
-
147
- def set_expression(self,exp):
148
- self.node.append(exp.get_node())
149
-
150
- def get_expression(self):
151
- node_exp = self.node.find('opinion_expression')
152
- if node_exp is not None:
153
- return Cexpression(node_exp)
154
- else:
155
- return None
156
-
157
- def __str__(self):
158
- return dump(self.node)
159
-
160
- def get_node(self):
161
- return self.node
162
-
163
-
164
-
165
-
166
-
167
- class Copinions:
168
- def __init__(self,node=None,type='NAF'):
169
- self.type = type
170
- if node is None:
171
- self.node = etree.Element('opinions')
172
- else:
173
- self.node = node
174
-
175
- def __get_opinion_nodes(self):
176
- for node in self.node.findall('opinion'):
177
- yield node
178
-
179
- def get_opinions(self):
180
- for node in self.__get_opinion_nodes():
181
- yield Copinion(node,self.type)
182
-
183
- def to_kaf(self):
184
- if self.type == 'NAF':
185
- for node in self.__get_opinion_nodes():
186
- node.set('oid',node.get('id'))
187
- del node.attrib['id']
188
-
189
- def to_naf(self):
190
- if self.type == 'KAF':
191
- for node in self.__get_opinion_nodes():
192
- node.set('id',node.get('oid'))
193
- del node.attrib['oid']
194
-
195
-
196
- def add_opinion(self,opi_obj):
197
- self.node.append(opi_obj.get_node())
198
-
199
- def get_node(self):
200
- return self.node