Как определить предмет предложения?

Может ли Python + NLTK использоваться для определения предмета предложения? Из того, что я узнал до сих пор, является то, что предложение может быть разбито на голову и его иждивенцев. Напр. "Я застрелил слона". В этом предложении я и слон являются иждивенцами для расстрела. Но как я узнаю, что субъект в этом предложении является I.

Ответ 1

Как Книга NLTK (упражнение 29) гласит: "Одним из распространенных способов определения предмета предложения S на английском языке является словосочетание, являющееся потомком S и брата VP."

Посмотрите на пример дерева: действительно, "я" - это существительная фраза, которая является дочерним элементом S, являющимся родным братом VP, в то время как "слон" не является.

Ответ 2

Вы можете использовать Spacy.

Код

import spacy
nlp = spacy.load('en')
sent = "I shot an elephant"
doc=nlp(sent)

sub_toks = [tok for tok in doc if (tok.dep_ == "nsubj") ]

print(sub_toks) 

Ответ 3

Английский язык имеет два голоса: активный голос и пассивный голос. Лучше всего использовать голос: Активный голос.

Это следует за моделью subject-verb-object. Чтобы пометить тему, напишите набор правил с тегами POS. Отметьте предложение I[NOUN] shot[VERB] an elephant[NOUN]. Если вы видите, что первое существительное является субъектом, то есть глагол, а затем есть объект.

Если вы хотите сделать его более сложным, предложение - I shot an elephant with a gun. Здесь предлогам или подчиненным союзам, таким как with, at, in, могут быть заданы роли. Здесь предложение будет помечено как I[NOUN] shot[VERB] an elephant[NOUN] with[IN] a gun[NOUN]. Вы можете легко сказать, что слово с получает инструментальную роль. Вы можете создать основанную на правилах систему, чтобы получить роль каждого слова в предложении.

Также посмотрите на паттерны пассивного голоса и правила записи для них.

Ответ 4

Вы можете doc = nlp(text.decode('utf8')) проблему, выполнив что-то вроде doc = nlp(text.decode('utf8')), но это, вероятно, принесет вам больше ошибок в будущем.

Кредиты: https://github.com/explosion/spaCy/issues/380