标签归档:NLP

中文文本处理简要介绍

本文作者李绳,博客地址 http://acepor.github.io/。作者自述:

一位文科生曾励志成为语言学家
出国后阴差阳错成了博士候选人
三年后交完论文对学术彻底失望
回国后误打误撞成了数据科学家

作为一个处理自然语言数据的团队,我们在日常工作中要用到不同的工具来预处理中文文本,比如 Jieba Stanford NLP software。出于准确性和效率的考虑,我们选择了Stanford NLP software, 所以本文将介绍基于 Stanford NLP software 的中文文本预处理流程。

中文文本处理简要介绍

与拉丁语系的文本不同,中文并不使用空格作为词语间的分隔符。比如当我们说“We love coding.”,这句英文使用了两个空格来分割三个英文词汇;如果用中文做同样的表述, 就是“我们爱写代码。”,其中不包含任何空格。因而,处理中文数据时,我们需要进行分词,而这恰恰时中文自然语言处理的一大难点。

下文将介绍中文文本预处理的几个主要步骤:

  1. 中文分词
  2. 标注词性
  3. 生成词向量
  4. 生成中文依存语法树

Stanford NLP software 简要介绍

Stanford NLP software 是一个较大的工具合集:包括 Stanford POS tagger 等组件,也有一个包含所有组件的合集 Stanford CoreNLP。各个组件是由不同的开发者开发的,所以每一个工具都有自己的语法。当我们研究这些组件的文档时,遇到了不少问题。下文记录这些问题和相对应的对策,以免重蹈覆辙。

Stanford NLP 小组提供了一个简明的FAQ——Stanford Parser FAQ 和一份详细的Java文档 ——Stanford JavaNLP API Documentation。在这两份文档中,有几点格外重要:

尽管PSFG分词器小且快,Factored分词器更适用于中文,所以我们推荐使用后者。

中文分词器默认使用GB18030编码(Penn Chinese Treebank的默认编码)。

使用 -encoding 选项可以指定编码,比如 UTF-8,Big-5 或者 GB18030。

中文预处理的主要步骤

1. 中文分词

诚如上面所言,分词是中文自然语言处理的一大难题。Stanford Word Segmenter 是专门用来处理这一问题的工具。FAQ请参见 Stanford Segmenter FAQ。具体用法如下:

bash -x segment.sh ctb INPUT_FILE UTF-8 0

其中 ctb 是词库选项,即 Chinese tree bank,也可选用 pku,即 Peking University。UTF-8是输入文本的编码,这个工具也支持 GB18030 编码。最后的0指定 n-best list 的大小,0表示只要最优结果。

继续阅读中文文本处理简要介绍