使用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




