python做中文分词处理主要有以下几种:结巴分词、NLTK、THULAC
①.、fxsjy/jieba
结巴的标语是:做最好的 Python 中文分词组件,或许从现在来看它没做到最好,但是已经做到了使用的人最多.结巴分词网上的学习资料和使用案例比较多,上手相对比较轻松,速度也比较快.
结巴的优点:
支持三种分词模式
支持繁体分词
支持自定义词典
MIT 授权协议
前两天我在做有关于共享单车的用户反馈分类,使用jieba分词一直太过零散,分类分不好.后来江兄给我推荐了THULAC: 由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包 .THULAC的接口文档很详细,简单易上手.
THULAC分词的优点:
Python 解决中文编码问题基本可以用以下逻辑:
Python 里面处理的字符都是都是unicode 编码,所以呢解决编码问题的方法是把输入的文本(无论是什么编码)解码为(decode)unicode编码,然后输出时再编码(encode)成所需编码.
下面这个程序是对一个文本文件里的内容进行分词的程序:test.py
[python] view plain copy
#!/usr/bin/python
import?jieba?????????#导入jieba模块
def?splitSentence(inputFile,?outputFile):
fin?=?open(inputFile,?'r')??????#以读的方式打开文件
fout?=?open(outputFile,?'w')??????#以写得方式打开文件
for?eachLine?in?fin:
wordList?=?list(jieba.cut(line))????#用结巴分词,对每行内容进行分词
outStr?=?''
for?word?in?wordList:
outStr?+=?word
outStr?+=?'/?'
fin.close()
fout.close()
splitSentence('myInput.txt',?'myOutput.txt')
写完程序之后,在Linux重点输入:python test.py即可运行程序进行分词.
输入的文件内容如下所示:
经过结巴分词后,输出结果如下所示:
注意:第11行的 jieba.cut()返回的结构是一个可迭代的generator,可以用list(jieba.cut(...))转化为list
import?os,?codecs
import?jieba
from?collections?import?Counter
def?get_words(txt):
seg_list?=?jieba.cut(txt)
c?=?Counter()
for?x?in?seg_list:
if?len(x)1?and?x?!=?'\r\n':
c[x]?+=?1
print('常用词频度统计结果')
for?(k,v)?in?c.most_common(100):
if?__name__?==?'__main__':
txt?=?f.read()
get_words(txt)
①. tf.contrib.learn.preprocessing.VocabularyProcessor (max_document_length, min_frequency=0, vocabulary=None, tokenizer_fn=None)
参数:
max_document_length: 文档的最大长度.如果文本的长度大于最大长度,那么它会被剪切,反之则用0填充.
min_frequency: 词频的最小值,出现次数小于最小词频则不会被收录到词表中.
vocabulary: CategoricalVocabulary 对象.
tokenizer_fn:分词函数
代码:
from tensorflow.contrib import learn
import numpy as np
x_text =[
'i love you',
'me too'
]
vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length)
vocab_processor.fit(x_text)
print next(vocab_processor.transform(['i me too'])).tolist()
x = np.array(list(vocab_processor.fit_transform(x_text)))
print x
①.、全局变量在函数中使用时需要加入global声明
jieba是一个在中文自然语言处理中用的最多的工具包之一,它以分词起家,目前已经能够实现包括分词、词性标注以及命名实体识别等多种功能.既然Jieba是以分词起家,我们自然要首先学习Jieba的中文分词功能.Jieba提供了三种分词模式:
在jieba分词中,最常用的分词函数有两个,分别是 cut 和 cut_for_search ,分别对应于"精确模式/全模式"和"搜索引擎模式".
当然,两者的输入参数也不一样,cut函数的输入主要有三个,分别是:
cut_for_search 函数主要有两个参数:
需要注意的是, cut 和 cut_for_search 返回的都是generator,如果想直接返回列表,需要使用 lcut 和 lcut_for_search
如果在一些特定场景中,需要使用一些特殊词汇进行分词,就需要加载自定义的分词词典:
其中,用户字典的格式为:
每一行表示一个单词,每行最多由三部分组成
如果只是少量词汇,可以使用
需要注意的是,如果没有给出词频和词性信息,在后续的处理中可能会造成一定的影响.
jieba提供了两种关键词提取算法,分别是TF-IDF以及TextRank
关于TF-IDF的原理,可以参考吴军老师的<<数学之美>>,里面给出了很详细的说明.本文只介绍利用TF-IDF算法提取关键词.
其中:
TextRank的用法与extract_tags的函数定义完全一致
词性标注主要是在分词的基础上,对词的词性进行判别,在jieba中可以使用如下方式进行:
在jieba中采用将目标文档按行分割,对每一行采用一个Python进程进行分词处理,然后将结果归并到一起(有点类似于MapReduce).据说目前尚不支持Windows,仅支持Linux和MacOS.
启动并行分词使用如下命令:
关闭并行分词使用如下命令:
使用tokenize函数后,会获得一个词语信息的元组,元组中的第一个元素是分词得到的结果,第二个元素是词的起始位置,第三个元素是词的终止位置.
除了本文介绍的jieba分词工具包以外,还有很多好用的中文分词工具,比如
以上就是土嘎嘎小编为大家整理的python分词函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!