文本预处理的一般步骤和方法
文本预处理是一件极其耗费时间的事情,不仅繁琐而且涉及的细节很多,处理不好对后面的事情的影响很大。本文将简要介绍文本预处理的一般步骤和方法。
中文和英文的文本预处理有一点差异,一般情况下,我们对文本预处理的目标,都是将文本转变成结构化的数据形式。通常情况下,为了方便我们经常会使用向量空间模型(Vector Space Model,VSM)来表示文本。VSM假设文档之间的词语之间的顺序不影响文本的表达,将文本表示成词语及其频率的向量形式。举个简单的例子,假设我们有两个文本,分别如下(一行对应一个文本):
- I am a student. I have an apple.
- You are a teacher. You like apples.
当然正常情况下,一个文档比上述的一句话要长得多,这里我们只是举个例而已。最终,我们将会把模型变成如下形式的向量:
|| i | am | a | student | have | an | apple | you | are | teacher | like | apples | | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | |Doc1| 2 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | |Doc2| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 2 | 1 | 1 | 1| 1 |
一行是一个向量,每个单词在当前文档中出现的次数当做向量中对应位置的值。当然这种处理还差很多,比如,上述文档中,am/a/an等单词其实都是停用词,对于后续的任务来说一般都是多余的需要去掉。下面我们描述一下需要对文档进行预处理工作的一些内容。
一、中文分词
看名字就知道这是针对中文的处理方式,一般情况下,中午都是由标点符号隔开的句子组成,句子中间没有任何空格,我们对中文很熟悉,可以轻易的将句子中的单词分割出来,但是对于计算机来说,需要通过算法将单词切割开来才能做后续的预处理工作。对于中文的分词来说,目前技术上比较成熟,对于一般的通用的文本分词准确率都很高,对于特殊领域或者特殊句子,可以通过添加词库的方式强行将字合到一起。目前中文分词的程序主要有:
- NLPIR中文分词软件,早先由身在中科院的张华平开发,现在跳槽到北理工(前段时间干了一件惹了大家都不高兴的事情,呵呵,有才也得做正确的事啊),包括C语言版本、Java版本和Python版本。
- Jieba分词,非常不错的一块分词软件,立志做中文最好的分词工具,原生是Python语言写的,也有用Java实现的。
