天天看点

jieba textrank关键词提取 python_jieba 分词使用

jieba textrank关键词提取 python_jieba 分词使用

jieba

基于python坏境下最好(最方便)的中文分词。支持3种分词模式。

  • 精确模式,试图将句子最精确地切开,适合文本分析;
  • 全模式,把句子中所有的可以成词的短语都扫描出来,速度非常快,但是不能解决歧义;
  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合使用搜索引擎分词。

全模式/精准模式

jieba.cut/jieba.lcut           

jiaba.lcut 和jieba.cut的区别:

jieba.lcut返回的是list

jieba textrank关键词提取 python_jieba 分词使用

jieba.cut返回的是generator

jieba textrank关键词提取 python_jieba 分词使用
  • 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
  • cut_all 参数:是否使用全模式,默认值为

    False

  • HMM 参数:用来控制是否使用 HMM 模型,默认值为

    True

string=jieba.cut("我的父亲在阿里巴巴工作",cut_all=True) 
print("【全模式】:"+"/" .join(string))             

【全模式】:我/的/父亲/在/阿里/阿里巴巴/巴巴/工作

阿里巴巴分成了3个,阿里,阿里巴巴,巴巴。我们用精准模式看看

string=jieba.cut("我的父亲在阿里巴巴工作",cut_all=False) 
print("【全模式】:"+"/" .join(string))             

【全模式】:我/的/父亲/在/阿里巴巴/工作

阿里巴巴被准确识别为一个词了。

搜索引擎模式

jieba.cut_for_search/jieba.lcut_for_search
string=jieba.cut_for_search("我的父亲在阿里巴巴工作") 
print("【搜索引擎模式】:"+"/" .join(string))             

【搜索引擎模式】:我/的/父亲/在/阿里/巴巴/阿里巴巴/工作

貌似和全模式差不多,再来一句复杂一点的,看看全模式和搜索引擎模式的区别。

string1=jieba.cut("我的父亲在阿里巴巴工作,他最喜欢的是鲜肉蛋挞和鲜花花朵",cut_all=True) 
print("【全模式】:"+"/" .join(string))  

string2=jieba.cut_for_search("我的父亲在阿里巴巴工作,他最喜欢的是鲜肉蛋挞和鲜花花朵") 
print("【搜索引擎模式】:"+"/" .join(string))             

【全模式】:我/的/父亲/在/阿里/阿里巴巴/巴巴/工作/,/他/最/喜欢/的/是/鲜肉/肉蛋/挞/和/鲜花/花花/花朵

【搜索引擎模式】:我/的/父亲/在/阿里/巴巴/阿里巴巴/工作/,/他/最/喜欢/的/是/鲜肉/蛋挞/和/鲜花/花朵

可以看到,全模式的一个字会重复使用,肉/花重复使用了,而搜索引擎模式在找到其搭配的词后, 便放弃了对其的重复使用。

自定义添加词典

有一些可能结巴里没有,你可以自己定义,比如你定义:鲜肉蛋挞 为一个新词。

jieba.load_userdict(file_name)
jieba.load_userdict("C:Users24977Desktopdic.txt")           

dic 里面的内容是:词语,词频(可省略),词性(可省略)

因此我在dic添加的就是

鲜肉蛋挞

#未添加前
string=jieba.cut("我的父亲在阿里巴巴工作,他最喜欢的是鲜肉蛋挞和鲜花花朵") 
print("【未添加】:"+"/" .join(string))  
#添加后
jieba.load_userdict(r"C:Users24977Desktopdic.txt")
string2=jieba.cut("我的父亲在阿里巴巴工作,他最喜欢的是鲜肉蛋挞和鲜花花朵")
print("【添加后】:"+"/" .join(string2))             

【未添加】:我/的/父亲/在/阿里巴巴/工作/,/他/最/喜欢/的/是/鲜肉/蛋挞/和/鲜花

【添加后】:我/的/父亲/在/阿里巴巴/工作/,/他/最/喜欢/的/是/鲜肉蛋挞/和/鲜花/花朵

关键词提取

  • 基于TF-IDF的算法

计算公式:TF-IDF = TF * IDF

TF(Term Frequency,缩写为TF)也就是词频,即一个词在文中出现的次数,统计出来就是词频TF。

jieba textrank关键词提取 python_jieba 分词使用

IDF(inverse document frequency, IDF):逆文件频率,如果包含词条的文件越少,则说明词条具有很好的类别区分能力。

jieba textrank关键词提取 python_jieba 分词使用

如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0(比如”的 /得 /地“)。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。

jieba.analyse.extract_tags(sentence,topK=20,withWeight=False)           
  • sentence:为待提取的文本
  • topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight:是否一并返回关键词权重值,默认值为 False
  • allowPOS:仅包括指定词性的词,默认值为空
import jieba.analyse
sentence="秋意渐凉,中秋渐近,又到了一年中秋佳节。我眼前不由浮现出儿时过中秋的情景,那种记忆挥之不去,总觉得儿时的月亮最大最圆,儿时里的月饼最香甜也最可口,儿时的任何节日都是最有意义也最值得去回味。"
for x, w in jieba.analyse.extract_tags(sentence, topK=20, withWeight=True):
    print(x, w)           

儿时 1.4192772054206897

中秋 0.5899013876731034

渐凉 0.4793337121379311

秋意 0.4554320852206897

中秋佳节 0.38833173525517245

挥之不去 0.34806948835172413

香甜 0.32737787602448276

回味 0.3230371778903448

渐近 0.3169361189882759

月饼 0.31256537051793104

可口 0.3086868193655173

浮现 0.288255658855862

不由 0.2668056154462069

节日 0.26181307622310346

月亮 0.2616251588172414

记忆 0.25728714761655175

情景 0.2470654357837931

眼前 0.2111339664013793

值得 0.20750373450586207

那种 0.20586592405999998

  • 基于 TextRank 算法的关键词提

jieba.analyse.textrank其与 jieba.analyse.extract_tags有一样的参数。

for x, w in jieba.analyse.textrank(sentence, withWeight=True): 
    print(x, w)           

值得 1.0

记忆 0.8912986067997157

觉得 0.8855082365794966

秋意 0.6743735316436007

渐凉 0.6698096886939636

意义 0.508612815560427

回味 0.508612815560427

情景 0.45705862271340436

月亮 0.45365253232880354

词频统计

s=open(r"C:Users24977Desktop文档.txt","r",encoding='UTF-8').read()
counts={}
for word in jieba.lcut(s):
    if len(word)!=1:#排除了只有一个字的词
        counts[word] = counts.get(word,0) + 1
print(counts)               
jieba textrank关键词提取 python_jieba 分词使用

继续阅读