在文本分析中,词频统计是一种常用的方法,可以帮助我们了解文本中的重要词汇。本文将介绍如何使用Python读取Word文档,统计词频,并对前15个高频词进行标注(红色下划线、黄色背景)。我们将使用python-docx库来处理Word文档,jieba库来进行中文分词,以及一些XML操作来设置样式。
环境准备
首先,确保你已经安装了以下Python库:
python-docx:用于处理Word文档。
jieba:用于中文分词。
matplotlib(可选):用于可视化词频分布。
你可以使用以下命令安装这些库:
pip install python-docx jieba
2. 分词并统计词频
使用jieba库对文本进行分词,并统计每个词的频率。我们将只考虑长度大于等于2的词。
3. 抽取排名前15的词频
根据词频统计结果,抽取出现次数最多的前15个词。
4. 标注高频词
遍历文档中的每一个段落,找到这些高频词,并对其进行标注(红色下划线、黄色背景)。
5. 保存修改后的文档
将修改后的文档保存到一个新的文件中。
代码实现
下面是完整的代码示例:
import docx
import jieba
from collections import Counter
from docx.oxml.ns import qn # 用于设置中文字体
from docx.oxml import OxmlElement
# 读取Word文档
def read_docx(file_path):
doc = docx.Document(file_path)
full_text = []
for para in doc.paragraphs:
full_text.append(para.text)
return '\n'.join(full_text), doc
# 分词并统计词频
def count_word_frequency(text, min_length=2):
words = jieba.lcut(text)
filtered_words = [word for word in words if len(word) >= min_length]
return Counter(filtered_words)
# 设置背景颜色
def set_background_color(run, color):
highlight = run._r.get_or_add_rPr().get_or_add_highlight()
highlight.set(qn('w:val'), color)
# 标注高频词
def highlight_frequent_words(doc, counter, top_n=15):
# 获取最频繁的top_n个词
top_words = {word: None for word, _ in counter.most_common(top_n)}
# 遍历文档中的每一个段落
for para in doc.paragraphs:
text = para.text
start = 0
while start < len(text):
for word in top_words:
index = text.find(word, start)
if index != -1:
# 找到匹配项后创建新的运行
run = para.add_run(text[start:index])
run = para.add_run(text[index:index + len(word)])
run.font.underline = True # 设置下划线
run.font.color.rgb = docx.shared.RGBColor(0xFF, 0x00, 0x00) # 红色
# 确保rFonts元素存在
r_fonts = run._r.get_or_add_rPr().get_or_add_rFonts()
r_fonts.set(qn('w:eastAsia'), '宋体') # 设置字体
# 设置黄色背景
set_background_color(run, 'yellow')
start = index + len(word)
break
else:
# 如果没有找到任何单词,则结束循环
break
# 添加剩余部分
if start < len(text):
para.add_run(text[start:])
# 主程序
if __name__ == "__main__":
file_path = r"D:\资料\旅游类短视频的传播特点,表达形式及其应用价值.docx"
text, doc = read_docx(file_path)
word_freq = count_word_frequency(text)
highlight_frequent_words(doc, word_freq)
# 保存修改后的文档
output_file_path = r"D:\资料\标注后的旅游类短视频的传播特点,表达形式及其应用价值.docx"
doc.save(output_file_path)