37

WordNet 很棒,但我很难在 nltk 中获得同义词。如果您搜索类似此处的“小”一词,它会显示所有同义词。

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

4

7 回答 7

60

如果你想要同义词集中的同义词(也就是组成集合的引理),你可以通过以下方式获得它们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']    
...
于 2015-09-22T13:55:02.940 回答
17

您可以使用wordnet.synsetlemmas来获取所有同义词:

例子 :

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]))

演示:

>>> synonyms = wordnet.synsets('change')
>>> set(chain.from_iterable([word.lemma_names() for word in synonyms]))
set([u'interchange', u'convert', u'variety', u'vary', u'exchange', u'modify', u'alteration', u'switch', u'commute', u'shift', u'modification', u'deepen', u'transfer', u'alter', u'change'])
于 2016-02-12T20:41:13.647 回答
13

您可能对以下内容感兴趣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')]

这与 Web 界面为您提供的顶级条目列表相同。

如果您还想要“类似”列表,那与同义词不同。为此,您调用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)。它按词性对它们进行分组,并添加到您可以关注的其他内容的链接中,等等。但这应该足以让你开始。

于 2013-10-08T21:35:09.860 回答
3

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

from nltk.corpus import wordnet

for syn in wordnet.synsets("good"):
    for name in syn.lemma_names():
        print(name)
于 2018-09-09T13:09:45.407 回答
1

Here are some helper functions to make NLTK easier to use, and two examples of how those functions can be used.

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

Example 1: get_some_word_synonyms

This approach tends to return the most relevant synonyms, but some words like "angry" won't return any 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))

Example 1 output:

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

Example 2: get_all_word_synonyms

This approach will return all possible synonyms, but some may not be very relevant.

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))

Example 2 output:

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
于 2021-05-05T12:14:40.820 回答
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

于 2020-04-19T09:15:01.060 回答
0

这对我有用

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

于 2017-09-28T16:37:45.337 回答