You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成孟加拉语文本词云时单词辅音被单独拆分显示如何解决?

问题原因
  • 核心原因是wordcloud库默认的文本处理逻辑没有适配孟加拉语的字素组合规则:孟加拉语属于元音附标文字,单个语义上的“词/字”通常由辅音基字+元音附标/辅音连写等多个Unicode码点组合而成,wordcloud默认会按单个码点拆分处理,直接把辅音、附标拆成独立单元显示。
  • 代码中的" ".join(data)写法错误:pd.read_csv返回的是DataFrame对象,直接join(data)只会拼接DataFrame的列名,而非你需要的文本列内容,导致输入给词云的文本本身就是错误的。
  • 你使用的正则规则r"[\u0980-\u09FF]+"虽然覆盖了孟加拉语Unicode范围,但wordcloud的regexp参数是用于匹配可分词单元的,单独用这个规则还是无法解决字素组合拆分的问题。
修复方案

你可以通过绕过wordcloud自带的分词逻辑、提前完成孟加拉语正确词频统计的方式解决问题,具体步骤和修改后代码如下:

  1. 正确提取CSV中的文本列内容,不要直接拼接整个DataFrame
  2. 使用适配孟加拉语连写规则的正则匹配完整词单元,提前统计词频
  3. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:45:07