使用正規表示式快速清洗NLP訓練資料的技術詳解實戰

2021-10-03 20:08:32 字數 2200 閱讀 2421

文字分類的標註資料格式要求為"文字內容\t標註標籤\n"(即每行乙個未標註樣本與乙個標註標籤,中間使用tab鍵間隔,每組資料使用回車換行)

很明顯現在已有的資料集不符合要求,那我們來處理一下

先看一下現有資料集的格式:

這是一條資料,我們只要獲取標籤內的內容,然後加上對應的情感標籤即可

這一步我們用正規表示式處理,其實很簡單,寫成乙個函式用來去標籤,去空格:

def

filter_tags

(self,

str)

: data = re.

compile

(r']+>'

,re.s)

data = data.sub('',

str)

#去掉多餘的空行

blank_line=re.

compile

('\n+'

) data = blank_line.sub(

'\n'

,data)

return data

這裡是把整個文字匯入並提取我們想要的內容,方便快捷,一步到位:

但是,我們還需要在這些訓練資料後面加上情感標籤,關鍵是怎麼確定對應的情感標籤呢?

為此,我寫個乙個類,在類裡解決就簡單多了:

class

nlp_data

(object):

def__init__

(self,

type):

self.

type

=type

因為資料集命名時是帶有標籤的,我們便可以用對應的標籤來例項化:

def

main()

: types =

["negative"

,"positive"

]for

type

in types:

nlp = nlp_data(

type

) path = r'c:\users\administrator\downloads\zheng_bo_pu-nlpcc2014_sentiment-master\nlpcc2014_sentiment\sample.{}.txt'

.format

(type

)if __name__ ==

'__main__'

: main(

)

接下來,只需要根據條件判斷給語句加上對應的情感標籤即可:

if self.

type

=="negative"

: negative =

open

('./20200312/negative.txt'

,'a'

,encoding=

"utf-8"

) negative.write(datas)

else

: positive =

open

('./20200312/positive.txt'

,'a'

,encoding=

"utf-8"

) positive.write(datas)

下面是最終效果:

以上就是本次程式所有的關鍵**,下面我們把資料集上傳至easydl:

接下來 我們用這些訓練資料進行訓練:

準確率在85%作用,看來效果還是不錯的,如果資料集更多,效果應該會更好

資料清洗 正規表示式

摘錄自 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none 若匹配成功返回匹配到的位置序列,如 0,3 表示該字串在0 1 2 位找到。函式語法 re.match pattern,string,flags 0 import re print ...

正規表示式快速入門

你是不是經常忘記正規表示式中的語法規則 優先順序順序 界定符 定位符等等,每次看了忘忘了看,怎麼辦的,多練習或者小抄本記起來!1 常用元字元 匹配處換行符以外的任意字元 w匹配字母或數字或下劃線或漢字 s匹配任意的空白符 d匹配數字 b匹配單詞的開始或結束 匹配字串的開始 匹配字串的結束 2 常用限...

正規表示式快速入門

一 元字元 w,s,b,d 1.後面四個有相應的大寫,表反義。匹配行開頭,只有當其在 中表示 非 2.b 匹配單詞的開始或結束,而 匹配除換行符外的任意字元。eg 匹配乙個非空行 bstr 匹配 str開頭的字串 二 重複 請叫上面四位為 四大金剛 0個或多個 個或多個 個或 個 有三種寫法,和 不...