You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Word Cloud库生成词云时每个词末尾出现撇号的问题排查

词云生成后每个词末尾出现多余撇号的排查与解决

问题描述

我用nltk.tokenize处理一个txt文件,分词后生成了新文件"File_B"。随后执行以下代码生成词云:

from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = open('File_B').read()
wordcloud = WordCloud(width=1600, height=800).generate(text)
wordcloud = WordCloud(font_path=font_path, width=1600, height=800).generate(text)
plt.figure(figsize=(20,10))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.tight_layout(pad=0)
plt.savefig("wordcloud.png", bbox_inches='tight')

生成的词云中每个词的末尾都出现了撇号,但我检查File_B时并没有看到这个符号,请问我忽略了什么?

排查与解决方案

这问题大概率和文件编码、分词后的文本格式有关,给你梳理几个实用的排查方向:

  • 指定文件编码读取:你读取File_B时没指定编码,要是文件是用utf-8-sig或其他编码保存的,直接open()可能会把文件开头的BOM或不可见字符解析成类似撇号的符号。建议读取时明确编码:

    text = open('File_B', encoding='utf-8').read()
    

    同时检查你保存File_B时的编码,确保和读取时一致。

  • 清理文本中的隐藏空白字符:如果你的File_B是每行一个分词后的词,read()会把换行符(\n\r\n)也读入文本。肉眼看不到但WordCloud处理时,可能把这些换行符和词绑定,渲染成类似撇号的样子。可以先清理这些字符:

    text = open('File_B', encoding='utf-8').read().replace('\n', ' ').replace('\r', '').strip()
    
  • 检查nltk分词器类型:要是你用的是WordPunctTokenizer这类拆分标点的分词器,可能在分词时产生了隐藏的撇号片段,只是你查看File_B时没注意到。建议换成更友好的word_tokenize试试:

    from nltk.tokenize import word_tokenize
    tokens = word_tokenize(original_text)  # original_text是你的原始txt内容
    
  • 查看文本原始内容:某些字体对全角空格、软连字符的渲染和撇号很像,你可以打印文本的原始表示来确认是否有隐藏字符:

    print(repr(text))  # repr会显示所有不可见字符,比如\n、\r或者特殊Unicode字符
    

内容的提问来源于stack exchange,提问作者n00b_coder

火山引擎 最新活动