要使用中文WordNet,先要下載nltk Corpora中的omw:
import nltk
nltk.download()
from nltk.corpus import wordnet as wn
from graphviz import Digraph
word="電腦"
digraph=Digraph("WordNet Graph")
digraph.node(name="root_node",label=word,color="orange",style="filled",fontcolor="white",fontsize="50",fontname="Microsoft YaHei")
sense_node_id=0
hyponym_node_id=0
hypernym_node_id=0
for sense in wn.synsets(word,lang='cmn'):
#詞義
sense_definition="\n".join(sense.definition().split(" "))
sense_lemma_names=sense.lemma_names('cmn')
sense_label="\n".join(sense_lemma_names)
sense_node_name="sense_node_"+str(sense_node_id)
digraph.node(name=sense_node_name,label=sense_label,style="filled",color="#008080",fontcolor="white",fontsize="25",fontname="Microsoft YaHei")
#digraph.edge("root_node",sense_node_name,label=sense_definition,color="#008080",fontcolor="#008080")
digraph.edge("root_node",sense_node_name,color="#008080",fontcolor="#008080")
sense_node_id+=1
#下位詞
for hyponym in sense.hyponyms():
hyponym_definition="\n".join(hyponym.definition().split(" "))
for hyponym_lemma_name in hyponym.lemma_names('cmn'):
hyponym_node_name="hyponym_node_"+str(hyponym_node_id)
digraph.node(name=hyponym_node_name,label=hyponym_lemma_name,style="filled",color="#ff6666",fontcolor="white",fontsize="15",fontname="Microsoft YaHei")
#digraph.edge(sense_node_name,hyponym_node_name,label=hyponym_definition,color="#ff6666",fontcolor="#ff6666")
digraph.edge(sense_node_name,hyponym_node_name,color="#ff6666",fontcolor="#ff6666")
hyponym_node_id+=1
'''
#上位詞
for hypernym in sense.hypernyms():
hypernym_definition="\n".join(hypernym.definition().split(" "))
for hypernym_lemma_name in hypernym.lemma_names('cmn'):
hypernym_node_name="hypernym_node_"+str(hypernym_node_id)
digraph.node(name=hypernym_node_name,label=hypernym_lemma_name,style="filled",color="#EEAD0E",fontcolor="white",fontsize="15",fontname="Microsoft YaHei")
#digraph.edge(hypernym_node_name,sense_node_name,label=hypernym_definition,color="#EEAD0E",fontcolor="#EEAD0E")
digraph.edge(hypernym_node_name,sense_node_name,color="#EEAD0E",fontcolor="#EEAD0E")
hypernym_node_id+=1
'''
digraph.view()
#digraph.render('d:/graph_test.dot', view=True)
注意:在graphviz的節點或者連線中如果要顯示中文,必須設置中文字體,如fontname="Microsoft YaHei",否則可能出現亂碼!