NLP 预处理总结

作者: dreampai | 来源:发表于2021-07-09 17:10 被阅读0次

    在处理 NLP 相关任务的时候(文本分类、聚类,智能客服等),首要任务是对文本数据进行预处理。结合自己的实践经验,总结了 N 条预处理的方法。

    去掉一些无用的符号

    文本中可能会出现连续的符号(比如感叹号!!!或一些奇怪的单词等。)我们将文本按照符号进行分割然后再组装。

    def tokenizer(ori_list):
       SYMBOLS = re.compile('[\s;\"\",.!?\\/\[\]]+')
       new_list = []
       for q in ori_list:
           words=SYMBOLS.split(q.lower().strip())
           new_list.append(' '.join(words))
       return new_list
    

    停用词过滤

    网上有很多开源的停用词集合,也可以根据自己业务建立领域停用词表。(或者直接使用NLTK自带的)

    def removeStopWord(ori_list):
       new_list = []
       #nltk中stopwords包含what等,但是在QA问题中,这算关键词,所以不看作stop words
       restored = ['what','when','which','how','who','where']
       english_stop_words = list(set(stopwords.words('english')))
       for w in restored:
           english_stop_words.remove(w)
       for q in ori_list:
           sentence = ' '.join([w for w in q.strip().split(' ') if w not in english_stop_words])
           new_list.append(sentence)
       return new_list
    

    去掉出现频率很低的词

    我们去除低频词,可以基于词典设置一个阈值,比如出现次数少于10,20....

    def removeLowFrequence(ori_list,vocabulary,thres = 10):
        #根据thres筛选词表,小于thres的词去掉
        new_list = []
        for q in ori_list:
            sentence = ' '.join([w for w in q.strip().split(' ') if w in vocabulary and vocabulary[w] >= thres])
            new_list.append(sentence)
        return new_list
    

    对于数字的处理

    分词完只有有些单词可能就是数字比如44,415,把所有这些数字都看成是一个单词,这个新的单词我们可以定义为 "#number"

    def replaceDigits(ori_list,replace = '#number'):
        #将数字统一替换replace,默认#number
        DIGITS = re.compile('\d+')
        new_list = []
        for q in ori_list:
            q = DIGITS.sub(replace,q)
            new_list.append(q)
        return new_list
    

    关于我

    dreampai(公众号,简书,知乎同名),专注于 NLP和金融。

    相关文章

      网友评论

        本文标题:NLP 预处理总结

        本文链接:https://www.haomeiwen.com/subject/efwfpltx.html