Python LMF library
 All Classes Namespaces Files Functions Variables
mdf.py
Go to the documentation of this file.
1 #! /usr/bin/env python
2 
3 """! @package output
4 """
5 
6 from config.mdf import lmf_mdf, mdf_order
7 from utils.io import open_write, EOL
8 from utils.error_handling import OutputError
9 
10 def mdf_write(object, filename, lmf2mdf=lmf_mdf, order=mdf_order):
11  """! @brief Write an MDF file.
12  @param object The LMF instance to convert into MDF output format.
13  @param filename The name of the MDF file to write with full path, for instance 'user/output.txt'.
14  @param lmf2mdf A Python dictionary describing the mapping between LMF representation and MDF markers. Default value is 'lmf_mdf' dictionary defined in 'pylmflib/config/mdf.py'. Please refer to it as an example.
15  @param order A Python list defining the order in which MDF markers must be written, for instance ["lx", "ps"]. Default value is 'mdf_order' list defined in 'pylmflib/config/mdf.py'.
16  """
17  mdf_file = open_write(filename)
18  # For each MDF marker, get the corresponding LMF value
19  if object.__class__.__name__ == "Lexicon":
20  for lexical_entry in object.get_lexical_entries():
21  for marker in order:
22  if type(marker) is list:
23  # Parse group of markers
24  parse_list(mdf_file, lmf2mdf, marker, lexical_entry)
25  else:
26  value = lmf2mdf[marker](lexical_entry)
27  write_line(mdf_file, marker, value)
28  # Separate lexical entries from each others with a blank line
29  mdf_file.write(EOL)
30  else:
31  raise OutputError(object, "Object to write must be a Lexicon.")
32  mdf_file.close()
33 
34 def parse_list(mdf_file, lmf2mdf, marker, object):
35  """! @brief Parse a group of markers and write them into an MDF file.
36  @param mdf_file The file to write in.
37  @param lmf2mdf A Python dictionary describing the mapping between LMF representation and MDF markers.
38  @param marker The MDF marker.
39  @param object The current processed object.
40  """
41  # There is a bundle of markers
42  group = lmf2mdf[marker[0] + "Group"](object)
43  for element in group:
44  # Parse the list of markers
45  for mkr in marker:
46  if type(mkr) is list:
47  parse_list(mdf_file, lmf2mdf, mkr, element)
48  else:
49  value = lmf2mdf[mkr](element)
50  write_line(mdf_file, mkr, value)
51 
52 def write_line(mdf_file, marker, value):
53  """! @brief Write a line into an MDF file.
54  @param mdf_file The file to write in.
55  @param marker The MDF marker.
56  @param value The corresponding value.
57  """
58  if type(value) is not list:
59  # Write the MDF output as follows: "\mdf_marker lmf_value"
60  if value is not None:
61  mdf_file.write("\\" + marker + " " + value + EOL)
62  else:
63  # Create a line for each value
64  for item in value:
65  mdf_file.write("\\" + marker + " " + item + EOL)
def open_write
Open file in write mode (automatically decode file in unicode).
Definition: io.py:47
def write_line
Write a line into an MDF file.
Definition: mdf.py:52
def parse_list
Parse a group of markers and write them into an MDF file.
Definition: mdf.py:34
def mdf_write
Write an MDF file.
Definition: mdf.py:10