2、 python文本关键词提取实现(案例)
2018-12-11 10:00
716 查看
第一、理论准备
1交叉计数函数
pivot_table(value,index,columns,aggfunc,fill_value)
# 参数说明
values:数据透视表中的值
index:数据透视表中的行(索引)
columns;数据透视表中的列
aggfunc:统计函数
fill_value:NA值的统一替换。
# 返回只说明:
数据透视表的结果
2 IDF 公式的实现程序:
IDF=log(文档总数/(包含该词的文档数)+1)
代码实现:
def hanlder(x):
return(numpy.log2(len(corpos)/(numpy.sum(x>0)+1)))
IDF=TF.apply(hanlder)
# 词频 TF
# 逆文档频率 IDF 是一个词的权重,它的大小与一个词的常见程度成反比
IDF=log(文档总数/(包含该词的文档数)+1)
# TF-IDF 权衡某个分词是否是关键词的指标,该值越大,是关键词的可能性也就越大。
TF-IDF=TF*IDF
第二、案例代码实践
[code] # 搭建语料库 import os import os.path import codecs filepaths = []; filecontents = []; for root, dirs, files in os.walk( "D:\\database\\python\\2.7\\mini\\Sample" ): for name in files: filepath = os.path.join(root,name); filepaths.append(filepath); f = codecs.open(filepath,'r','utf-8'); filecontent = f.read() f.close() filecontents.append(filecontent) import pandas; corpos = pandas.DataFrame({ 'filepath':filepaths, 'filecontent':filecontents }); #词频分词 import re # 匹配中文的分词 zhPattern = re.compile(u'[\u4e00-\u9fa5]+') import jieba segments = [] filepaths = [] for root, row in corpos.iterrows(): filepath = row['filepath'] filecontent =row['filecontent'] segs = jieba.cut(filecontent) for seg in segs: if zhPattern.search(seg): segments.append(seg); filepaths.append(filepath); segmentDF=pandas.DataFrame({ 'segment':segments, 'filepath':filepaths}); # 移除停用词 stopwords= pandas.read_csv( 'D:\\database\\python\\2.7\\StopwordsCN.txt', encoding='utf-8', index_col=False, quoting=3, sep="\t") segmentDF=segmentDF[ ~segmentDF.segment.isin(stopwords.stopword)] # 词频统计 import numpy; segstat = segmentDF.groupby( by=["segment","filepath"])["segment"].agg({ "计数":numpy.size }).reset_index().sort_values( '计数', ascending=False) #删除小部分数据 segstat=segstat[segstat.计数>1] # 进行文本向量统计 TF=segstat.pivot_table( values='计数', index='filepath', columns='segment', fill_value=0 ) TF.index TF.columns def hanlder(x): return(numpy.log2(len(corpos)/(numpy.sum(x>0)+1))) IDF=TF.apply(hanlder) TF_IDF=pandas.DataFrame(TF*IDF) tag1s=[] tag2s=[] tag3s=[] tag4s=[] tag5s=[] for filepath in TF_IDF.index: tags=TF_IDF.loc[filepath].sort_values( ascending=False )[:5].index tag1s.append(tags[0]) tag2s.append(tags[1]) tag3s.append(tags[2]) tag4s.append(tags[3]) tag5s.append(tags[4]) tagDF = pandas.DataFrame({ 'filepath':corpos.filepath, 'filecontent':corpos.filecontent, #### 注意这块必须锁定是corops里边的数据 ###否则,因为调取长度导致错误 'tag1':tag1s, 'tag2':tag2s, 'tag3':tag3s, 'tag4':tag4s, 'tag5':tag5s });
阅读更多
相关文章推荐
- 贝叶斯案例3:文本关键词提取、新闻分类(python实现)
- NLP自然语言处理 jieba中文分词,关键词提取,词性标注,并行分词,起止位置,文本挖掘,NLP WordEmbedding的概念和实现
- python多进程提取处理大量文本的关键词方法
- Python TF-IDF 算法 提取文本关键词
- python多进程提取处理大量文本的关键词
- SnowNLP:•中文分词•词性标准•提取文本摘要,•提取文本关键词,•转换成拼音•繁体转简体的 处理中文文本的Python3 类库
- python jieba实现关键词提取
- python实现关键词提取
- python实现textrank关键词提取
- textrank 关键词提取-python实现
- python实现关键词提取的示例讲解
- 中文文本提取关键词、关键词组、关键句(textrank4zh使用)--python学习
- python实现搜索文本文件内容脚本
- ARCGIS中Python实现按属性字段批量掩膜提取
- 使用PYTHON实现如何修改文本文件中的内容
- Python批量提取PDF文件中的文本
- Python案例-验证码实现
- Python实现随机读取文本N行数据
- Python模块探秘之smtplib,实现纯文本邮件的发送
- R+OCR︱借助tesseract包实现图片文本提取功能