def _parse_corporations(self, datafield, subfield, roles=["<STR_LIT>"]):
if len(datafield) != <NUM_LIT:3>:<EOL><INDENT>raise ValueError(<EOL>"<STR_LIT>"<EOL>)<EOL><DEDENT>if len(subfield) != <NUM_LIT:1>:<EOL><INDENT>raise ValueError(<EOL>"<STR_LIT>"<EOL>)<EOL><DEDENT>parsed_corporations = []<EOL>for corporation in self.get_subfields(datafield, subfield):<EOL><INDENT>other_subfields = corporation.other_subfields<EOL>if "<STR_LIT:4>" in other_subfields and roles != ["<STR_LIT>"]:<EOL><INDENT>corp_roles = other_subfields["<STR_LIT:4>"]  <EOL>relevant = any(map(lambda role: role in roles, corp_roles))<EOL>if not relevant:<EOL><INDENT>continue<EOL><DEDENT><DEDENT>name = "<STR_LIT>"<EOL>place = "<STR_LIT>"<EOL>date = "<STR_LIT>"<EOL>name = corporation<EOL>if "<STR_LIT:c>" in other_subfields:<EOL><INDENT>place = "<STR_LIT:U+002C>".join(other_subfields["<STR_LIT:c>"])<EOL><DEDENT>if "<STR_LIT:d>" in other_subfields:<EOL><INDENT>date = "<STR_LIT:U+002C>".join(other_subfields["<STR_LIT:d>"])<EOL><DEDENT>parsed_corporations.append(Corporation(name, place, date))<EOL><DEDENT>return parsed_corporations<EOL>
Parse informations about corporations from given field identified
by `datafield` parameter.

Args:
    datafield (str): MARC field ID ("``110``", "``610``", etc..)
    subfield (str):  MARC subfield ID with name, which is typically
                     stored in "``a``" subfield.
    roles (str): specify which roles you need. Set to ``["any"]`` for
                 any role, ``["dst"]`` for distributors, etc.. For
                 details, see
                 http://www.loc.gov/marc/relators/relaterm.html

Returns:
    list: :class:`Corporation` objects.