文字分類的標註資料格式要求為"文字內容\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個或多個 個或多個 個或 個 有三種寫法,和 不...