'A list of words that make up a phrase in the sentence.
- type: the phrase tag; "NP" => a noun phrase (e.g., "the black cat").
- role: the function of the phrase; "SBJ" => sentence subject.
- relation: an id shared with other phrases, linking subject to object in the sentence.'

def __init__(self, sentence, words=[], type=None, role=None, relation=None):

    b1 = isinstance(relation, (list, tuple))
    b2 = isinstance(role, (list, tuple))
    if ((not b1) and (not b2)):
        r = [(relation, role)]
    elif (b1 and b2):
        r = zip(relation, role)
    elif b1:
        r = zip(relation, ([role] * len(relation)))
    elif b2:
        r = zip(([relation] * len(role)), role)
    r = [(a, b) for (a, b) in r if ((a is not None) or (b is not None))]
    self.sentence = sentence
    self.words = []
    self.type = type
    self.relations = r
    self.pnp = None
    self.anchor = None
    self.attachments = []
    self._conjunctions = None
    self._modifiers = None
    self.extend(words)
