生成孟加拉语文本词云时单词辅音被单独拆分显示如何解决?
问题原因
- 核心原因是
wordcloud库默认的文本处理逻辑没有适配孟加拉语的字素组合规则:孟加拉语属于元音附标文字,单个语义上的“词/字”通常由辅音基字+元音附标/辅音连写等多个Unicode码点组合而成,wordcloud默认会按单个码点拆分处理,直接把辅音、附标拆成独立单元显示。 - 代码中的
" ".join(data)写法错误:pd.read_csv返回的是DataFrame对象,直接join(data)只会拼接DataFrame的列名,而非你需要的文本列内容,导致输入给词云的文本本身就是错误的。 - 你使用的正则规则
r"[\u0980-\u09FF]+"虽然覆盖了孟加拉语Unicode范围,但wordcloud的regexp参数是用于匹配可分词单元的,单独用这个规则还是无法解决字素组合拆分的问题。
修复方案
你可以通过绕过wordcloud自带的分词逻辑、提前完成孟加拉语正确词频统计的方式解决问题,具体步骤和修改后代码如下:
- 正确提取CSV中的文本列内容,不要直接拼接整个DataFrame
- 使用适配孟加拉语连写规则的正则匹配完整词单元,提前统计词频
- 调用
generate_from_frequencies方法传入词频生成词云,避免默认处理逻辑拆分字符
import pandas as pd from wordcloud import WordCloud import matplotlib.pyplot as plt from collections import Counter import re # 替换下方的text为你CSV文件中存储孟加拉语文本的实际列名 data = pd.read_csv('/content/gdrive/MyDrive/data.csv',encoding='UTF-8') all_text = " ".join(data['text'].dropna().astype(str).tolist()) # 适配孟加拉语连写、附标规则的正则,匹配完整词单元 bn_regex = r"[\u0980-\u09FF]+(?:[\u09BE-\u09D7\u09E2-\u09E3]|\u09CD[\u0980-\u09E3])*" words = re.findall(bn_regex, all_text) # 过滤停用词后统计词频 filtered_words = [w for w in words if w not in stopwords] word_counts = Counter(filtered_words) # 用词频生成词云 wc = WordCloud(width=800, height=400, mode="RGBA",background_color=None, colormap="hsv", stopwords = stopwords, font_path="kalpurush.ttf").generate_from_frequencies(word_counts) plt.figure(figsize=(7, 7)) plt.imshow(wc, interpolation='none') plt.axis("off") plt.show()
内容的提问来源于stack exchange,提问作者Papon sarker
相关产品推荐
相关产品推荐

