создать Wordcloud на Python для иностранного языка (иврит) - PullRequest
0 голосов
/ 06 января 2019

Я хочу создать облако слов. Когда моя строка на английском, все работает нормально:

from wordcloud import WordCloud
from matplotlib import pyplot as plt
text="""Softrock 40 - close to the 6 MHz that the P6D requires (6.062 according) - https://groups.yahoo.com/neo/groups/softrock40/conversations/messages
I want the USB model that has a controllable (not fixed) central frequency."""
wordcloud = WordCloud().generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

enter image description here

Но когда я делаю то же самое на иврите, он не определяет шрифт, и я получаю только пустые прямоугольники:

text="""תחילתו של חורף מאכזב למדיי, מומחי המים בישראל מאמינים כי לראשונה השנה מפלס הכנרת יעלה בצורה משמעותית מגשמי הסערה שתחל היום"""
wordcloud = WordCloud().generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

enter image description here

Есть идеи?

1 Ответ

0 голосов
/ 06 января 2019

Это не столько связано с самим wordcloud, сколько с рендерингом: вы используете (по умолчанию это) шрифт, который просто не содержит «определений» для ивритских символов. Таким образом, вместо этого он просто отображает прямоугольники.

Однако мы можем использовать шрифт, который поддерживает ивритские символы, например FreeSansBold . Мы можем передать путь к шрифту через конструктор WordCloud:

from wordcloud import WordCloud
from matplotlib import pyplot as plt

text="""תחילתו של חורף מאכזב למדיי, מומחי המים בישראל מאמינים כי לראשונה השנה מפלס הכנרת יעלה בצורה משמעותית מגשמי הסערה שתחל היום"""
wordcloud = WordCloud(<b>font_path='/usr/share/fonts/truetype/freefont/FreeSansBold.ttf'</b>).generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

, тогда генерируется следующее слово:

wordcloud generated with another font

Я не очень знаком с ивритом, но у меня сложилось впечатление, что слова пишутся слева направо, а не справа налево. В любом случае, если это проблема, мы можем использовать python-bidi, чтобы сначала обработать направление языка, например:

from wordcloud import WordCloud
from matplotlib import pyplot as plt
from bidi.algorithm import get_display

text="""תחילתו של חורף מאכזב למדיי, מומחי המים בישראל מאמינים כי לראשונה השנה מפלס הכנרת יעלה בצורה משמעותית מגשמי הסערה שתחל היום"""

bidi_text = <b>get_display(text)</b>

wordcloud = WordCloud(font_path='/usr/share/fonts/truetype/freefont/FreeSansBold.ttf').generate(bidi_text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

Для данного текста мы получаем следующее изображение:

wordcloud with Hebrew right-to-left

...