Как сгенерировать wordcloud текста Bangla в Python?

Я пробовал код ниже:

!pip install python-bidi
from wordcloud import WordCloud
from matplotlib import pyplot as plt
from bidi.algorithm import get_display

text="""মুস্তাফিজ"""

bidi_text = get_display(text)
print(bidi_text)
# https://github.com/amueller/word_cloud/issues/367
# https://stackru.com/questions/54063438/create-wordcloud-in-python-for-foreign-language-hebrew
# https://www.omicronlab.com/bangla-fonts.html
rgx = r"[\u0980-\u09FF]+"
wordcloud = WordCloud(font_path='/content/Siyamrupali.ttf').generate(bidi_text)

#wordcloud = WordCloud(font_path='/content/FreeSansBold.ttf').generate(bidi_text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

тогда я получаю эту ошибку:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-87-56d899c0de07> in <module>()
     12 # https://www.omicronlab.com/bangla-fonts.html
     13 rgx = r"[\u0980-\u09FF]+"
---> 14 wordcloud = WordCloud(font_path='/content/Siyamrupali.ttf').generate(bidi_text)
     15 
     16 #wordcloud = WordCloud(font_path='/content/FreeSansBold.ttf').generate(bidi_text)

2 frames
/usr/local/lib/python3.6/dist-packages/wordcloud/wordcloud.py in generate_from_frequencies(self, frequencies, max_font_size)
    381         if len(frequencies) <= 0:
    382             raise ValueError("We need at least 1 word to plot a word cloud, "
--> 383                              "got %d." % len(frequencies))
    384         frequencies = frequencies[:self.max_words]
    385 

ValueError: нам нужно хотя бы 1 слово, чтобы построить облако слов, получилось 0.

эта строка не выбирает слова Bangla: wordcloud = WordCloud(font_path='/content/Siyamrupali.ttf').generate(bidi_text)

я пробовал почти все шрифты отсюда для языка Bangla: https://www.omicronlab.com/bangla-fonts.html

ничего не работает

3 ответа

Вы не изменили регулярное выражение на свое, указанное в облаке слов. При обработке текста в облаке слов он не смог сопоставить шаблон и вернул пустой список. Передача переменной rgx при создании объекта облака слов решит вашу проблему.

      wordcloud = WordCloud(font_path='/content/Siyamrupali.ttf',regexp=rgx).generate(bidi_text)

Вот полный фрагмент кода.

      !pip install python-bidi
from wordcloud import WordCloud
from matplotlib import pyplot as plt
from bidi.algorithm import get_display

text="""মুস্তাফিজ"""

bidi_text = get_display(text)
print(bidi_text)
# https://github.com/amueller/word_cloud/issues/367
# https://stackoverflow.com/questions/54063438/create-wordcloud-in-python-for-foreign-language-hebrew
# https://www.omicronlab.com/bangla-fonts.html
rgx = r"[\u0980-\u09FF]+"
wordcloud = WordCloud(font_path='/content/Siyamrupali.ttf', 
regexp=rgx).generate(bidi_text)

#wordcloud = WordCloud(font_path='/content/FreeSansBold.ttf').generate(bidi_text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

Я следил за этим комментарием и в конечном итоге смог решить проблему в Ubuntu.

Шаг 1. ! Sudo apt-get install libfreetype6-dev libharfbuzz-dev libfribidi-dev gtk-doc-tools

Шаг 2:! Wget -O raqm-0.7.0.tar.gz https://raw.githubusercontent.com/python-pillow/pillow-depends/master/raqm-0.7.0.tar.gz

Теперь файл raqm-0.7.0.tar.gz должен быть в вашем разделе загрузок.

Шаг 3:! Tar -xzvf raqm-0.7.0.tar.gz

Шаг 4:! Cd raqm-0.7.0

Шаг 5 :! ./ configure --prefix= / usr && make -j4 && sudo make -j4 install

Шаг 6: Теперь вам просто нужно переустановить библиотеку Pillow. Активируйте правильную среду. Затем выполните следующие команды:

python3 -m pip install --upgrade pip python3 -m pip install --upgrade Pillow

Вот и все! Теперь у вас есть рабочая библиотека Pillow, которая может создавать в изображении правильный бенгальский и другие индийские шрифты.

Кроме того, как предложила @Farzana Eva в своем комментарии, вам необходимо передать переменную rgx в объекте wordcloud.

Я создал облако слов в Bangla, используя следующий код. Вы можете попробовать:

def generate_Word_cloud(я, автор_поста, словарь_слова, img_file, путь_корневого_слова):

      stop_word_file = stop_word_root_path+'/stopwords-bn.txt'
print(stop_word_file)
f = open(stop_word_file, "r", encoding="utf8")
stop_word = f.read().split("\n")
print(stop_word)

final_text = " ".join(author_post)
print(final_text)
wordcloud = WordCloud(stopwords = stop_word, font_path='/usr/share/fonts/truetype/freefont/kalpurush.ttf',
    width = 600, height = 500,max_font_size=300, max_words=vocabularyWordnumber,
                      min_word_length=4, background_color="black").generate(final_text)
wordcloud.to_file(img_file)
Другие вопросы по тегам