获取一个词在句子中的作用PY

Get a word's function in a sentence PY

我的问题在这里有点棘手,事实上我正在尝试识别给定句子中单词的作用,我设法使用 nltk 得到一些东西,问题是它告诉我这个词是什么,我正在寻找的是它的工作。例如,God Loves Apples 不会 return God 作为给定句子中的主语。事实上,在这里它将 return God 作为 NNP,这不是我要找的。所以我正在寻找给定单词在它的字符串中的作用作为字典键(寻找作为主题的上帝而不是作为 NNP 的上帝)

import sys # Imports
import subprocess # Imports
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 
'nltk','--quiet'],stderr=subprocess.DEVNULL) # Downloading NLTK
import nltk # Imports
n=input("Enter something\n") # User input
tokens = nltk.word_tokenize(n) # Formatting
tagged = nltk.pos_tag(tokens) # Formatting
dct = dict((y,x) for x, y in tagged) #tuple to dict
file = open('DATA.txt', 'a') # Creating new txt to store data
sys.stdout = file # Getting out of it
print(dct.get('NNP'),' :') #Getting and printing NNP if exists else print the sentence
print(dct) # Printing data
print("\n") #next line
file.close() # Closing it

你可以使用依赖解析。 NLTK 不是这项任务的理想选择,但有其他选择,例如 CoreNLP or SpaCy. Both can be tested online (here and here)。依存关系树会告诉你,在 God loves apples. 中,记号 God 通过 nsubj 关系连接到主要动词,即名词主语。

我通常选择 SpaCy:

import spacy

nlp = spacy.load('en_core_web_sm')

# Process the document
doc = nlp('God loves apples.')

for tok in doc:
    print(tok, tok.dep_, sep='\t')

这导致

God nsubj
loves   ROOT
apples  dobj
.   punct