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‘调查’、‘研究’、‘工作’、‘报告’、‘书面报告’、‘纪律’、‘学科’、‘学科领域’、‘学科领域’、‘研究领域’、‘辖区’、‘素描’、‘思考’、‘分析’、‘分析’、‘检查’、‘画布’、‘思考’、‘学习’、‘阅读’、‘接受’、‘读书’、‘沉思’]