1. 程式人生 > >【NLP】3000篇搜狐新聞語料資料前處理器的python實現

【NLP】3000篇搜狐新聞語料資料前處理器的python實現

#coding=utf-8
import os
import jieba
import sys
import re
import time
import jieba.posseg as pseg

sys.path.append("../")
jieba.load_userdict("../Database/userdict.txt") # 載入自定義分詞詞典

'''
title:利用結巴分詞進行文字語料處理:單文字處理器、批量檔案處理器
    1 首先對文字進行遍歷查詢
    2 建立原始文字的儲存結構
    3 對原文字進行結巴分詞和停用詞處理
    4 對預處理結果進行標準化格式,並儲存原檔案結構路徑
author:白寧超
myblog:http://www.cnblogs.com/baiboy/
time:2017年4月28日10:03:09
'''


'''
分詞.詞性標註以及去停用詞
stopwordspath: 停用詞路徑
dealpath:中文資料預處理檔案的路徑
savepath:中文資料預處理結果的儲存路徑
'''
def cutTxtWord(dealpath,savepath,stopwordspath):
    stopwords = {}.fromkeys([ line.rstrip() for line in open(stopwordspath,"r",encoding='utf-8')]) # 停用詞表
    with open(dealpath,"r",encoding='utf-8') as f:
        txtlist=f.read() # 讀取待處理的文字
    words =pseg.cut(txtlist) # 帶詞性標註的分詞結果
    cutresult=""# 獲取去除停用詞後的分詞結果
    for word, flag in words:
        if word not in stopwords:
            cutresult += word+"/"+flag+" " #去停用詞
            getFlag(cutresult,savepath) #



'''
分詞.詞性標註以及去停用詞
stopwordspath: 停用詞路徑
read_folder_path :中文資料預處理檔案的路徑
write_folder_path :中文資料預處理結果的儲存路徑
filescount=300 #設定資料夾下檔案最多多少個
'''

def cutFileWord(read_folder_path,write_folder_path,stopwordspath):
    # 停用詞表
    stopwords = {}.fromkeys([ line.rstrip() for line in open(stopwordspath,"r",encoding='utf-8')])

    # 獲取待處理根目錄下的所有類別
    folder_list = os.listdir(read_folder_path)
    # 類間迴圈
    for folder in folder_list:
        #某類下的路徑
        new_folder_path = os.path.join(read_folder_path, folder)

        # 建立儲存檔案目錄
        path=write_folder_path+folder #儲存檔案的子檔案
        isExists=os.path.exists(path)
        if not isExists:
            os.makedirs(path)
            print(path+' 建立成功')
        else: pass
        save_folder_path = os.path.join(write_folder_path, folder)#某類下的儲存路徑
        print('--> 請稍等,正在處理中...')

        # 類內迴圈
        files = os.listdir(new_folder_path)
        j = 1
        for file in files:
            if j > len(files): break
            dealpath = os.path.join(new_folder_path, file) #處理單個檔案的路徑
            with open(dealpath,"r",encoding='utf-8') as f:
                txtlist=f.read()
                # python 過濾中文、英文標點特殊符號
                # txtlist1 = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、
[email protected]
#¥%……&*()]+", "",txtlist) words =pseg.cut(txtlist) # 帶詞性標註的分詞結果 cutresult="" # 單個文字:分詞後經停用詞處理後的結果 for word, flag in words: if word not in stopwords: cutresult += word+"/"+flag+" " #去停用詞 savepath = os.path.join(save_folder_path,file) getFlag(cutresult,savepath) j += 1 ''' 做詞性篩選 cutresult:str型別,初切分的結果 savepath: 儲存檔案路徑 ''' def getFlag(cutresult,savepath): txtlist=[] #過濾掉的詞性後的結果 #詞列表為自己定義要過濾掉的詞性 cixing=["/x","/zg","/uj","/ul","/e","/d","/uz","/y"] for line in cutresult.split('\n'): line_list2=re.split('[ ]', line) line_list2.append("\n") # 保持原段落格式存在 line_list=line_list2[:] for segs in line_list2: for K in cixing: if K in segs: line_list.remove(segs) break else: pass txtlist.extend(line_list) # 去除詞性標籤 resultlist=txtlist[:] flagresult="" for v in txtlist: if "/" in v: slope=v.index("/") letter=v[0:slope]+" " flagresult+= letter else: flagresult+= v standdata(flagresult,savepath) ''' 標準化處理,去除空行,空白字元等。 flagresult:篩選過的結果 ''' def standdata(flagresult,savepath): f2=open(savepath,"w",encoding='utf-8') for line in flagresult.split('\n'): if len(line)>=2: line_clean="/ ".join(line.split()) lines=line_clean+" "+"\n" f2.write(lines) else: pass f2.close() if __name__ == '__main__' : t1=time.time() # 測試單個檔案 dealpath="../Database/SogouC/FileTest/1.txt" savepath="../Database/SogouCCut/FileTest/1.txt" stopwordspath='../Database/stopwords/CH_stopWords.txt' stopwordspath1='../Database/stopwords/HG_stopWords.txt' # 哈工大停用詞表 # 批量處理資料夾下的檔案 # rfolder_path = '../Database/SogouC/Sample/' rfolder_path = '../Database/SogouC/FileNews/' # 分詞處理後儲存根路徑 wfolder_path = '../Database/SogouCCut/' # 中文語料前處理器 # cutTxtWord(dealpath,savepath,stopwordspath) # 單文字前處理器 cutFileWord(rfolder_path,wfolder_path,stopwordspath) # 多文字前處理器 t2=time.time() print("中文語料語處理完成,耗時:"+str(t2-t1)+"秒。") #反饋結果

相關推薦

NLP3000新聞語料資料處理器python實現

#coding=utf-8 import os import jieba import sys import re import time import jieba.posseg as pseg sys.path.append("../") jieba.load_userdict(".

經典文章初識大資料,及大資料相關框架Hadoop、spark、flink等

今天看到一篇講得比較清晰的框架對比,這幾個框架的選擇對於初學分散式運算的人來說確實有點迷茫,相信看完這篇文章之後應該能有所收穫。 簡介 大資料是收集、整理、處理大容量資料集,並從中獲得見解所需的非傳統戰略和技術的總稱。雖然處理資料所需的計算能力或儲存容量早已超過一

NLP資料之行,始於足下:談談語料庫知多少

作者:白寧超 2016年7月20日13:47:51 摘要:大資料發展的基石就是資料量的指數增加,無論是資料探勘、文字處理、自然語言處理還是機器模型的構建,大多都是基於一定量的資料,資料規模達到一定程度,採用基於規則方法或者概率統計學的方法進行模型構建,感興趣知識的獲取才更有意義。那麼,是不是資料足

NLPPython NLTK獲取文字語料和詞彙資源

作者:白寧超 2016年11月7日13:15:24 摘要:NLTK是由賓夕法尼亞大學計算機和資訊科學使用python語言實現的一種自然語言工具包,其收集的大量公開資料集、模型上提供了全面、易用的介面,涵蓋了分詞、詞性標註(Part-Of-Speech tag, POS-tag)、命名實體識別(Name

分享方言普通話語音識別語料庫(語部分)-600人

方言普通話語音識別語料庫(語篇部分)-600人 儘管普通話語音識別系統的開發取得了很大進步,但在面對方言地區普通話時,遇到了挑戰。廣大方言地區、特別是南方方言區的普通話和標準普通話存在許多差別。因此,要提高方言語音識別率、進行方言語音識別,研究方言地區普通話的語音特點

NLPPython實例:基於文本相似度對申報項目進行查重設計

用戶 strip() 字符串 執行 原創 這樣的 string 得到 亂碼問題 Python實例:申報項目查重系統設計與實現 作者:白寧超 2017年5月18日17:51:37 摘要:關於查重系統很多人並不陌生,無論本科還是碩博畢業都不可避免涉及論文查重問題,這也

測試第二文章

第二篇 測試 文章 作業 不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不是第0次作業不

模板二叉索樹

for truct false define queue ios size struct 刪除節點 二叉搜索樹:對於二叉樹中的任意節點,左子樹中所有的值都小於當前位置的值,右子樹中所有的值都大於當前位置的值。 操作: 1.插入一個數值。 2.查詢是否包含某個數值。 3.

NLP

alt 1-1 技術 png images bsp image tps com 【NLP】

SqlSugar ORM 入門到精通入門

實現簡單 tar contex postgresq primary sim 穩定 acache 成了 背景 SqlSugar是一款國產ORM,除了擁有媲美原生的性能 另外還有滿足各種需求的功能,簡單好用一分鐘就能夠輕松上手。 2.x版本正式在自已公司內部項目使用 3.

曝光浙江天科技股份有限公司福利曝光啦

都是 年會 核心 成長 非凡 爸爸媽媽 爸爸 AR 聖誕老人 作為一枚浙江天搜科技股份有限公司老員工,我來告訴你們,我們該有的福利都有哪些!   NO1、節假日福利   在江天搜科技股份有限公司集齊了所有節假日福利,是不是可以召喚神龍了哈哈哈哈!   3月女神節,收到玫瑰花

NLP大白話講解word2vec到底在做些什麽

fill href 關系 單元 form 理解 只有一個 selector convert 轉載自:http://blog.csdn.net/mylove0414/article/details/61616617 詞向量 word2vec也叫word embedding

BZOJ1072排列(索)

end out zoj strlen -- -a mut ostream bzoj1072 【BZOJ1072】排列(搜索) 題面 BZOJ 洛谷 題解 算下復雜度,如果用\(next\_permutation\) 那就是\(10!\times 10\times 15\),

收藏快速幫企業轉型區塊鏈的錦囊

不同 標準 兼容 決定 開發環境 評估 去中心化 舉例 狀態 無論對於哪一項技術來說,衡量技術成熟的標誌都在於這項技術的最終落地。對於區塊鏈這個行業來說,大家最關心的莫過於,什麽樣的企業適合踏入區塊鏈這個領域?以及什麽樣的應用可以解決當下企業、用戶遇到的一些問題。在10月1

NLPNMT之RNN結構

RNN一般有三種結構:vanilla RNN,LSTM,GRU。 1. vanilla RNN 最簡單的RNN: 2. GRU 使用兩個門,reset使用多少過去cell的資訊,update門控制該資訊有多少用於更新當前cell,在GRU中a即為 c。 3. LSTM

NLPNMT之BLEU

BLEU score 用來評價一個翻譯系統的好壞。計算公式如下: N指使用N-gram計算Pn。BLEU越高越好。 1. 計算Pn Pn = (候選譯文與參考譯文相同的N-gram數目) / (候選譯文中所有N-gram的數目) wn為權重,可以取

NLPYou May Not Need Attention詳解

廢話: 之前蹭上了BERT的熱度,粉以個位數每天的速度增長,感謝同學們的厚愛!弄得我上週本來打算寫文字分類,寫了兩筆又放下了,畢竟文字分類有很多SOTA模型,而我的研究還不夠深入。。慢慢完善吧,今天看到一篇You may not need attention,寫attention起家的我怎麼能放過,立刻打印出

NLPAttention原理和原始碼解析

對attention一直停留在淺層的理解,看了幾篇介紹思想及原理的文章,也沒實踐過,今天立個Flag,一天深入原理和原始碼!如果你也是處於attention model level one的狀態,那不妨好好看一下啦。 內容: 核心思想 原理解析(圖解+公式) 模型分類 優缺點 TF原始碼解析

NLPTransformer詳解

傳送門:【NLP】Attention原理和原始碼解析 自Attention機制提出後,加入attention的Seq2seq模型在各個任務上都有了提升,所以現在的seq2seq模型指的都是結合rnn和attention的模型,具體原理可以參考傳送門的文章。之後google又提出瞭解決sequence to s

NLPGoogle BERT詳解

11號論文放上去,12號各個公眾號推送,13號的我終於在最晚時間完成了前沿追蹤,驚覺上一篇論文竟然是一個月前。。。立個flag以後保持一週一更的頻率。下週開始終於要在工作上接觸NLP了,之後希望會帶來更多自己的東西而不是論文解析。 Attention和Transformer還不熟悉的請移步之前的文章: