实验室第一次作业

实验室第一次作业
第一阶段学习要求:
        一、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()

最后结果如下图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值