如何使用amueller的wordcloud库生成尼泊尔语词云?
嘿,我来帮你搞定用amueller的wordcloud库生成尼泊尔语词云的事儿!结合你提到的Setopati网站和需求,我整理了一步步的实操方案,亲测可用:
1. 先装必要的依赖库
首先得把需要的工具包装上,除了wordcloud本身,还要爬网页的requests、解析HTML的BeautifulSoup,以及处理尼泊尔语分词的indic-nlp-library:
pip install wordcloud requests beautifulsoup4 indic-nlp-library
2. 爬取Setopati的网页内容
Setopati是尼泊尔语新闻站,爬的时候要注意编码(必须是UTF-8),不然会乱码。下面是爬取并提取正文的示例代码,你可以根据网站实际结构调整选择器:
import requests from bs4 import BeautifulSoup # 目标网站URL url = "https://setopati.com/" # 加个User-Agent避免被反爬 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"} response = requests.get(url, headers=headers) response.encoding = "utf-8" # 强制指定UTF-8编码,确保尼泊尔语显示正常 # 解析网页,提取所有段落文本(如果正文在特定div里,就替换成对应的选择器) soup = BeautifulSoup(response.text, "html.parser") text_content = " ".join([p.get_text().strip() for p in soup.find_all("p")]) # 也可以用你提供的示例文本先测试 # text_content = """今日版面 English Logo 首页 政治 社会 观点 购物 艺术 体育 旅游 博客 文学天地 全球 图片库 总理的健康状况如何?政府取消辛迪加后全国票务柜台关闭 乌彭德拉·亚达夫再次发出不承认宪法的威胁 保德尔对德乌帕说——即使不是总理,甘尼什曼也被民众……"""
3. 处理尼泊尔语文本(分词+去停用词)
尼泊尔语不像英语靠空格分词,得用专门的工具。另外要过滤掉无意义的停用词(比如“को”“मा”这类虚词):
from indicnlp.tokenize import indic_tokenize # 用indic-nlp分词尼泊尔语文本 tokenized_text = indic_tokenize.trivial_tokenize(text_content, lang="ne") # 尼泊尔语停用词示例,你可以找更完整的列表扩展 nepali_stopwords = ["को", "मा", "ले", "लाई", "हरु", "थिए", "थियो", "हो", "हुन्छ", "हुने", "गर्नु", "गरेको", "यो", "यी", "उनको", "उनीहरु", "के", "कुनै", "जुन", "जस्तो", "तर", "अनि", "अरु", "भने", "भन्छन्"] # 过滤停用词,同时只保留尼泊尔语字符(Unicode范围U+0900到U+097F) filtered_tokens = [ token for token in tokenized_text if token not in nepali_stopwords and '\u0900' <= token <= '\u097F' ] # 把处理后的词拼接成字符串 processed_text = " ".join(filtered_tokens)
4. 生成尼泊尔语词云(核心:选对字体!)
这是最容易踩坑的地方——默认字体不支持尼泊尔语,必须用支持Devanagari脚本的字体,比如Noto Sans Devanagari(免费可下载):
from wordcloud import WordCloud import matplotlib.pyplot as plt # 替换成你下载的字体文件路径 font_path = "NotoSansDevanagari-Regular.ttf" # 配置词云参数 wordcloud = WordCloud( font_path=font_path, width=800, height=600, background_color="white", max_words=200, collocations=False # 避免生成词组,只保留单个词 ).generate(processed_text) # 显示词云 plt.figure(figsize=(10, 8)) plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") plt.show() # 保存词云到本地 wordcloud.to_file("nepali_wordcloud.png")
几个关键提示
- 字体必选对:如果词云显示方块,100%是字体不支持尼泊尔语,一定要用Noto Sans Devanagari这类支持Devanagari脚本的字体。
- 网页解析灵活调整:Setopati的网页结构可能会更新,你可以用浏览器的开发者工具查看正文所在的标签,调整BeautifulSoup的选择器。
- 停用词优化:找一份完整的尼泊尔语停用词列表,能大幅提升词云的质量,过滤掉无关的虚词。
- 编码别出错:爬取时一定要设置
response.encoding = "utf-8",否则尼泊尔语会变成乱码。
内容的提问来源于stack exchange,提问作者lpt
相关产品推荐
相关产品推荐

