7 from config.mdf
import pd_grammaticalNumber, pd_person, pd_anymacy, pd_clusivity
8 from utils.error_handling
import OutputError
9 from utils.io
import ENCODING, EOL
15 def lmf_to_doc(lexicon, document, items=lambda lexical_entry: lexical_entry.get_lexeme(), sort_order=
None, paradigms=
False, reverse=
False):
16 """! @brief Function to convert LMF lexical entry information to be written into docx commands.
17 @param lexicon The Lexicon LMF instance to display.
18 @param document The docx document to fill in.
19 @param items Lambda function giving the item to sort. Default value is 'lambda lexical_entry: lexical_entry.get_lexeme()', which means that the items to sort are lexemes.
20 @param sort_order Python list. Default value is 'None', which means that the document output is alphabetically ordered.
21 @param paradigms A boolean value to introduce paradigms in document or not.
22 @param reverse A boolean value to set if a reverse dictionary is wanted.
26 previous_character =
''
27 current_character =
''
28 for lexical_entry
in lexicon.get_lexical_entries():
29 if type(sort_order)
is type(dict())
or type(sort_order)
is type(
lambda l:l):
32 current_character = items(lexical_entry)[0]
33 if sort_order[items(lexical_entry)[0:1]]:
34 current_character = items(lexical_entry)[0:1]
35 if sort_order[items(lexical_entry)[0:2]]:
36 current_character = items(lexical_entry)[0:2]
44 if ( (type(sort_order)
is not type(dict()))
and ((previous_character ==
'')
or (sort_order(current_character) != sort_order(previous_character))) ) \
45 or ( (type(sort_order)
is type(dict()))
and (int(sort_order[current_character]) != int(sort_order[previous_character])) ):
47 if previous_character !=
'':
48 document.add_page_break()
49 previous_character = current_character
51 if type(sort_order)
is not type(dict()):
52 title +=
' ' + current_character
54 for key,value
in sorted(sort_order.items(), key=
lambda x: x[1]):
55 if int(value) == int(sort_order[current_character]):
57 document.add_heading(
"-" + title +
" -".decode(ENCODING), level=level+1)
59 print Warning(
"Cannot sort item %s" % items(lexical_entry).encode(ENCODING))
64 raise OutputError(object,
"Sort order must be a dictionary.")
67 lexeme = lexical_entry.get_lexeme()
68 if lexical_entry.get_homonymNumber()
is not None:
70 lexeme +=
" (" + str(lexical_entry.get_homonymNumber()) +
")"
73 for morphology
in lexical_entry.get_morphologies():
74 morph +=
" " + morphology
77 for sense
in lexical_entry.get_senses():
78 for usage_note
in sense.find_usage_notes(language=config.xml.vernacular):
79 dialect +=
" [" + usage_note +
"]"
80 p = document.add_paragraph()
81 p.add_run(lexeme).bold =
True
83 p.add_run(
" Morph. :").italic =
True
88 for repr
in lexical_entry.get_form_representations():
89 if repr.get_geographicalVariant()
is not None:
95 p.add_run(repr.get_geographicalVariant()).bold =
True
96 if repr.get_dialect()
is not None:
97 p.add_run(
" [" + repr.get_dialect() +
"]")
99 if lexical_entry.get_partOfSpeech()
is not None:
101 p.add_run(lexical_entry.get_partOfSpeech()).italic =
True
104 if len(lexical_entry.find_notes(type=
"grammar")) != 0:
105 p = document.add_paragraph()
107 p.add_run(
"[Note grammaticale :")
108 for note
in lexical_entry.find_notes(type=
"grammar", language=config.xml.regional):
110 p.add_run(note).bold =
True
112 for note
in lexical_entry.find_notes(type=
"grammar", language=config.xml.French):
115 except AttributeError:
116 for note
in lexical_entry.find_notes(type=
"grammar", language=config.xml.English):
119 for note
in lexical_entry.find_notes(type=
"grammar", language=config.xml.vernacular):
122 for note
in lexical_entry.find_notes(type=
"grammar", language=config.xml.national):
126 for note
in lexical_entry.find_notes(type=
"grammar"):
128 p.add_run(note).italic =
True
130 for sense
in lexical_entry.get_senses():
133 if sense.get_senseNumber()
is not None:
134 p = document.add_paragraph()
135 p.add_run(
" " + sense.get_senseNumber() +
")")
136 for gloss
in sense.find_glosses(language=config.xml.vernacular):
137 glosses +=
" " + gloss +
"."
139 glosses = glosses.rstrip(
".")
141 for gloss
in sense.find_glosses(language=config.xml.French):
142 glosses +=
" " + gloss +
"."
143 except AttributeError:
144 for gloss
in sense.find_glosses(language=config.xml.English):
145 glosses +=
" " + gloss +
"."
146 glosses = glosses.rstrip(
".")
147 if glosses !=
"" and glosses[-1] !=
'.' and glosses[-1] !=
'!' and glosses[-1] !=
'?':
151 if lexical_entry.get_scientific_name()
is not None:
153 p.add_run(lexical_entry.get_scientific_name()).italic =
True
156 for context
in sense.get_contexts():
157 p = document.add_paragraph()
159 vernacular_forms = context.find_written_forms(language=config.xml.vernacular)
160 for example
in vernacular_forms:
162 p.add_run(example.split(
'[')[0]).bold =
True
163 for element
in example.split(
'[')[1:]:
164 p.add_run(
'[' + element)
166 fra_forms = context.find_written_forms(language=config.xml.French)
167 if len(vernacular_forms) != 0
and len(fra_forms) != 0:
169 for example
in fra_forms:
171 if len(fra_forms) != 0
and fra_forms[0][-1] !=
'!' and fra_forms[0][-1] !=
'?':
173 except AttributeError:
176 if len(lexical_entry.get_related_forms(
"simple link")) != 0:
177 p = document.add_paragraph()
178 p.add_run(
" Voir :").italic =
True
179 for related_form
in lexical_entry.get_related_forms(
"simple link"):
180 if related_form.get_lexical_entry()
is not None:
184 p.add_run(related_form.get_lexeme().split(
'[')[0]).bold =
True
185 for element
in related_form.get_lexeme().split(
'[')[1:]:
186 p.add_run(
'[' + element)
188 for written_form
in related_form.find_written_forms(language=config.xml.French):
189 p.add_run(
" " + written_form)
190 except AttributeError:
191 for written_form
in related_form.find_written_forms(language=config.xml.English):
192 p.add_run(
" " + written_form)
195 if len(lexical_entry.find_notes(type=
"general")) != 0:
196 p = document.add_paragraph()
199 for note
in lexical_entry.find_notes(type=
"general"):
204 if len(lexical_entry.find_notes(type=
"phonology")) != 0:
205 p = document.add_paragraph()
207 p.add_run(
"[Note phonologique :")
208 for note
in lexical_entry.find_notes(type=
"phonology"):
213 if len(lexical_entry.find_notes(type=
"anthropology")) != 0:
214 p = document.add_paragraph()
216 p.add_run(
"[Note anthropologique :")
217 for note
in lexical_entry.find_notes(type=
"anthropology"):
222 if len(lexical_entry.get_word_forms()) != 0:
224 document.add_paragraph(
'Paradigms', style=
'IntenseQuote')
226 table = document.add_table(rows=1, cols=2)
227 hdr_cells = table.rows[0].cells
228 hdr_cells[0].text =
'Paradigm'
229 hdr_cells[1].text =
'Form'
230 for item
in lexical_entry.find_paradigms(grammatical_number=pd_grammaticalNumber[
"sg"]):
231 row_cells = table.add_row().cells
232 row_cells[0].text =
"sg"
233 row_cells[1].text = item
234 for item
in lexical_entry.find_paradigms(grammatical_number=pd_grammaticalNumber[
"pl"]):
235 row_cells = table.add_row().cells
236 row_cells[0].text =
"pl"
237 row_cells[1].text = item
238 for item
in lexical_entry.find_paradigms(person=pd_person[1], grammatical_number=pd_grammaticalNumber[
's']):
239 row_cells = table.add_row().cells
240 row_cells[0].text =
"1s"
241 row_cells[1].text = item
242 for item
in lexical_entry.find_paradigms(person=pd_person[2], grammatical_number=pd_grammaticalNumber[
's']):
243 row_cells = table.add_row().cells
244 row_cells[0].text =
"2s"
245 row_cells[1].text = item
246 for item
in lexical_entry.find_paradigms(person=pd_person[3], grammatical_number=pd_grammaticalNumber[
's']):
247 row_cells = table.add_row().cells
248 row_cells[0].text =
"3s"
249 row_cells[1].text = item
250 for item
in lexical_entry.find_paradigms(anymacy=pd_anymacy[4], grammatical_number=pd_grammaticalNumber[
's']):
251 row_cells = table.add_row().cells
252 row_cells[0].text =
"4s"
253 row_cells[1].text = item
254 for item
in lexical_entry.find_paradigms(person=pd_person[1], grammatical_number=pd_grammaticalNumber[
'd']):
255 row_cells = table.add_row().cells
256 row_cells[0].text =
"1d"
257 row_cells[1].text = item
258 for item
in lexical_entry.find_paradigms(person=pd_person[2], grammatical_number=pd_grammaticalNumber[
'd']):
259 row_cells = table.add_row().cells
260 row_cells[0].text =
"2d"
261 row_cells[1].text = item
262 for item
in lexical_entry.find_paradigms(person=pd_person[3], grammatical_number=pd_grammaticalNumber[
'd']):
263 row_cells = table.add_row().cells
264 row_cells[0].text =
"3d"
265 row_cells[1].text = item
266 for item
in lexical_entry.find_paradigms(anymacy=pd_anymacy[4], grammatical_number=pd_grammaticalNumber[
'd']):
267 row_cells = table.add_row().cells
268 row_cells[0].text =
"4d"
269 row_cells[1].text = item
270 for item
in lexical_entry.find_paradigms(person=pd_person[1], grammatical_number=pd_grammaticalNumber[
'p']):
271 row_cells = table.add_row().cells
272 row_cells[0].text =
"1p"
273 row_cells[1].text = item
274 for item
in lexical_entry.find_paradigms(person=pd_person[1], grammatical_number=pd_grammaticalNumber[
'p'], clusivity=pd_clusivity[
'e']):
275 row_cells = table.add_row().cells
276 row_cells[0].text =
"1e"
277 row_cells[1].text = item
278 for item
in lexical_entry.find_paradigms(person=pd_person[1], grammatical_number=pd_grammaticalNumber[
'p'], clusivity=pd_clusivity[
'i']):
279 row_cells = table.add_row().cells
280 row_cells[0].text =
"1i"
281 row_cells[1].text = item
282 for item
in lexical_entry.find_paradigms(person=pd_person[2], grammatical_number=pd_grammaticalNumber[
'p']):
283 row_cells = table.add_row().cells
284 row_cells[0].text =
"2p"
285 row_cells[1].text = item
286 for item
in lexical_entry.find_paradigms(person=pd_person[3], grammatical_number=pd_grammaticalNumber[
'p']):
287 row_cells = table.add_row().cells
288 row_cells[0].text =
"3p"
289 row_cells[1].text = item
290 for item
in lexical_entry.find_paradigms(anymacy=pd_anymacy[4], grammatical_number=pd_grammaticalNumber[
'p']):
291 row_cells = table.add_row().cells
292 row_cells[0].text =
"4p"
293 row_cells[1].text = item
294 if len(lexical_entry.get_word_forms()) != 0:
295 p = document.add_paragraph()
297 for related_form
in lexical_entry.get_related_forms(
"subentry"):
298 if related_form.get_lexical_entry()
is not None:
299 p = document.add_paragraph()
301 p.add_run(related_form.get_lexeme().split(
'[')[0]).bold =
True
302 for element
in related_form.get_lexeme().split(
'[')[1:]:
303 p.add_run(
'[' + element.replace(
"GO(s)",
"GOs").replace(
"GO(n)",
"GOn").replace(
"WEM",
"WE"))
304 for sense
in related_form.get_lexical_entry().get_senses():
306 for gloss
in sense.find_glosses(language=config.xml.vernacular):
307 glosses +=
" " + gloss +
"."
309 glosses = glosses.rstrip(
".")
311 for gloss
in sense.find_glosses(language=config.xml.French):
312 glosses +=
" " + gloss +
"."
313 except AttributeError:
314 for gloss
in sense.find_glosses(language=config.xml.English):
315 glosses +=
" " + gloss +
"."
317 glosses = glosses.rstrip(
".")
323 for sense
in lexical_entry.get_senses():
324 for gloss
in sense.find_glosses(language=config.xml.English):
327 p = document.add_paragraph()
332 if c ==
'(' or c ==
'[':
339 p.add_run(c).bold = bold
340 elif c ==
')' or c ==
']':
342 p.add_run(c).bold = bold
349 p.add_run(c).bold = bold
350 if gloss[-1] !=
'?' and gloss[-1] !=
'!' and gloss[-1] !=
'.':
356 if lexical_entry.get_scientific_name()
is not None:
357 p.add_run(lexical_entry.get_scientific_name()).italic =
True
360 p.add_run(lexical_entry.get_lexeme())
361 if lexical_entry.get_lexeme()[-1] !=
'?' and lexical_entry.get_lexeme()[-1] !=
'!' and lexical_entry.get_lexeme()[-1] !=
'.':
def lmf_to_doc
Function giving order in which information must be written in docx and mapping between LMF representa...