天然语言处理之文本预处理(一)

本文主要参考Coursera上国立高等经济大学的天然语言处理课程。git

文本是什么?

在天然语言处理问题中,咱们能够讲文本当成是下述成分组成的序列(sequence):github

  • 词语
  • 句子
  • 段落
  • 文章
  • ...

本文主要以 词语 来举例。bash

token

什么是 token 呢?机器学习

  • 能够将 token 认为是语义处理过程当中的一个 有意义的单元
  • token 能够是 , , 段落 等等。

tokenization

天然语言处理的第一步一般是 tokenization,即将 输入的文本(sequence)转换为 token 的过程学习

因为中文的表示与英文不一样,英文中一般有空格来标识每个单词,中文没有明确的标识,因此中文的分词比较复杂;ui

一般使用而言,一些经常使用的分词库已经能够知足大部分需求。spa

eg. 使用 jieba 将一段文本分词。code

import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))

''' 我/ 来到/ 北京/ 清华大学 '''
复制代码

上述例子中的过程就是 tokenization 过程。orm

tokenization normalization

仅关注中文处理能够仅看概念blog

英文预处理过程当中的第二步叫作 tokenization normalization

这个过程是指 将相同含义可是不一样形式的词转换成同一个词(token

eg.

  • wolf, wolves -> wolf
  • talk, talks -> talk

一般有两种方式来实现这个过程:

  • 词干提取(stemming)
  • 词性还原(lemmatization)

由于我想主要集中在中文预处理,因此这两个过程就不叙述了,能够经过 nltk.stem.PorterStemmernltk.stem.WordNetLemmatizer 来实现这两种方式。

标点符号

在将文本转化为 token 的过程当中,标点符号 仅对阅读有用,而对 语义理解 没有太大做用。

eg.

  • 我来到北京清华大学
  • 我来到,北京清华大学。

上述两个句子的语义彻底相同,而在 tokenization 过程当中却获得两种不一样的结果。因此在文本预处理过程当中须要 去除标点符号

停用词

和标点符号类似,在文本预处理过程当中还须要去除之如“着”,“和”等一些 对语义理解帮助不大 的词,这些词就被称为 停用词

经常使用 中文停用词下载地址 见文章末尾。

英文停用词能够直接用 nltk 提供的

import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
复制代码

能够在停用词中加入标点符号,这样就能够统一两个过程。

总结

本文主要将了文本预处理中的几个概念:

  • 文本的组成
  • tokenization
  • 标点符号和停用词

下一篇文章将继续讲解 文本向量化表示的方式(传统机器学习)

  • BoW
  • BoW + n-gram
  • tf-idf
  • word2vec

参考文献

www.coursera.org/learn/langu…

github.com/fxsjy/jieba

中文经常使用停用词下载地址

相关文章
相关标签/搜索