1.废话不多说,直接上代码
# jieba库是用来分词的库
import jieba
import jieba.analyse
# 是用来进行计算机系统操作的库
import io
import os
import os.path
import csv
from string import punctuation
# 正则表达式库
import re
import sys
# 处理汉字的中文文字库
from zhon.hanzi import punctuation
# ANSI转UTF-8
import codecs
# sys.stdout = io.TextIOWrapper(sys.stdout,encoding='utf8') #改变标准输出的默认编码
# 这里放着你要操作的文件夹名称
root_path = '我是测试文件'
# 用来存储统计好之后词频文件存放的位置
csv_root = "评论介绍"
# 目录下的文件名全部获取保存在files中
files = os.listdir(root_path)
# 创建文件夹,用来存储统计之后的词频,放到csv文件里面
if not os.path.exists(csv_root):
# 创建文件夹
os.mkdir(csv_root)
# 创建用来统计词频的csv文件
def csv_create(name):
full_path = csv_root + "/" + name + '.csv'
# 创建文件,已写入的方式打开,但是不写,创建完毕之后就关闭文件
file = open(full_path, 'w')
# 关闭文件
file.close()
# 返回csv文件的路径,获取文件路径以便写入
return full_path
# 将文件夹中所有文件名字进行读取
for file in files:
# 准确获取一个txt的位置,利用字符串的拼接
file_path = root_path + "/" + file
# 打开相应的txt文件
text = open(file_path, "r", encoding='utf-8').read()
#text = open(file_path, "r", encoding='ANSI').read()
# 去掉中文标点
text = re.sub("[{}]+".format(punctuation), "", text)
dicti = open("dict.txt", "r", encoding='utf-8').read()
jieba.load_userdict(r"dict.txt")
#jieba.load_userdict("dict.txt", "r", encoding="ANSI")
# 读取停止词
fourStopwords = open("fourStopwords.txt", "r", encoding='utf-8').read()
stopwords = fourStopwords.split("\n")
#stopwords = '我'
print(stopwords)
#stopwords = set(sum(open("fourStopwords.txt", "r", encoding='utf-8').read(), [ ]))
#stopwords = set(sum(f.readtxt('fourStopwords.txt'), []))
#jieba.add_word("表柔比星")
# 使用jieba进行分词,精确模式,返回列表
words = jieba.lcut(text)
# print(words)
# cut_stop_data = [word for word in words if word not in stopwords]
# print(cut_stop_data)
k = []
for each in words:
k.append(each)
cut_stop_data = [word for word in k if word not in stopwords]
print(cut_stop_data)
counts = {}
# 创建对应文章的csv文件
csv_path = csv_create(file)
out = open(csv_path, 'a', encoding='ANSI')
#out = open(csv_path, 'a', encoding='ANSI')
# 设定写入模式
csv_write = csv.writer(out, dialect='excel')
# 将文章的词汇进行分词
#for word in words:
for word in cut_stop_data:
counts[word] = counts.get(word, 0) + 1
# items转list类型
items = list(counts.items())
# 应该是按照出现的频率进行排序功能,后期再查
items.sort(key=lambda x: x[1], reverse=True)
# 开始写入csv文件
# for i in range(0, len(words) - word_str - 100):
for i in range(len(items) - 1):
word, count = items[i]
# csv写入具体内容
_str = word, count
csv_write.writerow(_str)
2.文件目录展示
说明:测试文件中的txt文件格式应该为UTF-8,因为直接新建txt文件的时候,默认为ANSI格式。大家做的时候有两种办法可跑通程序:
①打开txt文件,点击左上角“文件”,点击“另存为”,在如下图所示的地方进行编码格式的修改,最终保存即可。
②在Python文件中做一遍文件编码的校验,若检测不为UTF-8的话,转换为UTF-8也行。
3.目录关键文件介绍
“我是测试文件”中是需要进行分词,去stopwords的文件
“评论介绍”中是最终得到的结果(提示:对于csv和excel只能在一个地方打开,若在系统外部打开了文件,在系统中可能就没有权限写入)
“dict.txt”是自定义的词典(自己加的)
“fourStopwords.txt”里面综合四个国际上的标准停用词:
中文停用词表
哈工大停用词表
百度停用词表
四川大学机器智能实验室停用词库
4.本项目的依赖pip
pip install jieba
pip install zhon
5.可以运行啦
2023.6.7新增:stopwords链接
链接: https://pan.baidu.com/s/1HoS1WbuxzlkZcX1lgacQAQ?pwd=m8kn 提取码: m8kn