5.1 意义与同义词
考虑(1a)中的句子。如果我们用 automobile 替换掉(1a)中的词 motorcar,变成(1b),句子的意思几乎保持不变:
>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('motorcar')
[Synset('car.n.01')]
因此,motorcar 只有一个可能的含义,它被定义为car.n.01
,car 的第一个名词意义。car.n.01
被称为 synset 或“同义词集”,意义相同的词(或“词条”)的集合:
>>> wn.synset('car.n.01').lemma_names()
['car', 'auto', 'automobile', 'machine', 'motorcar']
同义词集中的每个词可以有多种含义,例如:car 也可能是火车车厢、一个货车或电梯厢。但我们只对这个同义词集中所有词来说最常用的一个意义感兴趣。同义词集也有一些一般的定义和例句:
>>> wn.synset('car.n.01').definition()
'a motor vehicle with four wheels; usually propelled by an internal combustion engine'
>>> wn.synset('car.n.01').examples()
['he needs a car to get to work']
虽然定义帮助人们了解一个同义词集的本意,同义词集中的词往往对我们的程序更有用。为了消除歧义,我们将这些词标记为car.n.01.automobile
,car.n.01.motorcar
等。这种同义词集和词的配对叫做词条。我们可以得到指定同义词集的所有词条,查找特定的词条,得到一个词条对应的同义词集,也可以得到一个词条的“名字”:
>>> wn.synset('car.n.01').lemmas() ![[1]](/projects/nlp-py-2e-zh/Images/eeff7ed83be48bf40aeeb3bf9db5550e.jpg)
[Lemma('car.n.01.car'), Lemma('car.n.01.auto'), Lemma('car.n.01.automobile'),
Lemma('car.n.01.machine'), Lemma('car.n.01.motorcar')]
>>> wn.lemma('car.n.01.automobile') ![[2]](/projects/nlp-py-2e-zh/Images/6efeadf518b11a6441906b93844c2b19.jpg)
Lemma('car.n.01.automobile')
>>> wn.lemma('car.n.01.automobile').synset() ![[3]](/projects/nlp-py-2e-zh/Images/e941b64ed778967dd0170d25492e42df.jpg)
Synset('car.n.01')
>>> wn.lemma('car.n.01.automobile').name() ![[4]](/projects/nlp-py-2e-zh/Images/f3ad266a67457b4615141d6ba83e724e.jpg)
'automobile'
与词 motorcar 意义明确且只有一个同义词集不同,词 car 是含糊的,有五个同义词集:
>>> wn.synsets('car')
[Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'),
Synset('cable_car.n.01')]
>>> for synset in wn.synsets('car'):
... print(synset.lemma_names())
...
['car', 'auto', 'automobile', 'machine', 'motorcar']
['car', 'railcar', 'railway_car', 'railroad_car']
['car', 'gondola']
['car', 'elevator_car']
['cable_car', 'car']
为方便起见,我们可以用下面的方式访问所有包含词 car 的词条。
>>> wn.lemmas('car')
[Lemma('car.n.01.car'), Lemma('car.n.02.car'), Lemma('car.n.03.car'),
Lemma('car.n.04.car'), Lemma('cable_car.n.01.car')]
注意
轮到你来:写下词 dish 的你能想到的所有意思。现在,在 WordNet 的帮助下使用前面所示的相同的操作探索这个词。