Python 应用-jieba分词1:进行批量文本分词

知识点小结

os.walk()

os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]]),top -- 是你所要遍历的目录的地址,返回生成器,每次生成一个三元组(root,dirs,files)。

win32com库

参考: 

Python 使用 win32com 模块对 word 文件进行操作_Python热爱者的博客-CSDN博客https://blog.csdn.net/qdPython/article/details/114439716

jieba分词

参考:

jieba分词 自定义词表简介_结巴库自定义分词_feng98ren的博客-CSDN博客https://blog.csdn.net/feng98ren/article/details/80436791

词云图

参考:

Python生成词云图太简单了|拿来就用能的Python词云图代码 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/353795160

导入第三方库

主要使用pandas、jieba、wordcloud、numpy、matplotlib、imageio库

import pandas as pd
import matplotlib.pyplot as plt
import jieba
from PIL import Image
from wordcloud import WordCloud,ImageColorGenerator
from imageio import imread
import numpy as np
%matplotlib inline
#内嵌绘图,省略掉plt.show()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
%config InlineBackend.figure_format = 'svg'
#矢量图设置,设定显示图片的分辨率

读取文件夹中的所有文件名

使用os库中的walk方法获得指定文件夹中的所有文件名

paths_tuple=os.walk(file_dir)#返回三元组,包括路径,文件名

word文档批量转为txt

使用win32com实现格式转换,首先编写单个word文件转换的函数:

from win32com import client as wc
def Translate(filein,fileout):
    # 转换
    wordapp = wc.Dispatch('Word.Application')
    doc = wordapp.Documents.Open(filein)
    # 为了让python可以在后续操作中r方式读取txt和不产生乱码,参数为4
    doc.SaveAs(fileout, 4)
    doc.Close()

 将函数嵌入到一个循环中,当判断为docx文件时就转换,当判定为txt文件时不处理,最终函数返回文件夹中的所有txt文件的名称:

import os
def Translate_all(file_dir):#传入文件夹路径,转换docx为txt,并返回所有txt文件名
    paths_tuple=os.walk(file_dir)#返回三元组,包括路径,文件名
    for root, dirs, files in paths_tuple:
        paths=[]
        for file in files:
            split_file=os.path.splitext(file)#拆分成文件名和类型
            if split_file[1] == '.docx':
                Translate(os.path.join(root, file),os.path.join(root, split_file[0]+'.txt'))
                paths.append(split_file[0]+'.txt')#os.path.join(root, file)
            elif split_file[1] == '.txt':
                paths.append(split_file[0]+'.txt')
    return paths

文本分词

最后,使用结巴分词载入中文分词表和我自定义的用户词表进行分词,这里使用的是paddle模式,其他三种模式的介绍,可以看最上面的知识点总结。我们去除了所有的单字词,并将词和词频按降序保存到了新的txt文件中。

files=Translate_all(r"政策txt\25政策txt\\")
for file in files:
    with open(r"政策txt\25政策txt\\"+file, "r", encoding="utf-8", errors='ignore') as f:
        text = f.read()
        jieba.load_userdict(r"cn_stopwords.txt")#添加中文停用词字典
        jieba.load_userdict(r"userdict.txt")#添加用户停用词字典
        seg_list=jieba.lcut(text,use_paddle=True)#使用paddle模式进行分词
        stop_words_counts={}
        for word in seg_list:
            if len(word)==1:#去掉单字词
                continue
            elif r"\u" in repr(word):#不记录转义字符串
                continue
            else:
                stop_words_counts[word]=stop_words_counts.get(word,0)+1#对word出现的频率进行统计,当word不在seg_list时,返回值是0,当word在seg_list中时,返回+1
        stop_words_counts=list(stop_words_counts.items())#将字典转化为列表
        stop_words_counts.sort(key=lambda x:x[1],reverse=True)#根据词频进行降序排序
        data=pd.DataFrame(stop_words_counts,columns=['词','词频'])
        #print(data.head())
        data.to_csv(r'词频\\'+os.path.splitext(file)[0]+'词频.txt',encoding='utf_8_sig',index=False)

扩展——词云图绘制

python 按指定图片背景绘制词云图_艽野尘梦better的博客-CSDN博客

你可能感兴趣的:(Python应用,python,自然语言处理,中文分词)