Как получить существительные фразы из списка предложений, используя SpaCy - PullRequest
0 голосов
/ 23 января 2019

У меня есть список предложений, которым нужно найти фразы с существительными для каждого предложения, используя SpaCy.В настоящее время к выходам добавляются только существительные фразы из всех предложений.Как я могу получить существительные фразы для каждого предложения и распечатать их как список списков?

скажем, у нас есть два элемента предложений в списке -

A = ["I am a boy", "I am a girl"]

A_np = []
for x in A:
    doc = nlp(x)
    for np in doc.noun_chunks:
        story_np.append(np.text)
A_np

Я ожидаю получить что-то вроде этого:

[['I','boy'],['I','girl']]

Ответы [ 3 ]

0 голосов
/ 23 января 2019

После создания списка слов из предложений и удаления шума и стоп-слов, приведя все к тем же случаям, у вас останется набор слов, оставшихся в данных.

Тогда вы можете позвонить в библиотеку

nlp = spacy.load('en', disable=['parser', 'ner'])

или как

nlp = spacy.load('en_core_web_sm', disable=['parser', 'ner'])

тогда вы можете определить функцию, чтобы отфильтровать существительные слова, такие как:

def filter_nouns(texts, tags=['NOUN']):
       output = []
       for x in texts:
             doc = nlp(" ".join(x)) 
             output.append([token.lemma_ for token in doc if token.pos_ in tags])
       return output

тогда вы можете применить определенную функцию к очищенным данным

Надеюсь, это окажется полезным

0 голосов
/ 24 января 2019

Я понял это, добавив пустой список перед вторым циклом и вставив фрагменты документа в последний элемент пустого списка. Эти две петли будут содержать фразы с существительными и вставлять обработанные фразы с существительными.

A = ["I am a boy", "I am a girl"]

A_np = []
    for x in A:
        doc = nlp(x)
        A_np.append([])
        for np in doc.noun_chunks:
            story_np[-1].append(np.text)
A_np
0 голосов
/ 23 января 2019

Вам нужно сделать две импровизации:

1 / noun_chunks - это диапазоны, а не токены. Следовательно, лучше перебирать отдельные токены существительного куска.

2 / У вас должен быть промежуточный список для хранения существительных кусков одного предложения.

Импровизированный код, вы можете настроить его согласно вашему требованию:

>>> A = ["I am a boy", "I am a girl"]
>>> nlp = spacy.load('en')
>>> A_np = []
>>> for x in A:
...     doc = nlp(x)
...     sent_nps = []
...     for np in doc.noun_chunks:
...             sent_nps.extend([token.text for token in np])
...     A_np.append(sent_nps)
...
>>> A_np
[['I', 'a', 'boy'], ['I', 'a', 'girl']]
...