实验室第一次作业
第一阶段学习要求:
一、python的基本语法,自己搜索资料,例如:菜鸟教程等,然后去https://leetcode-cn.com/做20道题(主要看字符串的,因为后面我们处理字符串比较多)
二、了解numpy库(可以自行百度)
1、生成随机矩阵,2、矩阵相乘 3、转换矩阵形状 4、list跟矩阵的转换方法 numpy还有很多函数可以自行学习一下,百度上很多总结的
三、对文件和文件夹的操作
大作业(数据预处理)具体要求:
有一批数据有十个文件夹,每个文件夹有很多个xxx.txt文件,每个xxx.txt文件里面有一篇新闻。
1、需要先读取文档
2、对每个文档进行分词
3、去掉停用词(就是把数据里面的(例如,“的”,“地”,“了”,标点符号等)没用的东西去掉
4、生成一个词典(为了第五步做准备,统计所有的词,为每一个词设定一个下标)
5、数据向量化(把分词后的数据,每个转成字典中的下标)
大作业不懂的可以先百度,再不行可以问师兄师姐门
给出一个database里面有很多文件夹,每个文件夹都有很多个txt文本,读取文本进行分词
第一步:读取文档
import csv
import fnmatch
import os
import re
from collections import OrderedDict
import jieba
text_list=[]#导入一些包,text——list放所有文档的文字
if __name__=='__main__':
rootdir = r"D:\实验室项目练习\dataset"#进入语料库文件夹
list = os.listdir(rootdir) # 列出文件夹下所有的目录与文件
for i in range(0, len(list)):#遍历文件夹下的所有目录与文件
path = os.path.join(rootdir, list[i])#获取路径
word_frequency_analysis(path)#对所有的子文件夹进行遍历分析D:\实验室项目练习\dataset\ART
2 使用结巴分词,将文本分成分词,之后用正则表达式,进行筛选
def word_frequency_analysis(path):
#print("111")
files = os.listdir(path) # files为列表,存储的是path里面的所有文件名
for filename in files:#遍历文件夹中的所有文件
if not fnmatch.fnmatch(filename, '*.TXT'):#找到txt文件
continue
txt_path = os.path.join(path, filename)
txt_content = open(txt_path, 'rb').read()#读取txt文件中的中文
text_cutted = jiebaCutText(txt_content)#用结巴分词
text_list.append(text_cutted)#列表中添加分词后的结果
def jiebaCutText(text):
seg_list = jieba.cut(text, cut_all=True)
liststr = '/'.join(seg_list)#分词用/分割
return liststr # 返回的结果中会带标点符号
3把所有的分词存入一个txt文档
newfile = open(r'D:\实验室项目练习\test1.txt', 'w')#打开文档 把分词结果存入该txt
for i in range(0,len(text_list)):
text_clear=clearText(text_list[i])
newfile.write(text_clear)
newfile.close()
分词函数
def clearText(text):
mywordlist = []
for myword in text.split('/'):
if len(myword.strip()) > 1 and contain_zh(myword.strip()):
mywordlist.append(myword.strip())
return '/'.join(mywordlist)
所有的代码:有的没用到,从别的地方参考来的,就留着了。
import csv
import fnmatch
import os
import re
from collections import OrderedDict
import jieba
text_list=[]
def word_frequency_analysis(path):
#print("111")
files = os.listdir(path) # files为列表,存储的是path里面的所有文件名
for filename in files:#遍历文件夹中的所有文件
if not fnmatch.fnmatch(filename, '*.TXT'):#找到txt文件
continue
txt_path = os.path.join(path, filename)
txt_content = open(txt_path, 'rb').read()#读取txt文件中的中文
text_cutted = jiebaCutText(txt_content)#用结巴分词
text_list.append(text_cutted)#列表中添加分词后的结果
def jiebaCutText(text):
seg_list = jieba.cut(text, cut_all=True)
liststr = '/'.join(seg_list)#分词用/分割
return liststr # 返回的结果中会带标点符号
def jiebaCutText(text):
seg_list = jieba.cut(text, cut_all=True)
liststr = '/'.join(seg_list)
return liststr # 返回的结果中会带标点符号
def clearText(text):
mywordlist = []
for myword in text.split('/'):
if len(myword.strip()) > 1 and contain_zh(myword.strip()):
mywordlist.append(myword.strip())
return '/'.join(mywordlist)
def contain_zh(word):
zh = re.compile(u'[\u4200-\u9fa5]+')
match = zh.search(word)
return match
def countwords(text, counter_file):
count_dict = dict()
for item in text.split('/'):
if item in count_dict:
count_dict[item] += 1
else:
count_dict[item] = 1
d_sorted_by_value = OrderedDict(sorted(count_dict.items(), key=lambda x: x[1]))
with open(counter_file, 'w',encoding='utf-8-sig') as f:
#f.write(codecs.BOM_UTF8)
w = csv.writer(f)
w.writerows(d_sorted_by_value.items())
if __name__=='__main__':
rootdir = r"D:\实验室项目练习\dataset"
list = os.listdir(rootdir) # 列出文件夹下所有的目录与文件
for i in range(0, len(list)):
path = os.path.join(rootdir, list[i])
word_frequency_analysis(path)
newfile = open(r'D:\实验室项目练习\test1.txt', 'w')
for i in range(0,len(text_list)):
text_clear=clearText(text_list[i])
newfile.write(text_clear)
newfile.close()
最后结果如下图