Python LMF library
 All Classes Namespaces Files Functions Variables
definition.py
Go to the documentation of this file.
1 #! /usr/bin/env python
2 
3 """! @package core
4 """
5 
6 from utils.attr import check_attr_type
7 from core.statement import Statement
8 
9 class Definition():
10  """! "Definition is a class representing a narrative description of a sense. It is provided to help human users understand the meaning of a lexical entry. A Sense instance can have zero to many definitions. Each Definition instance may be associated with zero to many Text Representation instances in order to manage the text defintion in more than one language or script. In addition, the narrative description can be expressed in a different language or script than the one in the Lexical Entry instance." (LMF)
11  """
12  def __init__(self):
13  """! @brief Constructor.
14  Definition instances are owned by Sense.
15  @return A Definition instance.
16  """
17  self.language = None
18  self.definition = None
19  self.gloss = None
20  self.literally = None
21  ## TextRepresentation instances are owned by Definition
22  # There is zero to many TextRepresentation instances per Definition
24  ## Statement instances are owned by Definition
25  # There is zero to many Statement instances per Definition
26  self.statement = []
27 
28  def __del__(self):
29  """! @brief Destructor.
30  Release TextRepresentation and Statement instances.
31  """
32  for text_representation in self.text_representation:
33  del text_representation
34  del self.text_representation[:]
35  for statement in self.statement:
36  del statement
37  del self.statement[:]
38 
39  def set_language(self, language):
40  """! @brief Set language used for definition and gloss.
41  @param language Language used for definition and gloss.
42  @return Definition instance.
43  """
44  error_msg = "Language value '%s' is not allowed" % language
45  # Check value
46  check_attr_type(language, [str, unicode], error_msg)
47  self.language = language
48  return self
49 
50  def get_language(self):
51  """! @brief Get language used for definition and gloss.
52  @return Definition attribute 'language'.
53  """
54  return self.language
55 
56  def set_definition(self, definition, language=None):
57  """! @brief Set definition.
58  @param definition Definition.
59  @param language Language used for the definition.
60  @return Definition instance.
61  """
62  self.definition = definition
63  if language is not None:
64  self.set_language(language)
65  return self
66 
67  def get_definition(self, language=None):
68  """! @brief Get definition.
69  @param language If this argument is given, get definition only if written in this language.
70  @return The filtered Definition attribute 'definition'.
71  """
72  if language is None:
73  return self.definition
74  if self.language == language:
75  return self.definition
76 
77  def set_gloss(self, gloss, language=None):
78  """! @brief Set gloss.
79  @param gloss Gloss.
80  @param language Language used for the gloss.
81  @return Definition instance.
82  """
83  self.gloss = gloss
84  if language is not None:
85  self.set_language(language)
86  return self
87 
88  def get_gloss(self, language=None):
89  """! @brief Get gloss.
90  @param language If this argument is given, get gloss only if written in this language.
91  @return The filtered Definition attribute 'gloss'.
92  """
93  if language is None:
94  return self.gloss
95  if self.language == language:
96  return self.gloss
97 
98  def create_statement(self):
99  """! @brief Create a Statement instance.
100  @return Statement instance.
101  """
102  return Statement()
103 
104  def add_statement(self, statement):
105  """! @brief Add a Statement instance to this Definition instance.
106  @param statemement The Statement instance to add to the Definition instance.
107  @return Definition instance.
108  """
109  self.statement.append(statement)
110  return self
111 
112  def get_statements(self):
113  """! @brief Get all Statement instances maintained by this Definition instance.
114  @return A Python list of Statement instances.
115  """
116  return self.statement
117 
119  """! @brief Get the previously registered statement.
120  @return The last element of Definition attribute 'statement'.
121  """
122  if len(self.get_statements()) >= 1:
123  return self.get_statements()[0]
124 
125  def set_note(self, note, type=None, language=None):
126  """! @brief Set note, note type and language.
127  These attributes are owned by Statement.
128  @param note Note to set.
129  @param type Type of the note.
130  @param language Language used for the note.
131  @return Definition instance.
132  """
133  instance = None
134  if language is None:
135  # Find if there is a Statement instance without note
136  for statement in self.get_statements():
137  if statement.get_note() is None:
138  instance = statement
139  break
140  else:
141  # Find if there is a Statement instance with this language without note
142  for statement in self.get_statements():
143  if statement.get_language() == language and statement.get_note() is None:
144  # Found the Statement instance to set
145  instance = statement
146  break
147  if instance is None:
148  # Set first Statement instance that has no note nor language
149  for statement in self.get_statements():
150  if statement.get_language() is None and statement.get_note() is None:
151  # Found the Statement instance to set
152  instance = statement
153  break
154  if instance is None:
155  # Create a Statement instance
156  instance = self.create_statement()
157  self.add_statement(instance)
158  instance.set_note(note, type, language)
159  return self
160 
161  def find_notes(self, type, language=None):
162  """! @brief Find notes.
163  This attribute is owned by Statement.
164  @param type The type to consider to retrieve the note.
165  @param language If this argument is given, find note only if written in this language.
166  @return A Python list of found Statement attributes 'note'.
167  """
168  found_notes = []
169  for statement in self.get_statements():
170  if statement.get_note(type, language) is not None:
171  found_notes.append(statement.get_note(type, language))
172  return found_notes
173 
174  def set_usage_note(self, usage_note, language=None):
175  """! @brief Set usage note and language.
176  These attributes are owned by Statement.
177  @param usage_note Usage note to set.
178  @param language Language used for the usage note.
179  @return Definition instance.
180  """
181  instance = None
182  # Find if there is a Statement instance with this language without usage note
183  for statement in self.get_statements():
184  if statement.get_language() == language and statement.get_usageNote() is None:
185  # Found the Statement instance to set
186  instance = statement
187  break
188  if instance is None:
189  # Set first Statement instance that has no usage note nor language
190  for statement in self.get_statements():
191  if statement.get_language() is None and statement.get_usageNote() is None:
192  # Found the Statement instance to set
193  instance = statement
194  break
195  if instance is None:
196  # Create a Statement instance
197  instance = self.create_statement()
198  self.add_statement(instance)
199  instance.set_usageNote(usage_note, language)
200  return self
201 
202  def find_usage_notes(self, language):
203  """! @brief Find usage notes.
204  This attribute is owned by Statement.
205  @param language The language to consider to retrieve the usage note.
206  @return A Python list of found Statement attributes 'usageNote'.
207  """
208  found_notes = []
209  for statement in self.get_statements():
210  if statement.get_usageNote(language) is not None:
211  found_notes.append(statement.get_usageNote(language))
212  return found_notes
213 
214  def set_encyclopedic_information(self, encyclopedic_information, language=None):
215  """! @brief Set encyclopedic information and language.
216  These attributes are owned by Statement.
217  @param encyclopedic_information Encyclopedic information to set.
218  @param language Language used for the encyclopedic information.
219  @return Definition instance.
220  """
221  instance = None
222  # Find if there is a Statement instance with this language without encyclopedic information
223  for statement in self.get_statements():
224  if statement.get_language() == language and statement.get_encyclopedicInformation() is None:
225  # Found the Statement instance to set
226  instance = statement
227  break
228  if instance is None:
229  # Set first Statement instance that has no encyclopedic information nor language
230  for statement in self.get_statements():
231  if statement.get_language() is None and statement.get_encyclopedicInformation() is None:
232  # Found the Statement instance to set
233  instance = statement
234  break
235  if instance is None:
236  # Create a Statement instance
237  instance = self.create_statement()
238  self.add_statement(instance)
239  instance.set_encyclopedicInformation(encyclopedic_information, language)
240  return self
241 
242  def find_encyclopedic_informations(self, language):
243  """! @brief Find encyclopedic informations.
244  This attribute is owned by Statement.
245  @param language The language to consider to retrieve the encyclopedic information.
246  @return A Python list of found Statement attributes 'encyclopedicInformation'.
247  """
248  found_informations = []
249  for statement in self.get_statements():
250  if statement.get_encyclopedicInformation(language) is not None:
251  found_informations.append(statement.get_encyclopedicInformation(language))
252  return found_informations
253 
254  def set_restriction(self, restriction, language=None):
255  """! @brief Set restriction and language.
256  These attributes are owned by Statement.
257  @param restriction Restriction to set.
258  @param language Language used for the restriction.
259  @return Definition instance.
260  """
261  instance = None
262  # Find if there is a Statement instance with this language without restriction
263  for statement in self.get_statements():
264  if statement.get_language() == language and statement.get_restriction() is None:
265  # Found the Statement instance to set
266  instance = statement
267  break
268  if instance is None:
269  # Set first Statement instance that has no restriction nor language
270  for statement in self.get_statements():
271  if statement.get_language() is None and statement.get_restriction() is None:
272  # Found the Statement instance to set
273  instance = statement
274  break
275  if instance is None:
276  # Create a Statement instance
277  instance = self.create_statement()
278  self.add_statement(instance)
279  instance.set_restriction(restriction, language)
280  return self
281 
282  def find_restrictions(self, language):
283  """! @brief Find restrictions.
284  This attribute is owned by Statement.
285  @param language The language to consider to retrieve the restriction.
286  @return A Python list of found Statement attributes 'restriction'.
287  """
288  found_restrictions = []
289  for statement in self.get_statements():
290  if statement.get_restriction(language) is not None:
291  found_restrictions.append(statement.get_restriction(language))
292  return found_restrictions
293 
294  def set_borrowed_word(self, borrowed_word):
295  """! @brief Set source language (in English).
296  Attribute 'borrowedWord' is owned by the first Statement.
297  @param borrowed_word Source language.
298  @return Definition instance.
299  """
300  # Get the first Statement instance if any
301  statement = self.get_first_statement()
302  # If there is no Statement instance, create and add one
303  if statement is None:
304  statement = self.create_statement()
305  self.add_statement(statement)
306  statement.set_borrowedWord(borrowed_word)
307  return self
308 
309  def get_borrowed_word(self):
310  """! @brief Get source language (in English).
311  This attribute is owned by the first Statement.
312  @return Statement attribute 'borrowedWord'.
313  """
314  # Get the first Statement instance if any
315  statement = self.get_first_statement()
316  # If there is a Statement instance, get borrowed word
317  if statement is not None:
318  return statement.get_borrowedWord()
319 
320  def set_written_form(self, written_form):
321  """! @brief Set loan word.
322  Attribute 'writtenForm' is owned by the first Statement.
323  @param written_form Loan word.
324  @return Definition instance.
325  """
326  # Get the first Statement instance if any
327  statement = self.get_first_statement()
328  # If there is no Statement instance, create and add one
329  if statement is None:
330  statement = self.create_statement()
331  self.add_statement(statement)
332  statement.set_writtenForm(written_form)
333  return self
334 
335  def get_written_form(self):
336  """! @brief Get loan word.
337  This attribute is owned by the first Statement.
338  @return Statement attribute 'writtenForm'.
339  """
340  # Get the first Statement instance if any
341  statement = self.get_first_statement()
342  # If there is a Statement instance, get loan word
343  if statement is not None:
344  return statement.get_writtenForm()
345 
346  def set_etymology(self, etymology):
347  """! @brief Set etymology.
348  Attribute 'etymology' is owned by the first Statement.
349  @param etymology Etymology.
350  @return Definition instance.
351  """
352  # Get the first Statement instance if any
353  statement = self.get_first_statement()
354  # If there is no Statement instance, create and add one
355  if statement is None:
356  statement = self.create_statement()
357  self.add_statement(statement)
358  statement.set_etymology(etymology)
359  return self
360 
361  def get_etymology(self):
362  """! @brief Get etymology.
363  This attribute is owned by the first Statement.
364  @return Statement attribute 'etymology'.
365  """
366  # Get the first Statement instance if any
367  statement = self.get_first_statement()
368  # If there is a Statement instance, get etymology
369  if statement is not None:
370  return statement.get_etymology()
371 
372  def set_etymology_comment(self, etymology_comment, term_source_language=None):
373  """! @brief Set etymology comment and language.
374  Attributes 'etymologyComment' and 'termSourceLanguage' are owned by the first Statement.
375  @param etymology_comment Etymology comment.
376  @param term_source_language Language of the comment.
377  @return Definition instance.
378  """
379  # Get the first Statement instance if any
380  statement = self.get_first_statement()
381  # If there is no Statement instance, create and add one
382  if statement is None:
383  statement = self.create_statement()
384  self.add_statement(statement)
385  statement.set_etymologyComment(etymology_comment, term_source_language)
386  return self
387 
388  def get_etymology_comment(self, term_source_language=None):
389  """! @brief Get etymology comment.
390  This attribute is owned by the first Statement.
391  @param term_source_language The language of the etymology comment to retrieve.
392  @return Statement attribute 'etymologyComment'.
393  """
394  # Get the first Statement instance if any
395  statement = self.get_first_statement()
396  # If there is a Statement instance, get etymology comment
397  if statement is not None:
398  return statement.get_etymologyComment(term_source_language)
399 
401  """! @brief Get language used for the etymology comment.
402  This attribute is owned by the first Statement.
403  @return Statement attribute 'termSourceLanguage'.
404  """
405  # Get the first Statement instance if any
406  statement = self.get_first_statement()
407  # If there is a Statement instance, get etymology comment language
408  if statement is not None:
409  return statement.get_termSourceLanguage()
410 
411  def set_etymology_gloss(self, etymology_gloss):
412  """! @brief Set etymology gloss.
413  Attribute 'etymologyGloss' is owned by the first Statement.
414  @param etymology_gloss Etymology gloss.
415  @return Definition instance.
416  """
417  # Get the first Statement instance if any
418  statement = self.get_first_statement()
419  # If there is no Statement instance, create and add one
420  if statement is None:
421  statement = self.create_statement()
422  self.add_statement(statement)
423  statement.set_etymologyGloss(etymology_gloss)
424  return self
425 
427  """! @brief Get etymology gloss.
428  This attribute is owned by the first Statement.
429  @return Statement attribute 'etymologyGloss'.
430  """
431  # Get the first Statement instance if any
432  statement = self.get_first_statement()
433  # If there is a Statement instance, get etymology gloss
434  if statement is not None:
435  return statement.get_etymologyGloss()
436 
437  def set_etymology_source(self, etymology_source):
438  """! @brief Set etymology source.
439  Attribute 'etymologySource' is owned by the first Statement.
440  @param etymology_source Etymology source.
441  @return Definition instance.
442  """
443  # Get the first Statement instance if any
444  statement = self.get_first_statement()
445  # If there is no Statement instance, create and add one
446  if statement is None:
447  statement = self.create_statement()
448  self.add_statement(statement)
449  statement.set_etymologySource(etymology_source)
450  return self
451 
453  """! @brief Get etymology source.
454  This attribute is owned by the first Statement.
455  @return Statement attribute 'etymologySource'.
456  """
457  # Get the first Statement instance if any
458  statement = self.get_first_statement()
459  # If there is a Statement instance, get etymology source
460  if statement is not None:
461  return statement.get_etymologySource()
462 
463  def set_scientific_name(self, scientific_name):
464  """! @brief Set scientific name.
465  Attribute 'scientficName' is owned by the first Statement.
466  @param scientific_name Scientific name.
467  @return Definition instance.
468  """
469  # Get the first Statement instance if any
470  statement = self.get_first_statement()
471  # If there is no Statement instance, create and add one
472  if statement is None:
473  statement = self.create_statement()
474  self.add_statement(statement)
475  statement.set_scientificName(scientific_name)
476  return self
477 
479  """! @brief Get scientific name.
480  This attribute is owned by the first Statement.
481  @return Statement attribute 'scientificName'.
482  """
483  # Get the first Statement instance if any
484  statement = self.get_first_statement()
485  # If there is a Statement instance, get scientific name
486  if statement is not None:
487  return statement.get_scientificName()
def get_etymology_comment
Get etymology comment.
Definition: definition.py:388
def get_statements
Get all Statement instances maintained by this Definition instance.
Definition: definition.py:112
def create_statement
Create a Statement instance.
Definition: definition.py:98
def set_etymology_gloss
Set etymology gloss.
Definition: definition.py:411
def check_attr_type
Check that attribute value is of specified type.
Definition: attr.py:9
def get_scientific_name
Get scientific name.
Definition: definition.py:478
text_representation
TextRepresentation instances are owned by Definition There is zero to many TextRepresentation instanc...
Definition: definition.py:23
"Definition is a class representing a narrative description of a sense. It is provided to help human ...
Definition: definition.py:9
def find_encyclopedic_informations
Find encyclopedic informations.
Definition: definition.py:242
def get_first_statement
Get the previously registered statement.
Definition: definition.py:118
def get_language
Get language used for definition and gloss.
Definition: definition.py:50
def get_borrowed_word
Get source language (in English).
Definition: definition.py:309
def set_etymology_source
Set etymology source.
Definition: definition.py:437
def get_etymology_source
Get etymology source.
Definition: definition.py:452
statement
Statement instances are owned by Definition There is zero to many Statement instances per Definition...
Definition: definition.py:26
def set_encyclopedic_information
Set encyclopedic information and language.
Definition: definition.py:214
def get_etymology_gloss
Get etymology gloss.
Definition: definition.py:426
def get_term_source_language
Get language used for the etymology comment.
Definition: definition.py:400
def add_statement
Add a Statement instance to this Definition instance.
Definition: definition.py:104
def set_language
Set language used for definition and gloss.
Definition: definition.py:39
def set_usage_note
Set usage note and language.
Definition: definition.py:174
def set_note
Set note, note type and language.
Definition: definition.py:125
def set_etymology_comment
Set etymology comment and language.
Definition: definition.py:372
def set_restriction
Set restriction and language.
Definition: definition.py:254
def set_borrowed_word
Set source language (in English).
Definition: definition.py:294
def set_scientific_name
Set scientific name.
Definition: definition.py:463