#Python系列#--自然语言处理之jieba中文分词

user

雨橙

中国.四川.成都

世界之上、唯有远见、惟爱不变。


jieba是python自然语言处理中常用的工具包之一。
这里介绍一下jieba工具包的基本使用。


安装jieba

pip install jieba

jieba分词分为三种模式:精确模式(默认)、全模式和搜索引擎模式
实例代码如下:
#!/usr/bin/python
# _*_ coding:utf-8 _*_

import jieba
import jieba.posseg as ps
strs = u"小明硕士毕业于中国科学院计算所,后在日本京都大学深造"

#精确模式
jbgen = jieba.cut(strs)
x = '|'.join(jbgen)
print(x)


#全模式
jbgen = jieba.cut(strs,cut_all=True)
x = '|'.join(jbgen)
print(x)


#搜索引擎模式
jbgen = jieba.cut_for_search(strs)
x = '|'.join(jbgen)
print(x)

词性分析:
import sys
reload(sys)
sys.setdefaultencoding('utf8')

#词性分析
x = ps.cut(strs)
for y in x:
    print("%s,%s" % (y.word,y.flag))
    print("{0},{1}".format(y.word,y.flag))
    print("\n")

并行分词:
# 开启并行分词模式,参数为并发执行的进程数,不支持windows系统
jieba.enable_parallel(2)


获取出现频率Top 20的词
with open("santi.txt") as f:
    content = f.read()
    x = jieba.cut(content)
    santi_txt = [y for y in x if len(y)>=2]

    #获取出现频率Top 20的词
    from collections import Counter
    z = Counter(santi_txt).most_common(20)
    for word in z:
        print("%s | %s" % (word[0],word[1]))


使用用户字典提高分词准确性
#使用用户字典提高分词准确性
txt = u'欧阳建国是创新办主任也是欢聚时代公司云计算方面的专家'
x = jieba.cut(txt)
print(",".join(x))

jieba.load_userdict("user_dict.txt")
x = jieba.cut(txt)
print(",".join(x))

文本文件:user_dict.txt的内容如下
欧阳建国 5
创新办 5 i
欢聚时代 5
云计算 5

格式为:词语 词频 词性
其中词频是一个数字,词性为自定义的词性,要注意的是词频数字和空格都要是半角的。

完整代码如下(仅供参考):
#!/usr/bin/python
# _*_ coding:utf-8 _*_
# author: robinn

import jieba
import jieba.posseg as ps
strs = u"小明硕士毕业于中国科学院计算所,后在日本京都大学深造"

#精确模式
jbgen = jieba.cut(strs)
x = '|'.join(jbgen)
print(x)


#全模式
jbgen = jieba.cut(strs,cut_all=True)
x = '|'.join(jbgen)
print(x)


#搜索引擎模式
jbgen = jieba.cut_for_search(strs)
x = '|'.join(jbgen)
print(x)


import sys
reload(sys)
sys.setdefaultencoding('utf8')

#词性分析
x = ps.cut(strs)
for y in x:
    print("%s,%s" % (y.word,y.flag))
    print("{0},{1}".format(y.word,y.flag))
    print("\n")


# 开启并行分词模式,参数为并发执行的进程数,不支持windows系统
#jieba.enable_parallel(2)

with open("santi.txt") as f:
    content = f.read()
    x = jieba.cut(content)
    santi_txt = [y for y in x if len(y)>=2]

    #获取出现频率Top 20的词
    from collections import Counter
    z = Counter(santi_txt).most_common(20)
    for word in z:
        print("%s | %s" % (word[0],word[1]))


#使用用户字典提高分词准确性
txt = u'欧阳建国是创新办主任也是欢聚时代公司云计算方面的专家'
x = jieba.cut(txt)
print(",".join(x))

jieba.load_userdict("user_dict.txt")
x = jieba.cut(txt)
print(",".join(x))


注: jieba具有对分词的词性进行标注的功能,词性类别如下:

Ag

形语素

形容词性语素。形容词代码为 a,语素代码g前面置以A。

a

形容词

取英语形容词 adjective的第1个字母。

ad

副形词

直接作状语的形容词。形容词代码 a和副词代码d并在一起。

an

名形词

具有名词功能的形容词。形容词代码 a和名词代码n并在一起。

b

区别词

取汉字“别”的声母。

c

连词

取英语连词 conjunction的第1个字母。
dg

副语素

副词性语素。副词代码为 d,语素代码g前面置以D。

d

副词

取 adverb的第2个字母,因其第1个字母已用于形容词。

e

叹词

取英语叹词 exclamation的第1个字母。

f

方位词

取汉字“方”

g

语素

绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。

h

前接成分

取英语 head的第1个字母。

i

成语

取英语成语 idiom的第1个字母。

j

简称略语

取汉字“简”的声母。

k

后接成分

 

l

习用语

习用语尚未成为成语,有点“临时性”,取“临”的声母。

m

数词

取英语 numeral的第3个字母,n,u已有他用。

Ng

名语素

名词性语素。名词代码为 n,语素代码g前面置以N。

n

名词

取英语名词 noun的第1个字母。

nr

人名

名词代码 n和“人(ren)”的声母并在一起。

ns

地名

名词代码 n和处所词代码s并在一起。

nt

机构团体

“团”的声母为 t,名词代码n和t并在一起。

nz

其他专名

“专”的声母的第 1个字母为z,名词代码n和z并在一起。

o

拟声词

取英语拟声词 onomatopoeia的第1个字母。

p

介词

取英语介词 prepositional的第1个字母。

q

量词

取英语 quantity的第1个字母。

r

代词

取英语代词 pronoun的第2个字母,因p已用于介词。

s

处所词

取英语 space的第1个字母。

tg

时语素

时间词性语素。时间词代码为 t,在语素的代码g前面置以T。

t

时间词

取英语 time的第1个字母。

u

助词

取英语助词 auxiliary

vg

动语素

动词性语素。动词代码为 v。在语素的代码g前面置以V。

v

动词

取英语动词 verb的第一个字母。

vd

副动词

直接作状语的动词。动词和副词的代码并在一起。

vn

名动词

指具有名词功能的动词。动词和名词的代码并在一起。

w

标点符号

 

x

非语素字

非语素字只是一个符号,字母 x通常用于代表未知数、符号。

y

语气词

取汉字“语”的声母。

z

状态词

取汉字“状”的声母的前一个字母。

un

未知词

不可识别词及用户自定义词组。取英文Unkonwn首两个字母。(非北大标准,CSW分词中定义)

posted at