Python 如何打印单词的所有引理名,而不在NLTK语法集中多次重复其同义词和词性标记?
我在找一组词。这是我的密码:Python 如何打印单词的所有引理名,而不在NLTK语法集中多次重复其同义词和词性标记?,python,tags,nltk,wordnet,synonym,Python,Tags,Nltk,Wordnet,Synonym,我在找一组词。这是我的密码: from nltk.corpus import wordnet as wn from nltk import pos_tag def getSynonyms(word1): synonymList1 = [] for data1 in word1: wordnetSynset1 = wn.synsets(data1) tempList1=[] for synset1 in wordnetSynset1
from nltk.corpus import wordnet as wn
from nltk import pos_tag
def getSynonyms(word1):
synonymList1 = []
for data1 in word1:
wordnetSynset1 = wn.synsets(data1)
tempList1=[]
for synset1 in wordnetSynset1:
synLemmas = synset1.lemma_names()
for i in xrange(len(synLemmas)):
word = synLemmas[i].replace('_',' ')
tempList1.append(pos_tag(word.split()))
synonymList1.append(tempList1)
return synonymList1
word1 = ['study']
syn1 = getSynonyms(word1)
print syn1
以下是输出:
[[[(u'survey', 'NN')], [(u'study', 'NN')], [(u'study', 'NN')], [(u'work', 'NN')], [(u'report', 'NN')], [(u'study', 'NN')], [(u'written', 'VBN'), (u'report', 'NN')], [(u'study', 'NN')], [(u'study', 'NN')], [(u'discipline', 'NN')], [(u'subject', 'NN')], [(u'subject', 'JJ'), (u'area', 'NN')], [(u'subject', 'JJ'), (u'field', 'NN')], [(u'field', 'NN')], [(u'field', 'NN'), (u'of', 'IN'), (u'study', 'NN')], [(u'study', 'NN')], [(u'bailiwick', 'NN')], [(u'sketch', 'NN')], [(u'study', 'NN')], [(u'cogitation', 'NN')], [(u'study', 'NN')], [(u'study', 'NN')], [(u'study', 'NN')], [(u'analyze', 'NN')], [(u'analyse', 'NN')], [(u'study', 'NN')], [(u'examine', 'NN')], [(u'canvass', 'NN')], [(u'canvas', 'NN')], [(u'study', 'NN')], [(u'study', 'NN')], [(u'consider', 'VB')], [(u'learn', 'NN')], [(u'study', 'NN')], [(u'read', 'NN')], [(u'take', 'VB')], [(u'study', 'NN')], [(u'hit', 'VB'), (u'the', 'DT'), (u'books', 'NNS')], [(u'study', 'NN')], [(u'meditate', 'NN')], [(u'contemplate', 'NN')]]]
正如我们所看到的,'study','NN'
出现了不止一次
如何只为每个同义词打印一次而不重复
因此,每个同义词仅用一个同义词表示,而不是总是附加到for循环中tempList1.append(pos_标记(word.split())行中的列表中。您应该检查您试图添加的元素是否已经在列表中。有一个简单的if语句检查就可以了
if pos_tag(word.split()) not in tempList1:
tempList1.append(pos_tag(word.split()))
这是一个不会被添加两次的元素。而不是总是附加到for循环中tempList1.append(pos_标记(word.split())行中的列表中。您应该检查您试图添加的元素是否已经在列表中。有一个简单的if语句检查就可以了
if pos_tag(word.split()) not in tempList1:
tempList1.append(pos_tag(word.split()))
这是一个不会添加两次的元素。syn1=set(getSynonyms(word1))
将返回的列表设置为一个集合将删除重复的列表。我在这里假设顺序并不重要,因为集合没有定义的顺序。syn1=set(getSynonyms(word1))
将返回的列表设置为一个集合将删除重复的列表。我在这里假设顺序并不重要,因为集合没有定义的顺序。这将不起作用,因为getSynonyms()返回列表的列表。并且列表类型不可散列
syn1=set(对于getSynonyms(word1)中的syn,syn[0])
将删除列表级别。但是OP应该在早期修复他们的代码。(另外,wordnet
没有synsets()
方法,因此问题中的代码不会运行。)这不起作用,因为getSynonyms()返回列表的列表。并且列表类型不可散列syn1=set(对于getSynonyms(word1)中的syn,syn[0])
将删除列表级别。但是OP应该在早期修复他们的代码。(另外,wordnet
没有synsets()
方法,因此问题中的代码无法运行。)很抱歉,但很高兴我能提供帮助:)这是我的输出,没有pos_标记=[[u‘调查’、‘研究’、‘工作’、‘报告’、‘书面报告’、‘纪律’、‘学科’、‘学科领域’、‘学科领域’、‘研究领域’、‘辖区’、‘素描’、‘思考’、‘分析’、‘分析’、‘检查’、‘画布’、‘思考’、‘学习’、‘阅读’、‘接受’、‘读书’、‘沉思’]很抱歉,但我仍然很高兴能帮上忙:)这是我的输出,没有pos_标记=[[u‘调查’、‘研究’、‘工作’、‘报告’、‘书面报告’、‘纪律’、‘学科’、‘学科领域’、‘学科领域’、‘研究领域’、‘辖区’、‘素描’、‘思考’、‘分析’、‘分析’、‘检查’、‘画布’、‘思考’、‘学习’、‘阅读’、‘接受’、‘读书’、‘沉思’]