NLP中几种分词库的简单使用(Python)

几种分词方法的简单使用:
一 . 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')
   
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]

 

结果如下图,会显示分词结果和词性
 
1 str1 = u'江州市长江大桥'
2 import thulac
3 thu = thulac.thulac()
4 word = thu.cut(str1,  text=False)
 
   对英文分词(会将连一起的“字母和数字”切分出来, 且常规英文空格也会切分出来):
  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
 
    词性解释:
 
 
三、snownlp
  1.  安装、概述、示例  
      pip install snownlp
      snownlp 是基于3-gram的词性标注、HMM模型的分词算法。 
      示例:
1 from snownlp import SnowNLP
2 str1 = u'江州市长江大桥'
3 snow_obj = SnowNLP(str1)
4 snow_obj.words  # list 分词后返回一个分词结果的list
5 for each in snow_obj:
6     print each 
      结果如下图  
 
  1. 参数、部分方法
1 from snownlp import SnowNLP
2 str1 = u'江州市长江大桥'
3 snow_obj = SnowNLP(str1)
4 snow_obj.words  # list 分词后返回一个分词结果的list
5 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 Cuttor
3 cuttor = Cuttor() # 然后会加载字典
4 word = cuttor.cut(str1) # 生成器对象
5 for each in word:
6     print word

 

yaha分词最大的弊端就是对英文无法在做分词,当遇到英文时,会将英文分为每个字母。
 
五、genius 
     1. 安装、简述和示例
      pip install genius
      genius 是一款开源中文分词器,其基于条件随机场(CRF)算法的。
   (这部分下次再写)

转载于:https://www.cnblogs.com/HankCui/p/10993330.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值