0

I am trying to create wordcloud to a text in Hebrew. The text is:

את הסיפור שלנו סיפרנו לעצמנו כל הזמן. בכפייתיות. בעל פה. לפעמים התעייפנו עוד לפני שהתחלנו ובכל זאת סיפרנו במשך שעות. הקשבנו רוב קשב אחד לשני, כי בכל ערב שבו סופר הסיפור, התחוורו לנו פרטים חדשים, גם שנים רבות אחרי שכבר לא היינו שם. למשל, לא ידענו שחלק מילדי קבוצת "אורן" שהיו מבוגרים מאיתנו בחמש שנים עבדו עם הבוקרים. ושהם חיו במובלעת של חיי כפר הונגרי בתוך הקיבוץ שלנו. לא ידענו שלוֹפֶס ("זין של סוס") שימש כברְכת בוקר טוב וערב טוב. לא ידענו שאיתי מ"אורן" רכב על סוסה ברחבי הגבעות שלנו באין מפריע כבר כשהיה בן שש. הסיפורים סופרו רק בעל פה, בניגוד לכל התקנונים הכתובים. הם בקעו מבורות הממטרות בדשאים שהקיפו את חדר האוכל, מחרכי המבצר הצלבני שלנו, מהחריצים במדרכות האבן הצרות והיפות. את סיפורינו היינו מספרים בעיניים בורקות. אמרנו, "לא ייאמן שאת הפרות היו שוחטים על הרמפה, לעינינו, את ראשי התרנגולות היו מולקים, כאילו כלום," אבל דיברנו כאילו היו אלה שנותינו היפות. ואלה באמת היו שנותינו היפות, טבולות בזהב. דווקא כי חיינו בטמפרטורה של מתחת לאפס בחום הלוהט של שמש נצחית. היינו דרוכים ומסוקרנים בכל יום מחדש. היינו ערים בבקרים וערים בלילות. רצנו ודילגנו ממקום למקום, ידינו דביקות משרף אורנים וחלב תאנים. כל כך קרובים היינו אחד לשני, כל היום וכל הלילה, ובכל זאת לא ידענו כלום אחד על השני. ולא ידענו כלום על עצמנו. תמיד סיפרנו, עוד אז, בלילות ירח כתום, בבית הילדים. כבר אז סיפרנו יומם ולילה, כדי לישון, כדי לא לישון, יושבים במסדרון בפתחי החדרים, או על המיטות בתוך החדרים, ומגזימים למוות את חופשותינו העירוניות עם המשפחות הביולוגיות שלנו (נסענו, אמא ואבא ואחים. במשך שבוע היינו משפחה עירונית, לבושים בבגדי נסיעה חגיגיים שעברו בין כל הילדים הנוסעים לעיר). כשחזרנו, כל אחד לחוד מדירת הקיבוץ ברחוב שינקין בתל אביב, סיפרנו על אותו קרקס מדראנו שכולם הלכו אליו. אלא שאותו ערב שבו היינו עם משפחתנו הביולוגית בקרקס לא דמה לערבים האחרים - באותו ערב אריות ברחו מהכלוב, לוליין נפל מהחבל, ככה אמרנו. סיפרנו אחד לשני סיפורים שבינם לבין המציאות לא היה דבר. לפעמים, אחרי שעזבנו, ניסינו לספר את סיפורנו לעירוניים. לא הצלחנו להעביר את הסיפור, לא את העלילה ולא את הטון. קולנו צרם, כ

And I use the following code (The text is given in a seperate .txt file):

import codecs
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
stopwords = set(STOPWORDS)
book_txt_f = codecs.open(fn, "r", encoding="UTF-8")
book_txt = book_txt_f.read(2000)

wordcloud = WordCloud(
        background_color='white', stopwords=stopwords,  max_words=200, max_font_size=40, scale=3, random_state=1).generate(str(book_txt))

fig = plt.figure(1, figsize=(6, 6))
plt.axis('off')
plt.imshow(wordcloud)
plt.show()

But the figure (attached) can't present Hebrew: enter image description here What might be the reason? How can I fix it?

5
  • 1
    It looks like the encoding of your incoming file is not the same as when you read it in (i.e. book_txt.decode("utf-8") ? - maybe the text file is Unicode encoded?
    – blurfus
    Commented Apr 24, 2019 at 19:43
  • @ochi utf-8 should handle Unicode, isn't it? How can I check if the file is unicode encoded? I am using windows
    – Cranjis
    Commented Apr 24, 2019 at 20:01
  • Can you post a snippet of the file? Could be it's encoded differently such as utf-16 but it should be in utf-8. Commented Apr 24, 2019 at 20:22
  • fixed using this thread: stackoverflow.com/questions/54063438/…
    – Cranjis
    Commented Apr 26, 2019 at 12:04
  • Possible duplicate of create wordcloud in python for foreign language (Hebrew)
    – blurfus
    Commented Apr 26, 2019 at 17:19

1 Answer 1

1

This is not actually an issue with the encoding of the text file (you can check this with print(book_txt)), but with the font used by WordCloud. You can specify a font_path when creating the WordCloud object. For example, using the Courier Bold font on Windows:

wordcloud = WordCloud(
        font_path = 'C:\Windows\Fonts\courbd.ttf',
        background_color='white',
        stopwords=stopwords, 
        max_words=200,
        max_font_size=40,
        scale=3,
        random_state=1).generate(book_txt)

Output:

Hebrew word cloud

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.