使用python NLTK中的wordnet接口写一个遍历wordnet的程序
WordNet是面向语义的英语词典,类似于传统字典。它是NLTK语料库的一部分,可以被这样调用:>>>from nltk.corpus import wordnet as wn
Wordnet可以看作一棵庞大的词汇树,在树的某些局部是图,但这并不影响到我们对它的遍历。
之需要将所有遍历的词语节点放到tuple中,自然会去除重复,也就知道它下面有多少个词了。
wordnet的根节点是entity,那么这个遍历wordnet的程序可以写成一个遍历树的递归的程序。
然而这个递归的程序为并不会写,所以来求助大家。希望大家能够帮助给出能够跑起来的程序。
>>> printwn.synsets('entity')
获取entity这个单词的义项列表。
然后这个义项会有多个子节点:
>>> list = wn.synsets('entity')
>>> print list.hyponyms()
大致的过程就是这样,总节点数量应该是8万多个。
自己把这个程序写出来了,这个程序能够正确的计算wordnet中的节点数量,但是代码写得很拙劣,希望各位提出改进的意见:# -*- coding: utf-8 -*-
import nltk
from nltk.corpus import wordnet as wn
#一个全局列表a
global a
a = []
#返回一个单词的全部子节点
def getAllSub(list=[]):
if len(list) == 0:
return
for n in list:
a.append(n)
getAllSub(n.hyponyms())
getAllSub(n.instance_hyponyms())
if __name__ == "__main__":
#返回一个单词的同义词集列表g
g = wn.synsets('entity')
getAllSub(g)
s= set(a)
print(len(s))可以看到这里我使用了全局的变量来返回递归函数计算的值,那么怎样不使用全局变量来返回计算后的值呢,请大家指教~ 试试networkx包,有很多现成的包和方法可用。
https://networkx.github.io/
页:
[1]