Есть ли способ получить Ngram из кортежей? - PullRequest
0 голосов
/ 27 мая 2019

Я работаю с корпусом, помеченным для зависимостей. Каждое слово корпуса представляет собой кортеж, содержащий 5 элементов: положение слова в предложении, фактическое слово, POS, индекс слова, от которого оно зависит, и функция. Из этого корпуса я хочу преобразовать эти теги и отношения в другой в соответствии с некоторыми правилами. Чтобы написать эти правила, я хочу начать с получения корпуса в биграммах.

Я пытался использовать функцию nltk ngrams, как показано в коде ниже. Тем не менее, так как я работаю с кортежами, это не работает, и я получаю весь корпус без видимых разделенных биграмм.

Я пытался использовать функцию nltk ngrams, как показано в коде ниже. Тем не менее, так как я работаю с кортежами, это не работает, и я получаю весь корпус без видимых разделенных биграмм.

import nltk, glob 
from nltk import ngrams


def txt2corpus(path):
    """same as read_files function in corpus_opening_slicing"""
    corpus = []
    for f in glob.glob(path):
        sents1=open(f).read().split('\n\n')
        sents2 = []
        for n in range(len(sents1)):
            sents2.append(sents1[n].split('\n'))
        sents3 = []
        for s in sents2:
            sent = []
            for t in s:
                sent.append(tuple(t.split('\t')))
            sents3.append(sent)
        corpus.extend(sents3)
    return corpus

corpus= txt2corpus("/Users/raquelgarnelonicolas/Desktop/80_sents_untagged.txt")

def get_ngrams(c):
    return list(ngrams(c, 2))

Когда я делаю нграммы (корпус), я получаю все кортежи для каждого слова в корпусе, но не организовано. Есть ли способ получить нграммы из этих кортежей? Я думал о создании нового списка только с позицией 1 кортежа (словом), но мне нужна остальная информация в кортеже, чтобы написать следующие правила для новых тегов (некоторые правила зависят от POS предыдущего слова, например). Ребята, у вас есть идеи? Заранее спасибо!

...