def extract_proper_nouns(sent_toks, container):
    """
		NNP: Proper Noun Singular
		NNPS: Proper Noun plural
		CC: Coordinating conjunction
		IN: Preposition or subordinating conjunction

		The goal here is to extract multi-word proper nouns. E.g., 
			"Hurricane harvey" (NNP NNP)
			"Centers for Disease Control" (NNP IN NNP NNP)
			"Federal Emergency Management Agency" (NNP NNP NNP NNP)
		This is achieved extracting a contiguous list of NNP or a contiguous list of NNP interleaved with CC or IN
	"""
    if len(sent_toks) == 0:
        return []
    last_pos = ''
    proper_nouns = {'toks': [[]], 'pos': [[]]}
    for i in range(len(sent_toks)):
        pos = sent_toks[i]['pos']
        tok = sent_toks[i]['tok']
        if pos.startswith('NNP'):
            proper_nouns['toks'][-1].append(tok)
            proper_nouns['pos'][-1].append(pos)
        elif len(proper_nouns['toks'][-1]) != 0 and pos in ['IN', 'CC']:
            proper_nouns['toks'][-1].append(tok)
            proper_nouns['pos'][-1].append(pos)
        elif len(proper_nouns['toks'][-1]) != 0:
            if len(proper_nouns['toks'][-1]) == 1:
                proper_nouns['toks'][-1] = []
                proper_nouns['pos'][-1] = []
            elif last_pos not in ['NNP', 'NNPS']:
                proper_nouns['toks'][-1] = proper_nouns['toks'][-1][:-1]
                proper_nouns['pos'][-1] = proper_nouns['pos'][-1][:-1]
                if len(proper_nouns['toks'][-1]) == 1:
                    proper_nouns['toks'][-1] = []
                    proper_nouns['pos'][-1] = []
                else:
                    proper_nouns['toks'].append([])
                    proper_nouns['pos'].append([])
            else:
                proper_nouns['toks'].append([])
                proper_nouns['pos'].append([])
        last_pos = pos
    if len(proper_nouns['toks'][0]) == 0:
        return []
    elif len(proper_nouns['toks'][-1]) == 0:
        proper_nouns['toks'] = proper_nouns['toks'][:-1]
        proper_nouns['pos'] = proper_nouns['pos'][:-1]
    for i in range(len(proper_nouns['toks'])):
        proper_noun = proper_nouns['toks'][i]
        proper_noun = ' '.join(proper_noun)
        proper_noun_lower = proper_noun.lower()
        proper_noun_rate = round(proper_nouns['pos'][i].count('NNP') / len(
            proper_nouns['pos'][i]), 4)
        if proper_noun_lower in container:
            container[proper_noun_lower]['freq'] += 1
        else:
            container[proper_noun_lower] = {'freq': 1, 'raw': proper_noun,
                'nnp_rate': proper_noun_rate}
    return proper_nouns
