Я думаю, что часть моей проблемы связана с spaCy, а часть связана с непониманием самого элегантного способа работы внутри самого Python.
Я загружаю текстовый файл в Python, разбивая его напредложения, а затем разбить его на слова с помощью nltk:
sent_text = nltk.sent_tokenize(text)
tokenized_text = [nltk.word_tokenize(x) for x in sent_text]
Это дает мне список списков, где каждый список в основном списке является предложением токенизированных слов.Пока все хорошо.
Затем я запускаю его через SpaCy:
text = nlp(unicode(tokenized_text))
Все еще список списков, тоже самое, но в нем есть вся информация о SpaCy.
Это где я бью блок.По сути, я хочу, чтобы в каждом предложении оставались только существительные, глаголы и прилагательные, а внутри них также избавлялись от вспомогательных и союзов.Я смог сделать это раньше, создав новый пустой список и добавив только то, что я хочу:
sent11 = []
for token in sent1:
if (token.pos_ == 'NOUN' or token.pos_ == 'VERB' or token.pos_ =='ADJ') and (token.dep_ != 'aux') and (token.dep_ != 'conj'):
sent11.append(token)
Это прекрасно работает для одного предложения, но я не хочу делать это для каждогопредложение в тексте длиной в книгу.
Затем, когда у меня появятся эти новые списки (или любой другой лучший способ сделать это), содержащий только те фрагменты, которые я хочу, я хочу использовать функцию "сходства"SpaCy, чтобы определить, какое предложение семантически ближе всего к некоторому другому, гораздо более короткому тексту, с которым я сделал то же самое для всего, кроме существительных, прилагательных, глаголов и т. Д.
У меня это работает при сравнении одногоодно предложение другому с помощью:
sent1.similarity(sent2)
Итак, я думаю, мои вопросы
1) Как лучше всего превратить список списков в список списков, которые содержат толькокуски, которые я хочу?
и
2) Как мне циклически проходить через этот новый список списков, сравнивать каждый из них с отдельным предложением и возвращать предложение, которое наиболее семантически похоже (using векторы, с которыми поставляется SpaCy)?