文本词语读取和删除停用词处理

前言

这一篇就来记录一下读取文本文件并使用Jieba包进行分词,存储结果用于后续处理的一些简单操作~

分词并存储

话不多说,简单步骤就是构建好自己的词典和停用词列表,然后读取 分词 删除 存储

import jieba
import pandas as pd
def read_file(filename):
    """读取文本数据,删除停用词 将文本及其对应的故障类型存储为列表"""
    contents, labels = [], []
    jieba.load_userdict('data/词典.txt')
    data = pd.read_excel('data/停用词.xlsx', header=None)
    df = pd.DataFrame(data)
    stopword = df[0].tolist()
    with open(filename, encoding='utf-8') as f:
        i = 0
        for line in f:
            i = i + 1
            try:
                label, content = line.strip().split('\t')
                content = "".join(content)
                if content:
                    sent = jieba.cut(content)  # 词语分割
                    sentend = []
                    for word in sent:
                        if word not in stopword:
                            sentend.append(word)
                    sentend = list_filter_number(sentend)
                    contents.append(sentend)
                    labels.append(label)
                    # print(sentend)
                    # print(label)
                else:
                    print('第', i, '篇文本删除停用词后没有词语')
                    print(content)
            except:
                print(line, '内容无法被识别')
                print(i,'行内容有问题')
    return contents, labels

调用上述函数可以得到文本词语列表和它对应的类型(这个和文本特点有关)

在使用改代码进行读取时,默认文本排列方式是:类型(Tab)内容

所以有一个label 大家根据需要选择就好啦 微微改动即可~

最后返回的是文本类型和和文本内容
下边这个函数用来对文本中出现的数字和空格进行筛选

def list_filter_number(l):
    """
    去除列表中的数字和空格
    :param l: 待过滤列表
    :return: 已过滤数字列表
    """
    m = [i for i in l if (i != '') or (i != ' ')]
    return list(filter(lambda x: not str(x).isdigit(), m))

代码函数分析

在上述步骤中,要对一些具备一点功能的函数进行介绍啦~

strip split

line.strip().split(',')

strip()表示删除数据中的换行符,split(',')是数据中遇到,就隔开

判断字符串中是否包含空格:s.isspace()

删除字符串中的空白字符:s.strip(m) 删除s开头结尾的rm

s.lstrip(m) 删除s开头的rm

s.rstrip(m) 删除s结尾的rm

当rm为空时,默认删除空白字符,包括\n \r \t

\t代表制表符 \n代表换行符 \r表示回车

.join()

连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分割符)连接形成一个新的字符串

' '.join(a)

os.walk

os.walk(top, topdown=True, onerror=None, followlinks=False)
# 可以得到一个三元组tupple(dirpath, dirnames, filenames)
# 第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件

dirpath时一个string,代表目录的路径

dirnames是一个list,包含了dirpath下的所有子目录的名字

filenames是一个list,包含了非目录文件的名字

这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath,name)

os.listdir()

返回指定文件夹包含的文件或文件夹的名字列表,如果目录名字为中文,在输入之前需要转码

upath = unicode(cpath,;utf-8)
for filename in os.listdir(uPath):
 print(filename)

只支持在Unix,Windows下使用

这两个函数在你有很多文件需要读取,文件名字有特点时可以使用。

强烈提醒

在读取数据和文件的时候,一定要注意出现那种什么都没有或者格式问题导致程序报错的现象。

一定要学会错误捕捉!!!!!

要不然你就会发现自己的代码明明没错 总是出不了结果。尽管它只是这么短的一段小代码(虽然现在的我只会try except)

posted @ 2021-07-07 17:16  芋圆院长  阅读(618)  评论(0编辑  收藏  举报