2017-06-13 109 views
1

我有一個函數,它看起來有點像這樣,它顯示了一個分佈圖,它具有印地語中的y軸標籤。Matplotlib.pyplot標籤不在標籤中顯示印地文文本,

def dispersionPlot(text, words): 
    tokens = tok.wordtokenize(text) 
    print(words) 
    x_length = len(tokens) 
    y_length = len(words) 
    x_list = [] 
    y_list = [] 
    for i in range(0 , x_length): 
     for j in range(0 , y_length): 
      if tokens[i] == words[j]: 
       x_list.append(i+1) 
       y_list.append(j) 
    plt.plot(x_list, y_list, "b|", scalex=.1) 
    plt.yticks(list(range(len(words))), words, color="b") 
    plt.ylim(-1, len(words)) 
    plt.xlabel("Lexical Distribution") 
    plt.show() 

現在,當我嘗試調用與印地文文本功能。然後我得到一個這樣的輸出。

text = "प्रदूषण आज के समय का सबसे बड़ा अभिशाप है जो हमारे विज्ञानं की देन है। प्रदूषण के बढ़ने से हमारे धरती पे बहुत सी समस्याएं पैदा हो गई जिसे अगर समय रहते न रोक गया तो वो दिन दूर नही जब धीरे-धीरे सब खतम हो जायेगा। प्रदुषण के तत्त्व मनुष्यों द्वारा उत्पन्न किया गया पदार्थ या वेस्ट मटेरियल होता है जो की प्राकृतिक संसाधन जैसे की वायु, जल और भूमि आदि को प्रदूषित करते है| प्रदूषण जहरीली गैस, कीटनाशक, शाकनाशी, कवकनाशी, ध्वनि, कार्बनिक मिश्रण, रेडियोधर्मी पदार्थ हो सकते है। दिन पर दिन वनो की कटाई, कारखानो का प्रदूषित धुआं, वाहनो का धुँआ हमारे पूरे वातावरण को दूषित करता जा रहा है। प्रदूषण कई तरह के होते है परन्तु इनमे से सबसे हानिकारक जल प्रदूषण, वायु प्रदूषण, और ध्वनि प्रदूषण है। नगरो का सारा कूड़ा करकट और मल जल में डाल दिया जाता है जिससे हमारे पीने का पानी अशुद्ध हो गया है और इसके सेवन से हमारे शरीर को अनेक तरह की बीमारियां लग रही है। वायु प्रदूषण हमारे द्वारा उत्पन की गई गसो से पूरी हवा में फ़ैल जाता है और वही दूषित हवा को हम श्वास के साथ अंदर लेते है और कई तरह की बिमारियों का शिकार बन जाते है। ध्वनि प्रदूषण का कारण बढ़ती जनसख्या है जिसके कारण शोरगुल बढ़ता जा रहा है जैसे की वाहनो का शोर, कारखानो में मशीनो का शोर इत्यादि । प्रदूषण पर नियंत्रण पाने के लिए संयुक्त प्रयास की आवश्यकता है जिससे की हम एक स्वस्थ्य और प्रदुषण मुक्त वातावरण पा सके।" 
words = ["है", "प्रदूषण"] 
dispersionPlot(text, words) 

Output

正如你可以看到的y蜱的印地文的話沒有得到顯示。難道我做錯了什麼?有沒有辦法來解決這個問題?

回答

1

顯然matplotlib不知道如何呈現字符。解決這個問題的一種方法是告訴matplotlib要使用哪種字體。例如,假設你會使用「Nirmala」。將字體文件放在適當的位置,您可以這樣編碼:

注意:我不確定您的tok.wordtokenize(text)是如何工作的(類似於nltkword_tokenize(s)?)。所以我將該行更改爲tokens = text.split()。希望你不會介意。

from matplotlib import pyplot as plt 
from matplotlib.font_manager import FontProperties 

def dispersionPlot(text, words): 
    tokens = text.split() 
    print(words) 
    x_length = len(tokens) 
    y_length = len(words) 
    x_list = [] 
    y_list = [] 
    for i in range(0 , x_length): 
     for j in range(0 , y_length): 
      if tokens[i] == words[j]: 
       x_list.append(i+1) 
       y_list.append(j) 
    plt.plot(x_list, y_list, "b|", scalex=.1) 
    hindi_font = FontProperties(fname = 'Nirmala.ttf') 
    plt.yticks(list(range(len(words))), words, color="b", fontproperties=hindi_font) 
    plt.ylim(-1, len(words)) 
    plt.xlabel("Lexical Distribution") 
    plt.show() 

text = "प्रदूषण आज के समय का सबसे बड़ा अभिशाप है जो हमारे विज्ञानं की देन है। प्रदूषण के बढ़ने से हमारे धरती पे बहुत सी समस्याएं पैदा हो गई जिसे अगर समय रहते न रोक गया तो वो दिन दूर नही जब धीरे-धीरे सब खतम हो जायेगा। प्रदुषण के तत्त्व मनुष्यों द्वारा उत्पन्न किया गया पदार्थ या वेस्ट मटेरियल होता है जो की प्राकृतिक संसाधन जैसे की वायु, जल और भूमि आदि को प्रदूषित करते है| प्रदूषण जहरीली गैस, कीटनाशक, शाकनाशी, कवकनाशी, ध्वनि, कार्बनिक मिश्रण, रेडियोधर्मी पदार्थ हो सकते है। दिन पर दिन वनो की कटाई, कारखानो का प्रदूषित धुआं, वाहनो का धुँआ हमारे पूरे वातावरण को दूषित करता जा रहा है। प्रदूषण कई तरह के होते है परन्तु इनमे से सबसे हानिकारक जल प्रदूषण, वायु प्रदूषण, और ध्वनि प्रदूषण है। नगरो का सारा कूड़ा करकट और मल जल में डाल दिया जाता है जिससे हमारे पीने का पानी अशुद्ध हो गया है और इसके सेवन से हमारे शरीर को अनेक तरह की बीमारियां लग रही है। वायु प्रदूषण हमारे द्वारा उत्पन की गई गसो से पूरी हवा में फ़ैल जाता है और वही दूषित हवा को हम श्वास के साथ अंदर लेते है और कई तरह की बिमारियों का शिकार बन जाते है। ध्वनि प्रदूषण का कारण बढ़ती जनसख्या है जिसके कारण शोरगुल बढ़ता जा रहा है जैसे की वाहनो का शोर, कारखानो में मशीनो का शोर इत्यादि । प्रदूषण पर नियंत्रण पाने के लिए संयुक्त प्रयास की आवश्यकता है जिससे की हम एक स्वस्थ्य और प्रदुषण मुक्त वातावरण पा सके।" 
words = ["है", "प्रदूषण"] 
dispersionPlot(text, words) 

enter image description here

+0

我使用這個功能在一個包會,相對文件地址的工作? – Djokester

+1

[document](https://matplotlib.org/api/font_manager_api.html?highlight=fontproperties#matplotlib.font_manager.FontProperties)說:「或者,可以使用.ttf文件的絕對路徑指定字體,使用fname kwarg「。我會說試試看。 –