python nltk graphviz 可視化中文 WordNet

要使用中文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",否則可能出現亂碼!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章