Python自然语言处理第二章-2.5 WordNet(II)——wordnet的层次结构
2017-11-19 19:54
477 查看
WordNet(II)——wordnet的层次结构
本节知识结构图下位词集
上位词集
词集的路径
特别注意:
部分方法在书中出现时,方法名后面并没有括号,但是笔者在方法名后加了括号( )后才输出预期的结果,否则会输出其他信息,比如:>>> wn.synset('car.n.01').hypernyms()#有括号,输出预期结果 [Synset('motor_vehicle.n.01')] >>> wn.synset('car.n.01').hypernyms#无括号,输出了其他信息 <bound method Synset.hypernyms of Synset('car.n.01')> >>>
一、本节知识结构
结合下图,学习找到一个词集的上位词集和下位词集的方法(函数):motorcar=wn.synset('car.n.01')
二、下位词集hyponyms()
0. 首先获得一个词集(简洁起见引入变量motorcar)
>>> motorcar=wn.synset('car.n.01') >>> motorcar Synset('car.n.01')
1.下位词集hyponyms()
该方法是由一个词集调用的:>>> motorcar.hyponyms() [Synset('ambulance.n.01'), Synset('beach_wagon.n.01'), Synset('bus.n.04'), Synse t('cab.n.03'), Synset('compact.n.03'), Synset('convertible.n.01'), Synset('coupe .n.01'), Synset('cruiser.n.01'), Synset('electric.n.01'), Synset('gas_guzzler.n. 01'), Synset('hardtop.n.01'), Synset('hatchback.n.01'), Synset('horseless_carria ge.n.01'), Synset('hot_rod.n.01'), Synset('jeep.n.01'), Synset('limousine.n.01') , Synset('loaner.n.02'), Synset('minicar.n.01'), Synset('minivan.n.01'), Synset( 'model_t.n.01'), Synset('pace_car.n.01'), Synset('racer.n.02'), Synset('roadster .n.01'), Synset('sedan.n.01'), Synset('sport_utility.n.01'), Synset('sports_car. n.01'), Synset('stanley_steamer.n.01'), Synset('stock_car.n.01'), Synset('subcom pact.n.01'), Synset('touring_car.n.01'), Synset('used-car.n.01')]
其实该输出结果是一个列表,要查看其中的某个词集,可以对motorcar.hyponyms()使用索引操作:
>>> type(motorcar.hyponyms())#查看类型 <type 'list'> >>> motorcar.hyponyms()[0]#索引操作 Synset('ambulance.n.01')
2. 另对书中p74页的一个链表推导式进行分析:
>>> types_of_motorcar =motorcar.hyponyms() >>>sorted([lemma.name() for synset in types_of_motorcar for lemma in synset.lem mas()]) [u'Model_T', u'S.U.V.', u'SUV', u'Stanley_Steamer', u'ambulance', u'beach_waggon ', u'beach_wagon', u'bus', u'cab', u'compact', u'compact_car', u'convertible', u 'coupe', u'cruiser', u'electric', u'electric_automobile', u'electric_car', u'est ate_car', u'gas_guzzler', u'hack', u'hardtop', u'hatchback', u'heap', u'horseles s_carriage', u'hot-rod', u'hot_rod', u'jalopy', u'jeep', u'landrover', u'limo', u'limousine', u'loaner', u'minicar', u'minivan', u'pace_car', u'patrol_car', u'p haeton', u'police_car', u'police_cruiser', u'prowl_car', u'race_car', u'racer', u'racing_car', u'roadster', u'runabout', u'saloon', u'secondhand_car', u'sedan', u'sport_car', u'sport_utility', u'sport_utility_vehicle', u'sports_car', u'squa d_car', u'station_waggon', u'station_wagon', u'stock_car', u'subcompact', u'subc ompact_car', u'taxi', u'taxicab', u'tourer', u'touring_car', u'two-seater', u'us ed-car', u'waggon', u'wagon'] >>>
对于该链表的分析,可以按照图中1,2,3,4的顺序分析,以后遇到类似的长的链表,就可以如此类似地“拆开”分析。
三、上位词集hypernyms()
1. 获取上位词hypernyms()
该方法也是由一个词集调用的:>>> motorcar.hypernyms() [Synset('motor_vehicle.n.01')]
仔细分析上段代码输出结果与下段代码输出结果的区别:
>>> motorcar.hypernyms()[0] Synset('motor_vehicle.n.0 b4ed 1')
其实前者的输出结果也是一个词集列表(有一层中括号),是可以进行索引操作的,后者的结果没有中括号,是该列表的第一个值(一个词集),也是唯一一个,但不排除有的词有多个上位词。
2. 查看类型
>>> type(motorcar.hypernyms())#查看类型 <type 'list'> >>> type(motorcar.hypernyms()[0])#查看类型 <class 'nltk.corpus.reader.wordnet.Synset'> >>>
四、词集的路径hypernym_paths()
词集的路径,顾名思义,就是追溯词集的上位词集的上位词集的上位词集······,而这就自然而然的形成了“路径”。这里用到的函数(方法)自然和获取上位词集的函数(方法)——hypernyms()有些渊源,很显然获取路径的函数命名与求上位词的函数命名都有hypernym的字符,注意到这些,对梳理和记忆很有帮助。1. 获取词集的路径
该方法由一个词集调用:>>> paths= wn.synset('car.n.01').hypernym_paths() #或者paths=motorcar.hypernym_paths()
输出结果其实一个嵌套列表,因为一条路径便是paths的一个值,而一条路径也是由一个列表存放的:
>>> type(paths) <type 'list'> >>> type(paths[0]) <type 'list'>
可以(使用索引)进一步查看路径的细节paths[1],paths[0]:
>>> paths[1] [Synset('entity.n.01'), Synset('physical_entity.n.01'), Synset('object.n.01'), S ynset('whole.n.02'), Synset('artifact.n.01'), Synset('instrumentality.n.03'), Sy nset('conveyance.n.03'), Synset('vehicle.n.01'), Synset('wheeled_vehicle.n.01'), Synset('self-propelled_vehicle.n.01'), Synset('motor_vehicle.n.01'), Synset('ca r.n.01')] >>> paths[0] [Synset('entity.n.01'), Synset('physical_entity.n.01'), Synset('object.n.01'), S ynset('whole.n.02'), Synset('artifact.n.01'), Synset('instrumentality.n.03'), Sy nset('container.n.01'), Synset('wheeled_vehicle.n.01'), Synset('self-propelled_v ehicle.n.01'), Synset('motor_vehicle.n.01'), Synset('car.n.01')] >>>
多学一点:取得第一条路径中的所有词集的“名字”,并以列表的形式输出
>>> [synset.name() for synset in paths[0]] [u'entity.n.01', u'physical_entity.n.01', u'object.n.01', u'whole.n.02', u'artifact.n.01', u'instrumentality.n.03', u'container.n.01', u'wheeled_vehicle.n.01',u'self-propelled_vehicle.n.01', u'motor_vehicle.n.01', u'car.n.01']
2. 获取根上位词集root_hypernyms()
最笼统的上位:>>> motorcar.root_hypernyms() [Synset('entity.n.01')]
在做本章课后题时,返回来将这节的内容再看了一遍,重新梳理了思路,得到进一步的理解,觉得可以整理下来分享,如有错误,欢迎大家指正~~~
相关文章推荐
- Python自然语言处理第二章-2.5WordNet(III)——更多词汇关系:部分、整体、集合、蕴含等
- Python自然语言处理第二章-2.5 WordNet(I)——意义与同义词
- Python自然语言处理第二章-2.5WordNet(IV)——语义相似度
- WCF 第二章 契约 定义类的层次结构
- 第二章 定义类的层次结构
- WCF 第二章 契约 定义类的层次结构
- wordnet 词汇层次结构及词汇关系总结
- GXT之旅:第二章:GXT组件(1)——组件层次结构
- 递归降序遍历目录层次结构,并按文件类型计数
- Android屏幕元素层次结构
- javaIo流的层次结构以及字节流与字符流的区别
- MDX 层次结构导航
- java异常 之 异常的层次结构
- OpenGL ES1.1.12 第二章 2.5
- 2.5 第二章小结
- 集合类层次结构关系
- BW的层次结构(hierarchy)在Webi报表中展现
- 一周第五次课(10月20日) 2.1/2.2 系统目录结构 2.3 ls命令 2.4 文件类型 2.5 alias命令
- MFC类库的层次结构
- iOS操作系统的层次结构