数据挖掘——文本挖掘-关键字提取

基于jieba包的自动提取

  关键方法:jieba.analyse.extract_tags(content,topK=n)

  具体思路:通过jieba包自带的extract_tags方法,在遍历读取文件内容时,获得每篇文档前n个关键字

 使用的包: 

import os
import codecs
import pandas as pd
import jieba
import jieba.analyse

 过程:

‘‘‘定义变量
文件路径/文件内容/关键字(5个)‘‘‘
filepaths = []
contents =[]
tag1 = []
tag2 = []
tag3 = []
tag4 = []
tag5 = []

#遍历文件,同时得到关键字
for root, dirs, files in os.walk(
        r‘path‘):
    for name in files:
        filepath = root + ‘\\‘ +name  #根目录加文件名构成文件路径
        f = codecs.open(filepath,‘r‘,‘utf-8‘)  #根据文件路径以只读的形式打开文件
        content = f.read().strip()  #将文件内容传入content变量
        f.close() #关闭文件
        tags = jieba.analyse.extract_tags(content,topK=5) #根据文件内容获取前5个关键字(出现次数最多)
        filepaths.append(filepath) #得到文件路径的集合
        contents.append(content) #得到文件内容的集合
        tag1.append(tags[0])
        tag2.append(tags[1])
        tag3.append(tags[2])
        tag4.append(tags[3])
        tag5.append(tags[4])

tagDF = pd.DataFrame({
        ‘文件路径‘:filepaths,
        ‘文件内容‘:contents,
        ‘关键词1‘:tag1,
        ‘关键词2‘:tag2,
        ‘关键词3‘:tag3,
        ‘关键词4‘:tag4,
        ‘关键词5‘:tag5})

  最终得到包含文件路径,文件内容,和每篇5个关键字的数据框

基于TF-IDF算法的手动提取

  关键:基于TF-IDF原理,引入分词权重的概念

  词频(TF)
  逆文档频率(IDF):词的权重,即词的重要程度
  TF-IDF:权衡某个分词是否关键词的指标,值越大,是关键字的可能性就越大

  TF-IDF的计算公式:
  TF=该词在文档中出现的次数
  IDF=log[文档总数/(包含该词的文档数+1)]
  TF-IDF = TF*IDF

  Tips:只提取中文关键字,用正则表达式判断分词是否为中文

  具体实现:

  #创建语料库,导入停用词

  #获得分词结果

import re
zh = re.compile(u‘[\u4e00-\u9fa5]+‘)
import jieba
segments = []
filepath = []
#导入停用词
stopwords = pd.read_csv(r‘path‘,encoding=‘utf-8‘,index_col=False)

for index, row in corpos.iterrows():
    filePath = row[‘filePath‘]
    fileContent = row[‘fileContent‘]
    segs = jieba.cut(fileContent)
    for seg in segs:
        if zh.search(seg):  #只匹配中文分词
             if (seg not in stopwords.stopword.values) and (len(seg.strip())>1): #取非停用词和长度>1的词
                 segments.append(seg)
                 filepath.append(filePath)

segmeng_DF = pd.DataFrame({
        ‘segment‘: segments,
        ‘filePath‘: filepath})

  #词频统计

import numpy as np
segcount = segmeng_DF.groupby(by=[‘filePath‘,‘segment‘
                    ])[‘segment‘].agg({‘词频‘:np.size}
                    ).reset_index().sort_values(by=[‘词频‘],ascending=False)
segcount = segcount[segcount.词频 > 1] #只取词频大于1的分词

  #词频向量化运算  

TF =segcount.pivot_table(index=‘filePath‘,
                         columns=‘segment‘,
                         values=‘词频‘,
                         fill_value=0)
TF.columns #列名是各篇文章的分词集合

  #根据公式分别得到IDF和TF-IDF的值

def hanlder(x):
    return (np.log2(len(corpos) / (np.sum(x>0)+1)))

IDF = TF.apply(hanlder)  #结果是各分词的权重

TF_IDF = pd.DataFrame(TF*IDF)

TF_IDF.columns #列名是各篇文章的分词集合
TF_IDF.index #索引是文件路径

  #获取关键字

tag1 = []
tag2 = []
tag3 = []
tag4 = []
tag5 = []

for filePath in TF_IDF.index:
    tagis = TF_IDF.loc[filePath].sort_values(ascending=False)[:5].index
    tag1.append(tagis[0])
    tag2.append(tagis[1])
    tag3.append(tagis[2])
    tag4.append(tagis[3])
    tag5.append(tagis[4])

  #最后得到包含文件路径,文件内容,和每篇5个关键字数据框

  

原文地址:https://www.cnblogs.com/rix-yb/p/9690314.html

时间: 2024-11-03 12:23:01

数据挖掘——文本挖掘-关键字提取的相关文章

数据挖掘——关键字提取—基于sklearn包实现

什么是sklearn? sklearn全名是Scikit-Learn,是基于Python的机器学习模块,基于BSD开源许可证,官方网址是:http://scikit-learn.org/stable Scikit-Learn的数据结构基于Numpy和Pandas模块,数据计算基于Scipy模块,数据可视化基于Matplotlib模块. Scikit-Learn的基本功能: 分类:回归:聚类:数据降维:模型选择:数据预处理. Scikit-Learn将具体的机器学习分为3个步骤: 数据准备与预处理

关键字提取算法TF-IDF和TextRank(python3)————实现TF-IDF并jieba中的TF-IDF对比,使用jieba中的实现TextRank

关键词:    TF-IDF实现.TextRank.jieba.关键词提取数据来源:    语料数据来自搜狐新闻2012年6月-7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据    数据处理参考前一篇文章介绍:    介绍了文本关键词提取的原理,tfidf算法和TextRank算法    利用sklearn实现tfidf算法    手动python实现tfidf算法    使用jieba分词的tfidf算法和TextRank提取关键词 1.关键字提取: 关键词抽取就是从文本里面把跟这

3 中文文本中的关键字提取

前言 关键词提取就是从文本里面把跟这篇文章意义最相关的一些词语抽取出来.这个可以追溯到文献检索初期,关键词是为了文献标引工作,从报告.论文中选取出来用以表示全文主题内容信息的单词或术语,在现在的报告和论文中,我们依然可以看到关键词这一项.因此,关键词在文献检索.自动文摘.文本聚类/分类等方面有着重要的应用,它不仅是进行这些工作不可或缺的基础和前提,也是互联网上信息建库的一项重要工作. 关键词抽取从方法来说主要有两种: 第一种是关键词分配:就是给定一个已有的关键词库,对于新来的文档从该词库里面匹配

数据挖掘——关键字提取—sklearn的实际应用

前面的步骤都相似 #构建语料库 #使用jieba包进行分词,并将分词结果用空格分隔后再传回分词列表 zh = re.compile(u'[\u4e00-\u9fa5]+') #中文的正则表达式 for seg in segs: if zh.search(seg): #只匹配中文分词 segments.append(seg) filepath.append(filePath) #使用空格将符合要求的分词隔开,然后放回语料库中,而不是得到分词和路径的矩阵 row['fileContent'] = '

信息技术手册可视化进度报告 基于jieba的关键字提取技术

在这一篇博客之前,我已经将word文件中的内容通过爬虫的方式整理到数据库中了,但是为了前台展示的需要,还必须提取出关键字,用于检索. 我用的是jieba分词,GitHub地址:https://github.com/fxsjy/jieba 在项目中主要用到的是jieba分词技术中的提取文章中的关键字的技术: 基于 TF-IDF 算法的关键词抽取 import jieba.analyse jieba.analyse.extract_tags(sentence, topK=20, withWeight

关键字提取算法TF-IDF

在文本分类的学习过程中,在"如何衡量一个关键字在文章中的重要性"的问题上,遇到了困难.在网上找了很多资料,大多数都提到了这个算法,就是今天要讲的TF-IDF. 总起 TF-IDF,听起来很高大上啊,其实理解起来相当简单,他实际上就是TF*IDF,两个计算值的乘积,用来衡量一个词库中的词对每一篇文档的重要程度.下面我们分开来讲这两个值,TF和IDF. TF TF,是Term Frequency的缩写,就是某个关键字出现的频率,具体来讲,就是词库中的某个词在当前文章中出现的频率.那么我们可

关键字提取算法之TF-IDF扫盲

TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度.字词的重要性随著它在文件中出现的次数成正比增加,但同时会随著它在语料库中出现的频率成反比下降.TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关 ... TF/IDF算法可能并不是百度的重要方法,google适用:百度个人认为是向量空间模型,

数据挖掘——文本挖掘

文本挖掘是将文本信息转化为可利用的数据的知识. 第一步:创建"语料库" 语料库(Corpus)是我们要分析的所有文档的集合. 实现逻辑: 将各文本文件分类放置在一个根目录下,通过读取根目录下所有子目录中的所有文件, 然后将读取结果赋值到一个数据框中,得到含有文件路径.文件内容的结果. 代码核心: 构建方法:os.walk(fileDir)    对在fileDir目录下的所有文件(for循环)进行操作  ,得到文件路径 文件读取:codecs.open(filepath,medthod

TextRank算法提取关键词的Java实现

谈起自动摘要算法,常见的并且最易实现的当属TF-IDF,但是感觉TF-IDF效果一般,不如TextRank好. TextRank是在 Google的PageRank算法启发下,针对文本里的句子设计的权重算法,目标是自动摘要.它利用投票的原理,让每一个单词给它的邻居(术语称窗口) 投赞成票,票的权重取决于自己的票数.这是一个"先有鸡还是先有蛋"的悖论,PageRank采用矩阵迭代收敛的方式解决了这个悖论.TextRank也 不例外: PageRank的计算公式: 正规的TextRank公