NLP学习过程记录(1)——jieba库

参考:

https://blog.csdn.net/reims2046/article/details/72869337

https://blog.csdn.net/xiaoxiangzi222/article/details/53483931

一、三种模式

  1. import jieba
  2.  
  3. seg_list = jieba.cut("我来到北京清华大学", cut_all=True, HMM=False)
  4. print("Full Mode: " + "/ ".join(seg_list)) # 全模式
  5.  
  6. seg_list = jieba.cut("我来到北京清华大学", cut_all=False, HMM=True)
  7. print("Default Mode: " + "/ ".join(seg_list)) # 默认模式
  8.  
  9. seg_list = jieba.cut("他来到了网易杭研大厦", HMM=False)
  10. print(", ".join(seg_list))#搜索引擎模式

结果:

二、打开电脑中的txt文件:

三、转化编码

四、主要功能方法

五、自定义词典:

1、用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径

2、词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。

3、jieba.add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。

4、 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

5、频率问题:

     要想切分出喵星人,只要满足

     P(喵星人) =max{ P(喵)*P(星)*P(人), P(喵星)*P(人), P(喵)*P(星人), P(喵星人) }

    (喵喵喵???这什么玩意)

六、词性标注:

  • jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
  • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
  • 用法示例
  • jieba.posseg.cut()
>>> import jieba.posseg as pseg
>>> words = pseg.cut("我爱北京天安门")
>>> for word, flag in words:
...    print('%s %s' % (word, flag))
...
我 r
爱 v
北京 ns
天安门 ns

七、关键词提取:(看不懂)

基于 TF-IDF 算法的关键词抽取

基于 TextRank 算法的关键词抽取

八、并行分词:

提高运行速度

不支持windows

九、Tokenize:返回词语在原文的起止位置

  • 注意,输入参数只接受 unicode
  • 默认模式

  • 搜索模式

十、词频统计

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import jieba
import jieba.analyse
import re,collections

def getNum(text,path):
    word = []
    counter = {}
    seg_list3 = jieba.cut(text,cut_all=True)  
    listStr="#".join(seg_list3)
    #print  "全模式: ",listStr
    list3 = listStr.decode("utf-8").split('#')
    for w in list3:
        if not w in word:
           word.append(w)
        if not w in counter:
           counter[w] = 1
        else:
           counter[w] += 1
    counter_list = sorted(counter.items(), key=lambda x: x[1], reverse=True)

                             #排序:key=排序所用的函数,reverse=是否由大到小排列
    #print counter_list
    f = open(path,"w")
    for j in counter_list:
        text= "\""+j[0].encode("gb18030").decode("gb18030")+"\","+str(j[1])
        print text
        f.write(text+"\n")
    print "the result write in "+path+"..."
    print "finish..."
    f.close()
getNum(sys.argv[1],sys.argv[2])
 

猜你喜欢

转载自blog.csdn.net/Junekakui/article/details/81195302
今日推荐