评论文本预处理

以下对于直接写和使用keras内置进行处理进行了对比总结。

(一)清理文本并分词
1.直接写
#1 清理文本
import re
token=re.compile('[A-Za-z]+|[!?,.]')

#2 分词
def reg_text(text):
  new_text=token.findall(text) #把想要的都找出来
  new_text=[word.lower() for word in new_text] #进行小写处理(也算是清理)并写回列表
  return new_text

data['text']=data['text'].apply(reg_text) #调用
2.(准备)使用keras
def preprocess_sentence(w):
  w=w.lower().strip() #lower是大写变小写,strip是去掉两边的空格
  w=re.sub(r"([?,!.])", r" \1 ", w) #把标点符号与单词分离开来,使它像个单词一样单独被提取
  w=re.sub(r'[" "]+', " ", w) # 把一个或多个空格都替换成一个空格
  w=re.sub(r"[^a-zA-Z?,!.]+", " ", w) #去掉除了正常字母和正常标点以外的东西
  w.strip() #去掉前后的空格
  return w.split() #把处理好的文本词语装进列表

text=[preprocess_sentence(w) for w in data.review] #一边调用一边写入列表
(二)文本编码(顺序编码)
1.直接写
#1 单词计数
word_set=set()
for text in data.text:
  for word in text:
    word_set.add(word)
length=len(word_set)

#2 构建起对应字典
word_list=list(word_set)
word_index=dict((word,word_list.index(word)+1) for word in word_list) 
#这个+1很重要,因为我们后来要做一个填充,让每个句子的单词数目相同,要把空白位置用0填充,所以不能有序号为0的单词,即序号从1开始

#3 文本编码
data_final=data.text.apply(lambda x: [word_index.get(word) for word in x])
2.使用keras内置方法
max_words=20000
#初始化一个tokenizer
tokenizer=keras.preprocessing.text.Tokenizer(num_words=max_words,filters='') 
 #将其在text上fit一下
tokenizer.fit_on_texts(text)
#文本编码
tensor=tokenizer.texts_to_sequences(text)
(三)进行等长处理
maxlen=max(len(x) for x in tensor) #也可以先print出来,然后自主折中选择一个合适的
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把文本映射成一个密集向量(与one-hot编码相对应的)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值