Github:结巴分词地址 https://github.com/fxsjy/jieba

几种分词方法的简单使用:

一 . jieba

  1. 安装、示例     

       pip install jieba,jieba分词的语料是基于人民日报。

       分词示例

1 import jieba 2 3 str1 ='江州市长江大桥' 4 word_object = jieba.cut(str1) # 生成一个生成器对象 5 for each in word_object: 6 print each

      我要的分词结果是“江州/市长/江大桥”, 我需要自定义一个字典,给“江大桥”设置一个较大的频次

      当我将 “江大桥” 频次设为2000时发现并不能切分出来, 查看原始字典发现“长江大桥”频次3858,所以在概率统计上远大于“江大桥”,所以将“江大桥”频次设为1000万。

      但是实际是分不出来的,必须很极端的设为20000, 因为要保证P(江州)P(市长)P(江大桥) > P(江州)P(市)P(长江大桥)

      加载用户字典jieba.load_userdict()

jieba.load_userdict('userdict.txt')

 

jieba分词和Hanlp 分词 jieba分词步骤_python

 

jieba分词和Hanlp 分词 jieba分词步骤_自然语言处理_02

jieba分词和Hanlp 分词 jieba分词步骤_python_03

2. jieba.cut参数

cut(self, sentence, cut_all=False, HMM=True) method of jieba.Tokenizer instance 
 
  

       The main function that segments an entire sentence that contains 
 
  

       Chinese characters into seperated words. 
 
 

       

 

      Parameter: 

 

          - sentence: The str(unicode) to be segmented.   (需要分词的字符串) 

 

          - cut_all: Model type. True for full pattern, False for accurate pattern. (cut_all字段是分词的全模式和普通模式/默认模式) 

 

          - HMM: Whether to use the Hidden Markov Model. (是否使用HMM模式分词,default True)

 

关于全模式和默认模式:

str1= u“江州市长江大桥”为例: 

 
jieba.cut(str1, cut_all=True)  #全模式是将词可能生成的词完全切分出来
 

     Output: 

 

          江州/ 州市/市长/长江/长江大桥/大桥  (可以理解为:所有可以切分成词的都会显示出来, 尽可能多得分词) 

 
jieba.cut(str1, cut_all=False)
 

    Output: 

 

           江州/市/长江大桥 

 
add_word(word, freq=None, tag=None)   # 向词典添加词del_word(word)                        # 删除词典中的词
suggest_freq(segment, tune=True)      # 调整词频率

 

其他具体使用详见 https://github.com/fxsjy/jieba

 

二. Thulac

  1. 安装和使用

   Thulac 是清华大学的分词库,也是基于HMM的分词器

    pip install thulac安装

1 str1 = u'江州市长江大桥'2 import thulac
3 thu = thulac.thulac()
4 word = thu.cut(str1,  text=False)
5 for each in word:
6     print each[0], each[1]

结果如下图,会显示分词结果和词性

jieba分词和Hanlp 分词 jieba分词步骤_jieba分词和Hanlp 分词_04

1 str1 = u'江州市长江大桥'2 import thulac3 thu = thulac.thulac()
4 word = thu.cut(str1,  text=False)

jieba分词和Hanlp 分词 jieba分词步骤_jieba分词和Hanlp 分词_05

 

   对英文分词(会将连一起的“字母和数字”切分出来, 且常规英文空格也会切分出来):

jieba分词和Hanlp 分词 jieba分词步骤_python_06

jieba分词和Hanlp 分词 jieba分词步骤_词性_07

  1. 参数

 以下是help(thulac.thulac)的doc介绍

class thulac 

 

  |  Methods defined here: 

 

  |   

 

  |  __init__(self, user_dict=None, model_path=None, T2S=False, seg_only=False, filt=False, max_length=50000, deli='_', rm_space=False) 

 

  |      初始化函数,传入用户设置的参数,并且根据参数初始化不同 

 

  |      模型(调入不同的.dat文件,该文件存储了一个双数组trie树) 

 

  |      

 

          user_name=None, 设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码  

 

          model_path=None, 设置模型文件所在文件夹,默认为models/ 

 

     T2S=False, 是否将句子从繁体转化为简体 

 

      seg_only=False, False时候只进行分词,不进行词性标注 

 

      filt=False, 是否使用过滤器去除一些没有意义的词语,例如“可以”。 

 

          max_length=50000, 

 

          deli='_', 默认为‘_’, 设置词与词性之间的分隔符 

 

          rm_space=False, 是否去掉原文本中的空格后再进行分词 

 

  |    

 

  |  cut(self, oiraw, text=False)  

 

  |      text=False; 是否返回文本,不返回,则是个二维list (每一维度包含 词+词性);返回文本则是“分词_词性”组成的文本。 

 

  |  cut_f(self, input_file, output_file) 

 

  |       对文件分词 

 

  |  cutline(self, oiraw) 

 

  |       

 

  |  fast_cut(self, oiraw, text=False) 

 

  |     # fast 接口 cut-> fast_cut) 

 

  |  fast_cut_f(self, input_file, output_file) 

 

  |     # fast 接口 cut_f -> fast_cut_f 

 

  |  foo(self, x)  

 

  |     # foo占位符,表明某个变量、函数、命令不重要,但有这个想法。 

 

  |  multiprocessing_cut_f(self, input_file, output_file, core=0) 

 

  |     #多线程对文件分词 

 

  |  run(self) 

 

        #交互式: 屏幕input,屏幕output

 

    词性解释:

 

jieba分词和Hanlp 分词 jieba分词步骤_jieba分词和Hanlp 分词_08

   具体示例详见 https://github.com/thunlp/THULAC-Python#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E5%AE%9E%E7%8E%B0

 

三、snownlp

  1.  安装、概述、示例  

      pip install snownlp

      snownlp 是基于3-gram的词性标注、HMM模型的分词算法。 

      示例:

1 from snownlp import SnowNLP2 str1 = u'江州市长江大桥'3 snow_obj = SnowNLP(str1)4 snow_obj.words # list 分词后返回一个分词结果的list5 for each in snow_obj:6 print each

      结果如下图  

jieba分词和Hanlp 分词 jieba分词步骤_自然语言处理_09

  1. 参数、部分方法
2. 
  
   
1 from snownlp import SnowNLP2 str1 = u'江州市长江大桥'3 snow_obj = SnowNLP(str1)4 snow_obj.words  # list 分词后返回一个分词结果的list5 for each in snow_obj:6     print each 7 snow_obj.tags #  一维list,内含元组(词,词性)
8 snow_obj.sentiments # positive的概率
9 snow_obj.pinyin # 每个词转为拼音,每个词构成list

 

其他方法详见 https://github.com/isnowfy/snownlp 或help(SnowNLP)查看

 

四、yaha

 

  1.   安装、简述、示例

        pip install yaha

       yaha中文分词 基于查找句子的最大概率路径来进行分词

 

1 str1 = u'江州市长江大桥'2 from yaha import Cuttor3 cuttor = Cuttor() # 然后会加载字典4 word = cuttor.cut(str1) # 生成器对象5 for each in word:6     print word

 

jieba分词和Hanlp 分词 jieba分词步骤_自然语言处理_10

jieba分词和Hanlp 分词 jieba分词步骤_词性_11

yaha分词最大的弊端就是对英文无法在做分词,当遇到英文时,会将英文分为每个字母。

 

五、genius 

     1. 安装、简述和示例

      pip install genius

      genius 是一款开源中文分词器,其基于条件随机场(CRF)算法的。

   (这部分下次再写)

import re
from collections import Counter
import jieba


def cut_word(datapath):
    with open(datapath,'r',encoding='utf-8')as fp:
        string = fp.read()
        data = re.sub(r"[\s+\.\!\/_,$%^*(【】:\]\[\-:;+\"\']+|[+——!,。?、~@#¥%……&*()]+|[0-9]+", "", string)
        word_list = jieba.cut(data)
        print(type(word_list))
        return word_list

def static_top_word(word_list,top=5):
    result = dict(Counter(word_list))
    print(result)
    sortlist = sorted(result.items(),key=lambda x:x[1],reverse=True)
    resultlist = []
    for i in range(0,top):
        resultlist.append(sortlist[i])
    return resultlist


def main():
    datapath = 'comment.txt'
    word_list = cut_word(datapath)
    Result = static_top_word(word_list)
    print(Result)
main()