如何从nltk WordNet Python中获取同义词

时间:2013-10-08 21:20:26

标签: python nltk wordnet

WordNet很棒,但我很难在nltk中获取同义词。如果你搜索类似的单词' small'与here类似,它显示了所有同义词。

基本上我只需知道以下内容: wn.synsets('word')[i].option()其中选项可以是上位词和反义词,但获取同义词的选项是什么?

7 个答案:

答案 0 :(得分:38)

如果您想要synset中的同义词(也就是组成该集合的词条),您可以使用lemma_names()获取它们:

>>> for ss in wn.synsets('small'):
>>>     print(ss.name(), ss.lemma_names())

small.n.01 ['small']
small.n.02 ['small']
small.a.01 ['small', 'little']
minor.s.10 ['minor', 'modest', 'small', 'small-scale', 'pocket-size',  'pocket-sized']
little.s.03 ['little', 'small']
small.s.04 ['small']
humble.s.01 ['humble', 'low', 'lowly', 'modest', 'small']    
...

答案 1 :(得分:9)

You can use var x ={}; var array = []; for (i = 1; i<11; i++) { //Add a new object property called x1...x2... to the variable x. x["x" + i] = 'variable'+i; //Add a new string to the Array array.push('variable' + i); } //Iterate through the properties of the x object you just created for(var k in x) { //retrieve the item by using x["x1"] console.log(x[k]); } for(var i=0; i<array.length; i++) { //Retrieve array item by index (starts with zero) console.log(array[i]); } and lemmas in order to get all the synonyms:

example :

wordnet.synset

Demo:

from itertools import chain
from nltk.corpus import wordnet

synonyms = wordnet.synsets(text)
lemmas = set(chain.from_iterable([word.lemma_names() for word in synonyms]))

答案 2 :(得分:8)

你已经有了同义词。那就是Synset

>>> wn.synsets('small')
[Synset('small.n.01'),
 Synset('small.n.02'),
 Synset('small.a.01'),
 Synset('minor.s.10'),
 Synset('little.s.03'),
 Synset('small.s.04'),
 Synset('humble.s.01'),
 Synset('little.s.07'),
 Synset('little.s.05'),
 Synset('small.s.08'),
 Synset('modest.s.02'),
 Synset('belittled.s.01'),
 Synset('small.r.01')]

这是网络界面为您提供的顶级条目列表。

如果您还想要“类似”列表,那与同义词不同。为此,请在每个similar_tos()上致电Synset

因此,要显示与网站相同的信息,请从以下内容开始:

for ss in wn.synsets('small'):
    print(ss)
    for sim in ss.similar_tos():
        print('    {}'.format(sim))

当然,该网站还会打印词性(sim.pos),词条列表(sim.lemma_names),定义(sim.definition)和示例(sim.examples )对于两个级别的每个synset。它通过词性对它们进行分组,并添加到您可以遵循的其他内容的链接中,等等。但这应该足以让你开始。

答案 3 :(得分:1)

  

最简单的程序来打印给定单词的同义词

from nltk.corpus import wordnet

for syn in wordnet.synsets("good"):
    for name in syn.lemma_names():
        print(name)

答案 4 :(得分:1)

以下是一些使 NLTK 更易于使用的辅助函数,以及如何使用这些函数的两个示例。

def download_nltk_dependencies_if_needed():
    try:
        nltk.word_tokenize('foobar')
    except LookupError:
        nltk.download('punkt')
    try:
        nltk.pos_tag(nltk.word_tokenize('foobar'))
    except LookupError:
        nltk.download('averaged_perceptron_tagger')

def get_some_word_synonyms(word):
    word = word.lower()
    synonyms = []
    synsets = wordnet.synsets(word)
    if (len(synsets) == 0):
        return []
    synset = synsets[0]
    lemma_names = synset.lemma_names()
    for lemma_name in lemma_names:
        lemma_name = lemma_name.lower().replace('_', ' ')
        if (lemma_name != word and lemma_name not in synonyms):
            synonyms.append(lemma_name)
    return synonyms

def get_all_word_synonyms(word):
    word = word.lower()
    synonyms = []
    synsets = wordnet.synsets(word)
    if (len(synsets) == 0):
        return []
    for synset in synsets:
        lemma_names = synset.lemma_names()
        for lemma_name in lemma_names:
            lemma_name = lemma_name.lower().replace('_', ' ')
            if (lemma_name != word and lemma_name not in synonyms):
                synonyms.append(lemma_name)
    return synonyms

示例 1:get_some_word_synonyms

这种方法倾向于返回最相关的同义词,但像“angry”这样的词不会返回任何同义词。

download_nltk_dependencies_if_needed()

words = ['dog', 'fire', 'erupted', 'throw', 'sweet', 'center', 'said', 'angry', 'iPhone', 'ThisIsNotARealWorddd', 'awesome', 'amazing', 'jim dandy', 'change']

for word in words:
    print('Synonyms for {}:'.format(word))
    synonyms = get_some_word_synonyms(word)
    for synonym in synonyms:
        print("    {}".format(synonym))

示例 1 输出:

Synonyms for dog:
    domestic dog
    canis familiaris
Synonyms for fire:
Synonyms for erupted:
    erupt
    break out
Synonyms for throw:
Synonyms for sweet:
    henry sweet
Synonyms for center:
    centre
    middle
    heart
    eye
Synonyms for said:
    state
    say
    tell
Synonyms for angry:
Synonyms for iPhone:
Synonyms for ThisIsNotARealWorddd:
Synonyms for awesome:
    amazing
    awe-inspiring
    awful
    awing
Synonyms for amazing:
    amaze
    astonish
    astound
Synonyms for jim dandy:
Synonyms for change:
    alteration
    modification

示例 2:get_all_word_synonyms

这种方法将返回所有可能的同义词,但有些可能不是很相关。

download_nltk_dependencies_if_needed()

words = ['dog', 'fire', 'erupted', 'throw', 'sweet', 'center', 'said', 'angry', 'iPhone', 'ThisIsNotARealWorddd', 'awesome', 'amazing', 'jim dandy', 'change']

for word in words:
    print('Synonyms for {}:'.format(word))
    synonyms = get_some_word_synonyms(word)
    for synonym in synonyms:
        print("    {}".format(synonym))

示例 2 输出:

Synonyms for dog:
    domestic dog
    canis familiaris
    frump
    cad
    bounder
    blackguard
    hound
    heel
    frank
    frankfurter
    hotdog
    hot dog
    wiener
    wienerwurst
    weenie
    pawl
    detent
    click
    andiron
    firedog
    dog-iron
    chase
    chase after
    trail
    tail
    tag
    give chase
    go after
    track
Synonyms for fire:
    firing
    flame
    flaming
    ardor
    ardour
    fervor
    fervour
    fervency
    fervidness
    attack
    flak
    flack
    blast
    open fire
    discharge
    displace
    give notice
    can
    dismiss
    give the axe
    send away
    sack
    force out
    give the sack
    terminate
    go off
    arouse
    elicit
    enkindle
    kindle
    evoke
    raise
    provoke
    burn
    burn down
    fuel
Synonyms for erupted:
    erupt
    break out
    irrupt
    flare up
    flare
    break open
    burst out
    ignite
    catch fire
    take fire
    combust
    conflagrate
    come out
    break through
    push through
    belch
    extravasate
    break
    burst
    recrudesce
Synonyms for throw:
    stroke
    cam stroke
    shed
    cast
    cast off
    shake off
    throw off
    throw away
    drop
    thrust
    give
    flip
    switch
    project
    contrive
    bewilder
    bemuse
    discombobulate
    hurl
    hold
    have
    make
    confuse
    fox
    befuddle
    fuddle
    bedevil
    confound
Synonyms for sweet:
    henry sweet
    dessert
    afters
    confection
    sweetness
    sugariness
    angelic
    angelical
    cherubic
    seraphic
    dulcet
    honeyed
    mellifluous
    mellisonant
    gratifying
    odoriferous
    odorous
    perfumed
    scented
    sweet-scented
    sweet-smelling
    fresh
    unfermented
    sugared
    sweetened
    sweet-flavored
    sweetly
Synonyms for center:
    centre
    middle
    heart
    eye
    center field
    centerfield
    midpoint
    kernel
    substance
    core
    essence
    gist
    heart and soul
    inwardness
    marrow
    meat
    nub
    pith
    sum
    nitty-gritty
    center of attention
    centre of attention
    nerve center
    nerve centre
    snapper
    plaza
    mall
    shopping mall
    shopping center
    shopping centre
    focus on
    center on
    revolve around
    revolve about
    concentrate on
    concentrate
    focus
    pore
    rivet
    halfway
    midway
Synonyms for said:
    state
    say
    tell
    allege
    aver
    suppose
    read
    order
    enjoin
    pronounce
    articulate
    enounce
    sound out
    enunciate
    aforesaid
    aforementioned
Synonyms for angry:
    furious
    raging
    tempestuous
    wild
Synonyms for iPhone:
Synonyms for ThisIsNotARealWorddd:
Synonyms for awesome:
    amazing
    awe-inspiring
    awful
    awing
Synonyms for amazing:
    amaze
    astonish
    astound
    perplex
    vex
    stick
    get
    puzzle
    mystify
    baffle
    beat
    pose
    bewilder
    flummox
    stupefy
    nonplus
    gravel
    dumbfound
    astonishing
    awe-inspiring
    awesome
    awful
    awing
Synonyms for jim dandy:
Synonyms for change:
    alteration
    modification
    variety
    alter
    modify
    vary
    switch
    shift
    exchange
    commute
    convert
    interchange
    transfer
    deepen

答案 5 :(得分:0)

这对我有用

wordnet.synsets('change')[0].hypernyms()[0].lemma_names()

答案 6 :(得分:0)

我最近为同义词编写了词库查找代码,我使用了此功能:

def find_synonyms(keyword) :

    synonyms = []
    for synset in wordnet.synsets(keyword):
        for lemma in synset.lemmas():
            synonyms.append(lemma.name())

    return str(synonyms)

但是,如果您希望托管自己的字典,则可能对我在github页面上进行离线同义词词典查找的项目感兴趣:

https://github.com/syauqiex/offline_english_synonym_dictionary