zoukankan      html  css  js  c++  java
  • python结巴(jieba)分词

     python结巴(jieba)分词

    一、特点

    1、支持三种分词模式:
      (1)精确模式:试图将句子最精确的切开,适合文本分析。
      (2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。
      (3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
    2、支持繁体分词
    3、支持自定义词典

    二、实现

    结巴分词的实现原理主要有一下三点:
    (1)基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)。
    (2)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合。
    (3)对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。

    三、应用

    我们来演示一下结巴分词的主要功能

    1、分词

    复制代码
     1 #-*- coding:utf-8 -*-
     2 
     3 
     4 import jieba
     5 
     6 
     7 
     8 '''
     9 cut方法有两个参数
    10 1)第一个参数是我们想分词的字符串
    11 2)第二个参数cut_all是用来控制是否采用全模式
    12 '''
    13 
    14 #全模式
    15 word_list = jieba.cut("今天天气真好。亲爱的,我们去远足吧!",cut_all=True)
    16 print "全模式:","|".join(word_list)
    17 #精确模式 , 默认就是精确模式
    18 word_list = jieba.cut("今天天气真好。亲爱的,我们去远足吧!",cut_all=False)
    19 print "精确模式:","|".join(word_list)
    20 #搜索引擎模式
    21 word_list = jieba.cut_for_search("今天天气真好。亲爱的,我们去远足吧!")
    22 print "搜索引擎:","|".join(word_list)
    复制代码

    2、添加自定义词典

    虽然jieba有新词识别能力,但是自己添加新词可以保证更高的正确率。
    开发者可以根据自己的需要添加自定义词典,以便包含jieba词库里没有的词。
    例:小红今天我们还去以前经常去的地方远足吗?要不咱们换个地方吧!园小园怎么样?没问题小豆芽

    自定义词典(cu.txt):
    园小园 5
    小豆芽 3 nr

    一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),中间用空格隔开。

    1 #-*- coding:utf-8 -*-
    2 import jieba
    3 
    4 jieba.load_userdict("./cu.txt")
    5 word_list = jieba.cut("小红今天我们还去以前经常去的地方远足吗?要不咱们换个地方吧!园小园怎么样?没问题小豆芽")
    6 print "|".join(word_list)

    3、关键词提取

    1)第一个参数(setence)为待提取的文本。
    2)topK为返回几个TF/IDF权重最大的关键词,默认值为20,可以自己指定。

    1 #-*- coding:utf-8 -*-
    2 import jieba.analyse as al
    3 
    4 content = open("./topk.txt","rb").read()
    5 word_topk = al.extract_tags(content,topK=4)
    6 print "|".join(word_topk)

    4、词性标注

    标注句子分词后每个词的词性,采用和ictclas兼容的标记法。

    1 #-*- coding:utf-8 -*-
    2 import jieba.posseg as pseg
    3 
    4 words = pseg.cut("青岛北京是不错的地方")
    5 for word in words:
    6     print word.word,word.flag

    运行结果:
    青岛 ns
    北京 ns
    是 v
    不错 a
    的 uj
    地方 n

    5、并行分词(只能在linux系统上运行)

    将要进行分词的文本按行分隔,把各行文本分配到多个python进程中去,然后归并结果,从而使分词速度提升。 
    基于python的multiprocessing模块,目前不支持windows系统。

    复制代码
    #-*- coding:utf-8 -*-
    import jieba
    #开启并行分词模式,参数为参与并行分词的进程数
    jieba.enable_parallel(2)
    #关闭并行分词
    #jieba.disable_parallel()
    content = open("./topk.txt","rb")
    words = jieba.cut(content)
    print "|".join(words)
    复制代码

    6、模块初始化机制的改变:lazy load (从0.28版本开始)

    下载你所需要的词典,然后覆盖jieba/dict.txt或者用jieba.set_dictionary("")将其覆盖。

    复制代码
    1 #-*- coding:utf-8 -*-
    2 
    3 import jieba
    4 jieba.set_dictionary("./dict.txt")
    5 content = open("./content.txt","rb").read()
    6 words = jieba.cut(content)
    7 print "|".join(words)
    复制代码

    7、Tokenize:返回词语在原文的起始位置

    1)第一个参数为文本内容。
    2)第二个参数mode可以不用默认模式,指定为“search”搜索引擎模式。

    1 #-*- coding:utf-8 -*-
    2 import jieba
    3 
    4 result = jieba.tokenize(u'今天天气真好。亲爱的,我们去远足吧!')
    5 for token in result:
    6     print "word %s		 start: %d 		 end:%d" % (token[0],token[1],token[2])
  • 相关阅读:
    前端工程师们,这些干货让你开发效率加倍
    我的代码片段
    人生至少有一次为了自己的勇气而活
    美食篇之御桥小聚
    美食篇之好好对自己
    F
    Github 简明教程
    A
    完美字符串
    1222: FJ的字符串 [水题]
  • 原文地址:https://www.cnblogs.com/hzpythoner/p/7081576.html
Copyright © 2011-2022 走看看