一 分词原理

利用中文词库,确定汉字之间的相关概率,将汉字件概率大的组成词组,形成分词结果。另外,在一些情况下,需要自定词组时,也可以自行定义。

二 jieba库的使用

jieba库分词有三种模式:精确模式,全模式和搜索引擎模式
精确模式:

  1. 精确模式:把文本精确分开,不存在冗余单词
  2. 全模式:把文本中所有可能的词扫描出来,存在冗余
  3. 搜索引擎模式:在精确模式基础上,对长词再次拆分

常用函数

函数

描述

jieba.lcut(s)

精确模式,返回一个列表类型的分词结果

jieba.lcut(s,cut_all=True)

返回全模式列表分词结果

jieba.cut(s,cut_all=False)

返回的是一个迭代器。参数cut_all是bool类型,默认为False,即精确模式,当为True时,则为全模式

jieba.lcut_for_search(s)

返回搜索引擎模式下的列表分词结果

jieba.addword(w)

向分词词典中添加新词

三 实例

hamlet
#读取文件
def getText(filepath):
    txt = open(filepath,'r').read()
    txt = txt.lower()
    for ch in '!""@#$%&*()+-,./;:<=>[\\]^_{|}~':
        txt  = txt.replace(ch,' ')
    return txt
#词频统计
def item_sort(txt):
    words = txt.split()
    counts = {}
    for word in words:
        counts[word] = counts.get(word,0)+1
    items = list(counts.items())
    items.sort(key=lambda x:x[1],reverse=True)
    return items

Hamlet = getText('./Hamlet.txt')
item_sort(Hamlet)
sentence = '一个超过5000万人关注的大项目,您参加了吗?央视新闻新媒体推出武汉火神山、雷神山医院建设现场24小时不间断直播,短短几天时间吸引无数关心医院建设的网友围观。其中最受广大网友关注的火神山两路镜头对准的正是中建三局三公司承建区域,截至30日13:50,在看人数已突破5000万。'

# 获取分词
seg_list = jieba.cut(sentence,cut_all=False)
print('/'.join(seg_list))

jieba分词 vs hanlp jieba分词库_搜索引擎

三 关键词提取

于此同时,jieba还提供了一些封装好的算法,可用于文本分析

textrank提取关键词

import jieba.analyse
jieba.analyse.textrank(string,topK=20,withWeight=True,allowPOS())

参数

说明

string

待处理语句

topK

关键词个数

withWeight

是否返回权重值,默认为False

allowPOS()

默认为空,可以用于限制返回关键词的词性

keywords = jieba.analyse.textrank(text,topK=20,withWeight=True,allowPOS('n','nr','ns'))
for item in keywords:
    print(item[0],item[1])

利用TF-IDF提取关键词

TF:term frequency 词频,即单词在文档出现的次数

IDF: inverse document frequency 逆向文档率,单词在所有文档中的出现

jieba分词 vs hanlp jieba分词库_读取文件_02


jieba分词 vs hanlp jieba分词库_文本分析_03


jieba分词 vs hanlp jieba分词库_文本分析_04

import jieba.analyse
keywords = jeiba.analyse.extract_tags(text,topK=20,withWeight=True,allowPOS('n','nr','ns')