评论文本预处理
以下對(duì)于直接寫(xiě)和使用keras內(nèi)置進(jìn)行處理進(jìn)行了對(duì)比總結(jié)。
(一)清理文本并分詞
1.直接寫(xiě)
#1 清理文本 import re token=re.compile('[A-Za-z]+|[!?,.]')#2 分詞 def reg_text(text):new_text=token.findall(text) #把想要的都找出來(lái)new_text=[word.lower() for word in new_text] #進(jìn)行小寫(xiě)處理(也算是清理)并寫(xiě)回列表return new_textdata['text']=data['text'].apply(reg_text) #調(diào)用2.(準(zhǔn)備)使用keras
def preprocess_sentence(w):w=w.lower().strip() #lower是大寫(xiě)變小寫(xiě),strip是去掉兩邊的空格w=re.sub(r"([?,!.])", r" \1 ", w) #把標(biāo)點(diǎn)符號(hào)與單詞分離開(kāi)來(lái),使它像個(gè)單詞一樣單獨(dú)被提取w=re.sub(r'[" "]+', " ", w) # 把一個(gè)或多個(gè)空格都替換成一個(gè)空格w=re.sub(r"[^a-zA-Z?,!.]+", " ", w) #去掉除了正常字母和正常標(biāo)點(diǎn)以外的東西w.strip() #去掉前后的空格return w.split() #把處理好的文本詞語(yǔ)裝進(jìn)列表text=[preprocess_sentence(w) for w in data.review] #一邊調(diào)用一邊寫(xiě)入列表(二)文本編碼(順序編碼)
1.直接寫(xiě)
#1 單詞計(jì)數(shù) word_set=set() for text in data.text:for word in text:word_set.add(word) length=len(word_set)#2 構(gòu)建起對(duì)應(yīng)字典 word_list=list(word_set) word_index=dict((word,word_list.index(word)+1) for word in word_list) #這個(gè)+1很重要,因?yàn)槲覀兒髞?lái)要做一個(gè)填充,讓每個(gè)句子的單詞數(shù)目相同,要把空白位置用0填充,所以不能有序號(hào)為0的單詞,即序號(hào)從1開(kāi)始#3 文本編碼 data_final=data.text.apply(lambda x: [word_index.get(word) for word in x])2.使用keras內(nèi)置方法
max_words=20000 #初始化一個(gè)tokenizer tokenizer=keras.preprocessing.text.Tokenizer(num_words=max_words,filters='') #將其在text上fit一下 tokenizer.fit_on_texts(text) #文本編碼 tensor=tokenizer.texts_to_sequences(text)(三)進(jìn)行等長(zhǎng)處理
maxlen=max(len(x) for x in tensor) #也可以先print出來(lái),然后自主折中選擇一個(gè)合適的 tensor=keras.preprocessing.sequence.pad_sequences(tensor,maxlen=max_len,padding='post')(四)embedding
model=keras.Senquential() model.add(layers.Embedding(input_dim=max_word,output_dim=100,input_length=max_len)) #embedding把文本映射成一個(gè)密集向量(與one-hot編碼相對(duì)應(yīng)的)總結(jié)
- 上一篇: keras模型保存和加载
- 下一篇: 2022年杭州亚运会的主场馆,像一只造型