NLP文本预处理的一些方法

写在前面

随着bert等技术的兴起,在做文本方面比赛时,对于预处理这一块像中文分词,停用词过滤,词形还原,词干化,标点符号处理等变的不再这么重要。当然也可以从另一个角度来看,这些对于文本的预处理方法相当于减少输入的噪声,是可以让神经网络更具有鲁棒性的。所以以下内容可以作为一个知识储备在这里,在工作中是否需要用到它们全凭自己判断。

预处理方法
### 用于词形还原
from nltk import word_tokenize, pos_tag
from nltk.corpus import wordnet
from nltk.stem import WordNetLemmatizer

# 获取单词的词性
def get_wordnet_pos(tag):
    if tag.startswith('J'):
        return wordnet.ADJ
    elif tag.startswith('V'):
        return wordnet.VERB
    elif tag.startswith('N'):
        return wordnet.NOUN
    elif tag.startswith('R'):
        return wordnet.ADV
    else:
        return None

sentence = 'football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal.'
tokens = word_tokenize(sentence)  # 分词
tagged_sent = pos_tag(tokens)     # 获取单词词性

wnl = WordNetLemmatizer()
lemmas_sent = []
for tag in tagged_sent:
    wordnet_pos = get_wordnet_pos(tag[1]) or wordnet.NOUN
    lemmas_sent.append(wnl.lemmatize(tag[0], pos=wordnet_pos)) # 词形还原

print(lemmas_sent)

输出结果为[‘football’, ‘be’, ‘a’, ‘family’, ‘of’, ‘team’, ‘sport’, ‘that’, ‘involve’, ‘,’, ‘to’, ‘vary’, ‘degree’, ‘,’, ‘kick’, ‘a’, ‘ball’, ‘to’, ‘score’, ‘a’, ‘goal’, ‘.’]

  • 词干化(stemming):很多情况下词干化后的形式和词形还原一样,但是无法保证词干化后的单词是一个正确的单词,比如将’cats’–>‘cat’, ‘leaves’–>‘leaf’
  • 同义词替换:比如将good,well,excellent等全部替换成good
  • 分词:比如将"hello world"变成“hello”,“world”,将"你好世界"变成"你好",“世界”
  • 标点过滤:比如网页上的文本,标点符号使用不规范,同时拥有多个都哈或句号,这种形式可以将多余的替换成一个,处理的主要应用方法为正则表达式
  • emoji表情处理:emoji表情对于做情感分析是很重要的,最好不要将其归咎为词向量中的unknown一类,如果知道文本中的emoji表情的出处,可以在这个emoji表情的出处找到对应的中文文本将其替换,比如大家常用的笑哭emoji直接替换成笑哭,或者英文形式;如果你有一套emoji预训练词向量,则将词向量中该emoji对应的词进行替换,如果没有,可以将该emoji加入到分词工具的词典中,保证分词时可以将emoji独立出来,如果在之后的任务中使用神经网络建模,可以保证emoji能够随机初始化成词向量,如果用主题模型的方式,也能够保证emoji成为词袋中词的一部分
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值