def read_conll(path, keys):
    """
    Parameters
    ----------
    path: str
    keys: list[str]

    Returns
    -------
    list[list[dict[str, str]]]

    Notes
    -----
    CoNLL-X: ID FORM LEMMA CPOSTAG POSTAG FEATS HEAD DEPREL PHEAD PDEPREL
    CoNLL-U: ID FORM LEMMA UPOS    XPOS   FEATS HEAD DEPREL DEPS  MISC
    """
    sentences = []

    n_items = len(keys)

    sentence = []
    for line in open(path):
        line = line.strip()
        if line.startswith("#"):
            continue
        if not line:
            if len(sentence) != 0:
                sentences.append(sentence)
                sentence = []
            continue
        items = line.split("\t")
        assert len(items) == n_items
        conll_line = {key:item for key,item in zip(keys, items)}
        sentence.append(conll_line)
    if sentence:
        sentences.append(sentence)
    return sentences