文本詞語讀取和刪除停用詞處理


前言

這一篇就來記錄一下讀取文本文件並使用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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM