Это на самом деле не вопрос pandas
.У вас есть три вопроса:
- Разделить каждую строку на несколько предложений
- Определить тему в каждом предложении
- Вернуть предложение, если тема
dog
1. Мы можем разбить строку на list
, используя метод split()
.
my_string = "the dog ate the bread. the cat ate the bread"
sentences = my_string.split('.')
2. Согласнодокументация Spacy, вызывающая nlp()
на string
, даст нам Doc
, который содержит tokens
, к которому, в свою очередь, прикреплены некоторые properties
.
property
, который нас интересует, это dep_
, так как он сообщит нам отношения между нашим token
и другим tokens
, то есть, если наш token
является субъектом или нет.
Вы можете найти список свойств здесь: https://spacy.io/usage/linguistic-features
doc = nlp(my_string)
for token in doc:
print(token.dep_) # if this prints `nsubj` the token is a noun subject!
3. Чтобы проверить, равен ли token
'dog'
, нам нужночтобы получить свойство text из токена:
token.text
Если мы увеличим это значение:
NLP = spacy.load('en_core_web_sm')
def extract_sentence_based_on_subject(string, subject):
sentences = string.split('.')
for sentence in sentences:
doc = NLP(sentence)
for token in doc:
if token.dep_ == 'nsubj':
if token.text == subject:
return sentence
mydata['text'].apply(extract_sentence_based_on_subject, subject='dog')