def _get_pos_mapping(doc, normalize, pos_filter=['NOUN', 'PROPN', 'ADJ',
    'VERB', 'ADV', 'SYM', 'PUNCT']):
    """
    Iterates through the doc and finds the pos_tag corresponding to each 
    token. This is then mapped to the token's normalized form.
    Since the same word can have multiple different POS tags, only the tag 
    present in pos_filter is kept. If multiple tags are present in pos_filter, 
    then the update sequence of the dictionary determines which one is kept.
    """
    mapping = dict()
    if normalize == 'lemma':
        for token in doc:
            if token.pos_ in pos_filter or token.lemma_ not in mapping.keys():
                mapping.update({token.lemma_: token.pos_})
    elif normalize == 'lower':
        for token in doc:
            if token.pos_ in pos_filter or token.lower_ not in mapping.keys():
                mapping.update({token.lower_: token.pos_})
    else:
        for token in doc:
            if token.pos_ in pos_filter or token.text not in mapping.keys():
                mapping.update({token.text: token.pos_})
    return mapping
