python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。
有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码,转换过程是这样的:
原有编码 -> 内部编码 -> 目的编码
import sys print sys.maxunicode
如果输出的值为65535,那么就是UCS-2,如果输出是1114111就是UCS-4编码。
我们要认识到一点:当一个字符串转换为内部编码后,它就不是str类型了!它是unicode类型:
a = "风卷残云" print type(a) b = a.unicode(a, "gb2312") print type(b)
<type 'str'> <type 'unicode'>
c = b.encode("utf-8") print c
好了,该说说codecs模块了,它和我上面说的概念是密切相关的。codecs专门用作编码转换,当然,其实通过它的接口是可以扩展到其他关于代码方面的转换的,这个东西这里不涉及。
#-*- encoding: gb2312 -*- import codecs, sysprint '-'*60 # 创建gb2312编码器 look = codecs.lookup("gb2312") # 创建utf-8编码器 look2 = codecs.lookup("utf-8")
a = "我爱北京天安门"
print len(a), a # 把a编码为内部的unicode, 但为什么方法名为decode呢,我的理解是把gb2312的字符串解码为unicode b = look.decode(a) # 返回的b[0]是数据,b[1]是长度,这个时候的类型是unicode了 print b[1], b[0], type(b[0]) # 把内部编码的unicode转换为gb2312编码的字符串,encode方法会返回一个字符串类型 b2 = look.encode(b[0]) # 发现不一样的地方了吧?转换回来之后,字符串长度由14变为了7! 现在的返回的长度才是真正的字数,原来的是字节数 print b2[1], b2[0], type(b2[0]) # 虽然上面返回了字数,但并不意味着用len求b2[0]的长度就是7了,仍然还是14,仅仅是codecs.encode会统计字数 print len(b2[0])
上面的代码就是codecs的使用,是最常见的用法。另外还有一个问题就是,如果我们处理的文件里的字符编码是其他类型的呢?这个读取进行做处理也需要特殊的处理的。codecs也提供了方法.
#-*- encoding: gb2312 -*- import codecs, sys# 用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode bfile = codecs.open("dddd.txt", 'r', "big5") #bfile = open("dddd.txt", 'r')
ss = bfile.read() bfile.close() # 输出,这个时候看到的就是转换后的结果。如果使用语言内建的open函数来打开文件,这里看到的必定是乱码 print ss, type(ss)
这是一本关于自然语言处理的书。所谓“自然语言”,是指人们日常交流使用的语言,如英语,印地语,葡萄牙语等。
来自 PythonProgramming.net 的文章,欢迎阅读自然语言处理系列教程,使用 Python 的自然语言工具包 NLTK 模块。
本书旨在介绍如何通过Python和NLTK实现自然语言处理。本书包括三个模块。模块1介绍文本挖掘/NLP任务中所需的所有预处理步骤,包括文本的整理和清洗、词性标注、对文本的结构进行语法分析、文本的分类等。 模块2讲述如何使用Python 3的NLTK 3进行文本处理,包括标记文本、替换和校正单词、创建自定义语料库、词性标注、提取组块、文本分类等。模块3讨论了如何通过Python掌握自然语言处理,包
主要内容 前言 课程列表 推荐学习路线 数学基础初级 程序语言能力 机器学习简介 自然语言学习初级 数学和机器学习知识补充 自然语言处理中级 自然语言处理专项领域学习 前言 我们要求把这些课程的所有Notes,Slides以及作者强烈推荐的论文看懂看明白,并完成所有的老师布置的习题,而推荐的书籍是不做要求的,如果有些书籍是需要看完的,我们会进行额外的说明。 课程列表 课程 机构 参考书 Notes
2. 自然语言和形式语言 自然语言(Natural Language)就是人类讲的语言,比如汉语、英语和法语。这类语言不是人为设计(虽然有人试图强加一些规则)而是自然进化的。形式语言(Formal Language)是为了特定应用而人为设计的语言。例如数学家用的数字和运算符号、化学家用的分子式等。编程语言也是一种形式语言,是专门设计用来表达计算过程的形式语言。 形式语言有严格的语法(Syntax)
自然语言是人类讲话使用的语言,如英语、西班牙语和法语等。虽然人们总要给自然语言加上一些规则,但自然语言并非人类设计,它们是自然演化而来的。 形式语言是人们为特定应用设计的语言。例如,数学家使用的记号就是一种便于表示数字与符号关系的形式语言。化学家也使用一种形式语言来表示分子的化学结构。最重要的是: 编程语言是人为设计的用来表达计算的形式语言。 前面也提到过,形式语言有严格的语法规则。比如3+3=6