Python 如何去掉名词前的形容词或定语?
目前我正在使用nltk删除所有形容词,这是我的尝试:Python 如何去掉名词前的形容词或定语?,python,nlp,nltk,spacy,Python,Nlp,Nltk,Spacy,目前我正在使用nltk删除所有形容词,这是我的尝试: def remove_adj(sentence): adjective_tags = ["JJ", "JJR", "JJS"] tokens = nltk.word_tokenize(sentence) tags = nltk.pos_tag(tokens) for i in range(len(tags)): word = [word for word,po
def remove_adj(sentence):
adjective_tags = ["JJ", "JJR", "JJS"]
tokens = nltk.word_tokenize(sentence)
tags = nltk.pos_tag(tokens)
for i in range(len(tags)):
word = [word for word,pos in tags if (pos not in adjective_tags)]
return ' '.join(word)
但我需要的和这个不同。以下是一些例子:
输入:“谁的收入最高”输出:“谁的收入最高”
输入:“谁的收入高于平均收入”输出:“谁的收入高于平均收入”
输入:“利润的平均值是多少”输出:“利润是多少”
谁能给我一些建议吗?提前谢谢大家。我想我理解你们想要实现的目标,但你们有什么问题?我已经运行了您的代码,它在删除形容词方面似乎非常有效 不过有几件事让我很反感。对于下面的输入/输出,您可以期望删除单词“more”,因为它是一个带有标记“JJR”的形容词。你的帖子表明你并不期望它被删除 输入:“谁的收入高于平均收入”输出:“谁的收入高于平均收入” 另外,我不知道你为什么希望在下面的输入/输出中删除“mean”这个词,因为它不是一个形容词 输入:“利润的平均值是多少”输出:“利润是多少” 检查句子的好地方是 下面是您的实际输出,正确地删除了形容词,它似乎正在这样做 输入:“谁的收入最高”输出:“谁的收入最高” 输入:“谁的收入高于平均收入”输出:“谁的收入高于平均收入” 输入:“利润的平均值是多少”输出:“利润的平均值是多少” 如果你只是想删除与这个名词有关的任何描述性元素,我就不得不问更多关于你的问题。你的例子都以一个名词结尾,这似乎就是你所关注的名词。该代码将处理的所有句子都是这种情况吗?如果是这样的话,你可能会考虑向后重复你的句子。你可以很容易地识别这个名词。当你一步一步地看这个名词是否有一个限定词(a,an,the)和标记“DT”,因为你不想从我看到的东西中去掉它。你继续一步一步地删除所有内容,直到找到一个形容词或另一个名词。我不知道你在这一条上删除单词的实际规则是什么,但反向操作可能会有所帮助 编辑: 我对此进行了一些修改,并使下面的代码完全按照您希望的方式在输出上工作。如果有其他语音标记需要停止,则可以在“stop_tags”变量中填充标记
def remove_adj(sentence):
stop_tags = ["JJ", "JJR", "JJS", "NN"]
tokens = nltk.word_tokenize(sentence)
tags = list(reversed(nltk.pos_tag(tokens)))
noun_located = False
stop_reached = False
final_sent = ''
for word,pos in tags:
if noun_located == False and pos == 'NN':
noun_located = True
final_sent+=f' {word}'
elif stop_reached == False and pos in stop_tags:
stop_reached = True
elif stop_reached == True:
final_sent+=f' {word}'
final_sent = ' '.join(reversed(final_sent.split(' ')))
return final_sent
x = remove_adj('what is the mean of profit')
print(x)
`我想我理解你想要实现的目标,但你有什么问题?我已经运行了您的代码,它在删除形容词方面似乎非常有效 不过有几件事让我很反感。对于下面的输入/输出,您可以期望删除单词“more”,因为它是一个带有标记“JJR”的形容词。你的帖子表明你并不期望它被删除 输入:“谁的收入高于平均收入”输出:“谁的收入高于平均收入” 另外,我不知道你为什么希望在下面的输入/输出中删除“mean”这个词,因为它不是一个形容词 输入:“利润的平均值是多少”输出:“利润是多少” 检查句子的好地方是 下面是您的实际输出,正确地删除了形容词,它似乎正在这样做 输入:“谁的收入最高”输出:“谁的收入最高” 输入:“谁的收入高于平均收入”输出:“谁的收入高于平均收入” 输入:“利润的平均值是多少”输出:“利润的平均值是多少” 如果你只是想删除与这个名词有关的任何描述性元素,我就不得不问更多关于你的问题。你的例子都以一个名词结尾,这似乎就是你所关注的名词。该代码将处理的所有句子都是这种情况吗?如果是这样的话,你可能会考虑向后重复你的句子。你可以很容易地识别这个名词。当你一步一步地看这个名词是否有一个限定词(a,an,the)和标记“DT”,因为你不想从我看到的东西中去掉它。你继续一步一步地删除所有内容,直到找到一个形容词或另一个名词。我不知道你在这一条上删除单词的实际规则是什么,但反向操作可能会有所帮助 编辑: 我对此进行了一些修改,并使下面的代码完全按照您希望的方式在输出上工作。如果有其他语音标记需要停止,则可以在“stop_tags”变量中填充标记
def remove_adj(sentence):
stop_tags = ["JJ", "JJR", "JJS", "NN"]
tokens = nltk.word_tokenize(sentence)
tags = list(reversed(nltk.pos_tag(tokens)))
noun_located = False
stop_reached = False
final_sent = ''
for word,pos in tags:
if noun_located == False and pos == 'NN':
noun_located = True
final_sent+=f' {word}'
elif stop_reached == False and pos in stop_tags:
stop_reached = True
elif stop_reached == True:
final_sent+=f' {word}'
final_sent = ' '.join(reversed(final_sent.split(' ')))
return final_sent
x = remove_adj('what is the mean of profit')
print(x)
`嗨,这正是我要找的。我真的很感激。再次感谢!嗨,这正是我要找的。我真的很感激。再次感谢!