首页 > 其他分享 >关键词提取

关键词提取

时间:2024-04-05 11:12:34浏览次数:24  
标签:提取 no -- text 关键词 list words keyphrases

参考:

NLP关键词提取方法总结及实现_关键词提取算法-CSDN博客

TF-IDF算法介绍及实现-CSDN博客

TextRank算法介绍及实现-CSDN博客

使用pandas库实现csv行和列的获取 - chuyaoxin - 博客园 (cnblogs.com)

一看到地图数据下钻显示我就烦。。。。没关系的。。。。。额。看错了原来不用实现太好辣哈哈哈哈哈哈哈哈额。

那就用TextRank提取关键词吧~

可能出现的错误:

1.module'networks 'has no attribute 'from_numpy_ matrix ',可参考这篇文章进行解决文本摘要 - 使用 TextRank4ZH 抽取中文文本摘要_textrank4sentence-CSDN博客

2.ImportError: cannot import name 'gcd' from 'fractions' 可以尝试在lib文件夹中找到fractions.py文件,在导入库那里加入一行from math import gcd

文件在哪找:看报错提示后面有写。

主要实现代码(主要就是改改text的获取,然后在输出到想要的文件即可):

文本文件处理方法可参考如下代码

# coding=utf-8
from textrank4zh import TextRank4Keyword, TextRank4Sentence
import jieba.analyse
import codecs
# from snownlp import SnowNLP
import pandas as pd
# import numpy as np


# 关键词抽取
def keywords_extraction(text):
    tr4w = TextRank4Keyword(allow_speech_tags=['n', 'nr', 'nrfg', 'ns', 'nt', 'nz'])
    # allow_speech_tags   --词性列表,用于过滤某些词性的词
    tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words',
                 pagerank_config={'alpha': 0.85, })
    # text    --  文本内容,字符串
    # window  --  窗口大小,int,用来构造单词之间的边。默认值为2
    # lower   --  是否将英文文本转换为小写,默认值为False
    # vertex_source  -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点
    #                -- 默认值为`'all_filters'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'
    # edge_source  -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点之间的边
    #              -- 默认值为`'no_stop_words'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'`。边的构造要结合`window`参数

    # pagerank_config  -- pagerank算法参数配置,阻尼系数为0.85
    keywords = tr4w.get_keywords(num=6, word_min_len=2)
    # num           --  返回关键词数量
    # word_min_len  --  词的最小长度,默认值为1
    return keywords


# 关键短语抽取
def keyphrases_extraction(text):
    tr4w = TextRank4Keyword()
    tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words',
                 pagerank_config={'alpha': 0.85, })
    keyphrases = tr4w.get_keyphrases(keywords_num=6, min_occur_num=1)
    # keywords_num    --  抽取的关键词数量
    # min_occur_num   --  关键短语在文中的最少出现次数
    return keyphrases


# 关键句抽取
def keysentences_extraction(text):
    tr4s = TextRank4Sentence()
    tr4s.analyze(text, lower=True, source='all_filters')
    # text    -- 文本内容,字符串
    # lower   -- 是否将英文文本转换为小写,默认值为False
    # source  -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来生成句子之间的相似度。
    #           -- 默认值为`'all_filters'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'
    # sim_func -- 指定计算句子相似度的函数

    # 获取最重要的num个长度大于等于sentence_min_len的句子用来生成摘要
    keysentences = tr4s.get_key_sentences(num=3, sentence_min_len=6)
    return keysentences


def keywords_textrank(text):
    keywords = jieba.analyse.textrank(text, topK=6)
    return keywords


if __name__ == "__main__":
    f = codecs.open('../数据清洗/t1_test_test.txt', mode='r', encoding='utf-8')
    lines = f.readlines()
    # 第八列是项目成果简介,提取出来
    lines = lines[:160]
    text_list = []  # 项目成果简介
    key_list = []   # 关键词
    keyphrases_list = []    # 关键短语
    for line in lines:
        # print(line.strip().split("|")[8])
        text_list.append(line.strip().split("|")[8])
    print(text_list)

    # 关键词抽取
    for text in text_list:
        key_list.append(keywords_extraction(text))
        keyphrases_list.append(keyphrases_extraction(text))
        # keysentences_extraction(text) # 关键句抽取

    print(key_list)
    print(keyphrases_list)

 

对csv文件可参考一下代码

# coding=utf-8
from textrank4zh import TextRank4Keyword, TextRank4Sentence
import jieba.analyse
import codecs
# from snownlp import SnowNLP
import pandas as pd
# import numpy as np


# 关键词抽取
def keywords_extraction(text):
    tr4w = TextRank4Keyword(allow_speech_tags=['n', 'nr', 'nrfg', 'ns', 'nt', 'nz'])
    # allow_speech_tags   --词性列表,用于过滤某些词性的词
    tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words',
                 pagerank_config={'alpha': 0.85, })
    # text    --  文本内容,字符串
    # window  --  窗口大小,int,用来构造单词之间的边。默认值为2
    # lower   --  是否将英文文本转换为小写,默认值为False
    # vertex_source  -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点
    #                -- 默认值为`'all_filters'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'
    # edge_source  -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点之间的边
    #              -- 默认值为`'no_stop_words'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'`。边的构造要结合`window`参数

    # pagerank_config  -- pagerank算法参数配置,阻尼系数为0.85
    keywords = tr4w.get_keywords(num=6, word_min_len=2)
    # num           --  返回关键词数量
    # word_min_len  --  词的最小长度,默认值为1
    return keywords


# 关键短语抽取
def keyphrases_extraction(text):
    tr4w = TextRank4Keyword()
    tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words',
                 pagerank_config={'alpha': 0.85, })
    keyphrases = tr4w.get_keyphrases(keywords_num=6, min_occur_num=1)
    # keywords_num    --  抽取的关键词数量
    # min_occur_num   --  关键短语在文中的最少出现次数
    return keyphrases


# 关键句抽取
def keysentences_extraction(text):
    tr4s = TextRank4Sentence()
    tr4s.analyze(text, lower=True, source='all_filters')
    # text    -- 文本内容,字符串
    # lower   -- 是否将英文文本转换为小写,默认值为False
    # source  -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来生成句子之间的相似度。
    #           -- 默认值为`'all_filters'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'
    # sim_func -- 指定计算句子相似度的函数

    # 获取最重要的num个长度大于等于sentence_min_len的句子用来生成摘要
    keysentences = tr4s.get_key_sentences(num=3, sentence_min_len=6)
    return keysentences


def keywords_textrank(text):
    keywords = jieba.analyse.textrank(text, topK=6)
    return keywords


if __name__ == "__main__":
    df = pd.read_csv("t2.csv",encoding= 'utf-8')
    # 如果导出的csv文件没有行头,可以设置一个
    df.columns=['ID','成果名称','行业','年度','批准登记号','单位名称','课题来源','主要人员','评价单位名称','成果简介']
    # t2的最后一列是成果简介列,提取出来
    # 这里要注意iloc和loc的区别,loc是从1开始,iloc从0开始
    # (这俩种方法也可以)text_list = df[['成果简介']]       text_list = df.loc[:,'成果简介']
    t2_text = df.iloc[:,[9]]      # 项目成果简介
    print(t2_text)
    t2_key_list = []  # 关键词+比重
    t2_keyphrases_list = []  # 关键短语
    print(t2_text.values[2])

    # 关键词抽取
    for i in range(len(t2_text)):
        # print(t2_text.values[i])    # 打印出来的是1X1数组
        # 所以这里需要再取一下数组里面的具体内容(字符串)
        t2_key_list.append(keywords_extraction(t2_text.values[i][0]))
        t2_keyphrases_list.append(keyphrases_extraction(t2_text.values[i][0]))     # 关键短语

    # 将关键词数据添加到文件中
    # df['关键短语']=t2_keyphrases_list     # 如果直接这样子写,有些关键词是一个数组,写入也是数组的形式['玉米播种', '施肥技术', '农艺技术']
    # 所以我们将期合并下,如[['生态预测'], ['品系侵染'], ['柴胡根腐病'], ['玉米播种', '施肥技术', '农艺技术']]
    # 变为[['生态预测'], ['品系侵染'], ['柴胡根腐病'], ['玉米播种 施肥技术 农艺技术']]
    for i in range(len(t2_keyphrases_list)):
        t2_keyphrases_list[i] = ' '.join([elem for elem in t2_keyphrases_list[i]])
    # print(t2_keyphrases_list)
    df['关键短语'] = t2_keyphrases_list
    df.to_csv('t2_add.csv',index=False)




    """
    f = codecs.open('../数据清洗/t1_test_test.txt', mode='r', encoding='utf-8')
    lines = f.readlines()
    # 第9列是项目成果简介,提取出来
    lines = lines[:160]
    text_list = []  # 项目成果简介
    key_list = []  # 关键词
    keyphrases_list = []  # 关键短语
    for line in lines:
        # print(line.strip().split("|")[8])
        text_list.append(line.strip().split("|")[8])
    print(text_list)

    # 关键词抽取
    for text in text_list:
        key_list.append(keywords_extraction(text))
        keyphrases_list.append(keyphrases_extraction(text))
        # keysentences_extraction(text) # 关键句抽取

    print(key_list)
    print(keyphrases_list)
    """

ok

 

标签:提取,no,--,text,关键词,list,words,keyphrases
From: https://www.cnblogs.com/hmy22466/p/18115568

相关文章

  • 2024年华为OD机试题-提取字符串中的最长数学表达式并计算
    提取字符串中的最长数学表达式并计算题目描述提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。如果没有,则返回0。简单数学表达式只能包含以下内容0-9数字,符号+-*说明1、所有数字,计算结果都不超过long2、如果有多个长度一样的,请返回第一个表达式......
  • 【小迪安全2023】第9天:信息打点-CDN绕过篇&漏洞回链&接口探针&全网扫描&反向邮件;第10
    ......
  • 课程设计项目2.3:孕妇心电图中胎儿心电信号的提取
    01.课程设计内容02.代码效果图1.LMS自适应滤波算法提取胎儿心电信号2.基于PCA/ICA的胎儿心电信号提取获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复:MATLAB课程设计本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~......
  • 百家号关键词排名提升秘籍,揭秘代发技巧,轻松上首页!
    百家号关键词排名提升秘籍,揭秘代发技巧,轻松上首页!5种方法告诉你轻轻松松做百度首页关键词排名,你看懂了吗?#百度首页关键词排名#百度推广#很多新手运营百家号,不知道我需要注意些什么?怎么样才能让您的账号更稳定呢?那么刷到这条视频您一定要看完。第一点,如果您的作品在别的......
  • Jmeter使用json提取器进行模糊提取的方法
    根据JsonPath的官方文档:GitHub-json-path/JsonPath:JavaJsonPathimplementation即下图:若需要对既有的json内容进行模糊匹配,需要使用以上多种方式,但是更建议使用正则匹配的方式。 $..results[?(@.name=~/.*CICD/i)].name表示对results中的name值为CICD结尾的内容进行......
  • Yang 提取Cifar-100的特征
    不同的点:特征选择需要4096维的特征,而我们的代码可能64维就可以了步骤:①保存模型②提取模型特征,然后应保存为mat备注:MetaSAug_1①保存模型importosimporttimeimportargparseimportrandomimportcopyimporttorchimporttorchvisionimportnumpyasnpimporttorc......
  • 基于“遥感+”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作
    原文链接:基于“遥感+”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247599633&idx=5&sn=1398cde523f9c5e036e4d478fc1d3388&chksm=fa8207f6cdf58ee0a3a2bf652e7ac5cf65636b05f9e3306fe795b1acff3924c96764......
  • 【华为OD机试C++】提取不重复的整数
    《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新!文章目录描述输入描述输出描述示例代码描述输入一个int型整数,按照从右向左的阅读顺序,返回......
  • Python 爬虫html内存 re.findall 正则提取span
    前言全局说明爬虫html内存re.findall正则提取一、百度首页热搜(和百度原网页代码有修改)需求:提取内容文字。<ulclass="s-hotsearch-content"id="hotsearch-content-wrapper"><liclass="hotsearch-itemodd"data-index="0"><spanclass=&q......
  • 小波特征提取算法代码
    functiontezhengtiqu%新归一化方法小波矩特征提取----------------------------------------------------------F=imread('a1.bmp');F=im2bw(F);F=imresize(F,[128128]);%求取最上点fori=1:128forj=1:128if(F(i,j)==1)ytop=i;......