如何用 Python 中的 NLTK 对中文进行分析和处理?

用nltk对自己的日记进行分析。得到以下结果(节选) '\xb8\xb0', '\xe5\xbc\xba\xe8\xba', '\xe5\xbd\xbc\xe5', '\xb8\xb4', '\xb8\x8a', '\xb8\x8b', '\xb8\x88', '\xb8\x89', '\xb8\x8e', '\xb8\x8f', '\xb8\x8d', '\xb8\x82', '\xb8\x83', '\xb8\x80', '\xb8\x81', '\xb8\x87', 'tend', '\xb8\x9a', 请问对于中文的自然语言分析,有哪些方法和工具可以推荐?
关注者
856
被浏览
98106

12 个回答

最近正在用nltk 对中文网络商品评论进行褒贬情感分类,计算评论的信息熵(entropy)、互信息(point mutual information)和困惑值(perplexity)等(不过这些概念我其实也还理解不深...只是nltk 提供了相应方法)。

我感觉用nltk 处理中文是完全可用的。其重点在于中文分词和文本表达的形式。
中文和英文主要的不同之处是中文需要分词。因为nltk 的处理粒度一般是词,所以必须要先对文本进行分词然后再用nltk 来处理(不需要用nltk 来做分词,直接用分词包就可以了。严重推荐结巴分词,非常好用)。
中文分词之后,文本就是一个由每个词组成的长数组:[word1, word2, word3…… wordn]。之后就可以使用nltk 里面的各种方法来处理这个文本了。比如用FreqDist 统计文本词频,用bigrams 把文本变成双词组的形式:[(word1, word2), (word2, word3), (word3, word4)……(wordn-1, wordn)]。
再之后就可以用这些来计算文本词语的信息熵、互信息等。
再之后可以用这些来选择机器学习的特征,构建分类器,对文本进行分类(商品评论是由多个独立评论组成的多维数组,网上有很多情感分类的实现例子用的就是nltk 中的商品评论语料库,不过是英文的。但整个思想是可以一致的)。

另外还有一个困扰很多人的Python 中文编码问题。多次失败后我总结出一些经验。
Python 解决中文编码问题基本可以用以下逻辑:
utf8(输入) ——> unicode(处理) ——> (输出)utf8
Python 里面处理的字符都是都是unicode 编码,因此解决编码问题的方法是把输入的文本(无论是什么编码)解码为(decode)unicode编码,然后输出时再编码(encode)成所需编码。
由于处理的一般为txt 文档,所以最简单的方法,是把txt 文档另存为utf-8 编码,然后使用Python 处理的时候解码为unicode(sometexts.decode('utf8')),输出结果回txt 的时候再编码成utf8(直接用str() 函数就可以了)。

另外这篇文章也有很详细的讲到nltk 的中文应用,很值得参考:http://blog.csdn.net/huyoo/article/details/12188573
额,楼主遇到的只是编码的问题…
有很多好用的中文处理包:
Jieba:可以用来做分词,词性标注,TextRank
HanLP:分词,命名实体识别,依存句法分析,还有FudanNLP,NLPIR
个人觉得都比NLTK好用~