【问题标题】:Obtaining synsets in relation to their parts of speech tags获取与其词性标签相关的同义词集
【发布时间】:2020-09-20 06:18:49
【问题描述】:

我想在一段文本中获取与其词性标签相关的相应同义词。 例如,如果您键入,

print('Synsets nouns : {}'.format(wn.synsets('title', pos = 'n')))
out : [Synset('title.n.01'),Synset('title.n.02'),Synset('title.n.03'), ...]

你最终会得到一大堆仅与名词相关的同义词(例如,如果有任何动词,它们将被忽略)。

我不想手动输入pos = 'n',而是想将它自动化成一个句子。

例如:

from nltk.corpus import wordnet as wn

text = 'Theim won his first ever grandslam title'
text_tokens = nltk.word_tokenize(text)
text_posTags = nltk.pos_tag(text_tokens)

corresponding_synsets = [wn.synsets(i[0], pos = i[1]) for i in text_posTags]

但现在我得到了一个错误,因为 text_posTags 的格式不同, 例如,单词“title”将具有名为“NN”而不是“n”的 pos。

print(text_posTags)
out:
[('Theim', 'NNP'), ('won', 'VBD'), ('his', 'PRP$'), ('first', 'JJ'), ('ever', 'RB'), ('grandslam', 'VBP'), ('title', 'NN')] 

有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: nltk


    【解决方案1】:

    您可能已经知道 NLTK 使用 Penn Treebank tagset 来表示同一词性中的不同类别(例如专有名词与名词)。

    如果我正确理解了您的问题,一种可能的解决方案是处理名词的所有可能指代:

    noun_types = ['NN', 'NNP', 'NNS', 'NNPS']
    tag = 'NN'
    
    if tag in noun_types:
        print('n')
    

    如果您采用上述方法并希望在列表理解中包含条件,this thread 可能是一个有用的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 2022-01-04
      • 2017-04-18
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多