Неверный вывод с двойным циклом for в понимании списка - PullRequest
0 голосов
/ 19 июня 2019

Я делю строки на n-граммы, используя nltk, но я изо всех сил пытаюсь получить правильный вывод.

Вот пример строки:

'F++FF-++FF-+FF-F++FF-++FF-++FF-+FF-F+FF-F++FF-++FF-++FF-++FF-+FF-F++FF-+FF-F++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-+FF-F+FF-F++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-+FF-F+FF-F++FF-++FF-++FF-++FF-++FF-++FF-+FF-F+FF-F++FF-+FF-F++FF-+FF-F++FF-++FF-++FF-+FF-F+FF-F++FF-++FF-++FF-+FF-F+FF-F++FF-++FF-++FF-++FF-++FF-++FF-++FF-++FF-+FF-F++FF-+FF-F++FF-++FF-++FF-+FF-F+FF-F++FF-++FF-+FF-F+FF-F++FF-+FF-F++FF-++FF-+FF-F++FF-++FF-++FF-++FF-'

Идея состоит в том, чтобы свернуть n-граммы из 2, 3, 4 и 5 символов соответственно и объединить их в один список следующим образом: [[2-grams], [3-grams], [4-grams], [5-grams]]

Так что для приведенного выше списка это будет:

[['F+', '+F', 'F-', '++', 'FF', '-+', 'FF', ...], 
['F++', 'FF-', '++F', 'F-+', 'FF-', ...], 
['F++F', 'F-++', 'FF-+', 'FF-F', ...],  
['F++FF', '-++FF', '-+FF-', ...]]

Я использую фрейм данных для хранения всего и пытаюсь выполнить вышеизложенное следующим образом:

allData['Rolling n-grams'] = allData['L-string'].apply(
    lambda x: [(''.join(tup)) for i in range(2, 6)
                    for tup in list(ngrams(list(x), i))]
)

Но при этом все n-граммы сбрасываются в один длинный список
Постскриптум ''.join(tup) требуется, потому что функция ngrams выводит пары символов в кортежи, такие как [('F','+'), ('+', 'F'), ...]

1 Ответ

0 голосов
/ 19 июня 2019

Просто чтобы уточнить, как я закончил, используя ответ yatu :

ngram_list = allData['L-string'].apply(lambda x: ((''.join(tup)) for i in range(2, 6) for tup in list(ngrams(list(x), i))))

gram = []
for ngram in ngram_list:
    tmp = [[*v] for _, v in groupby(sorted(ngram, key=len), key=len)]
    gram.append(tmp)

allData['Rolling n-grams'] = gram
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...