1

当我尝试在我的代码中运行阿拉伯语大数据时,我在 python 中遇到了 WordCloud 代码的一些问题:

from os import path
import codecs
from wordcloud import WordCloud
import arabic_reshaper
from bidi.algorithm import get_display
d = path.dirname(__file__)
f = codecs.open(path.join(d, 'C:/example.txt'), 'r', 'utf-8')
text = arabic_reshaper.reshape(f.read())
text = get_display(text)
wordcloud = WordCloud(font_path='arial',background_color='white', mode='RGB',width=1500,height=800).generate(text)
wordcloud.to_file("arabic_example.png")

这是我得到的错误:

回溯(最近一次通话最后):

文件“”,第 1 行,在 runfile('C:/Users/aam20/Desktop/python/codes/WordClouds/wordcloud_True.py', wdir='C:/Users/aam20/Desktop/python/codes/WordClouds')

文件“C:\Users\aam20\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”,第 705 行,运行文件 execfile(文件名,命名空间)

文件“C:\Users\aam20\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”,第 102 行,在 execfile exec(compile(f.read(), filename, 'exec') 中,命名空间)

文件“C:/Users/aam20/Desktop/python/codes/WordClouds/wordcloud_True.py”,第 28 行,文本 = get_display(text)

文件“C:\Users\aam20\Anaconda3\lib\site-packages\bidi\algorithm.py”,第 648 行,在 get_display resolve_implicit_levels(storage, debug)

文件“C:\Users\aam20\Anaconda3\lib\site-packages\bidi\algorithm.py”,第 466 行,在 resolve_implicit_levels

'%s 不允许在这里' % _ch['type']

AssertionError:此处不允许使用 RLI

有人可以帮助解决这个问题吗?

4

3 回答 3

3

我尝试使用下面提到的方法对文本进行预处理!在调用 reshaper 之前,它对我有用。

def removeWeirdChars(text):
    weirdPatterns = re.compile("["
                               u"\U0001F600-\U0001F64F"  # emoticons
                               u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                               u"\U0001F680-\U0001F6FF"  # transport & map symbols
                               u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                               u"\U00002702-\U000027B0"
                               u"\U000024C2-\U0001F251"
                               u"\U0001f926-\U0001f937"
                               u'\U00010000-\U0010ffff'
                               u"\u200d"
                               u"\u2640-\u2642"
                               u"\u2600-\u2B55"
                               u"\u23cf"
                               u"\u23e9"
                               u"\u231a"
                               u"\u3030"
                               u"\ufe0f"
                               u"\u2069"
                               u"\u2066"
                               u"\u200c"
                               u"\u2068"
                               u"\u2067"
                               "]+", flags=re.UNICODE)
    return weirdPatterns.sub(r'', text)
于 2019-08-15T08:18:55.877 回答
0

您的文本中有一个get_display()无法处理的奇怪字符。您可以找到此字符并将其添加到停用词列表中。然而,这可能会非常痛苦。一种快捷方式是创建一个包含最常见单词及其频率的字典并将其提供给generate_from_frequencies函数:

wordcloud = WordCloud(font_path='arial',background_color='white', mode='RGB',width=1500,height=800).generate_from_frequencies(YOURDICT)

有关更多信息,请查看我对这篇文章的回复。

于 2020-05-04T10:12:43.313 回答
0

以下是您可以简单地生成阿拉伯语 wordCloud 的方法:

import arabic_reshaper
from bidi.algorithm import get_display


reshaped_text = arabic_reshaper.reshape(text)
bidi_text = get_display(reshaped_text)
wordcloud = WordCloud(font_path='NotoNaskhArabic-Regular.ttf').generate(bidi_text)
wordcloud.to_file("worCloud.png")

这里是 Google colab 示例的链接:Colab notebook

于 2020-06-08T12:35:19.380 回答