自然语言处理(一)--关键词提取

最近学习使用了传统的自然语言处理技术进行关键词的提取,接下来我介绍一下两种常用的算法:TFIDF和TextRank。目前BiLSTM也可以用于提取文本关键词,有空再学。

1.TF-IDF

TF-IDF(term frequency-inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF-IDF是一种统计方法,用来评估一个字词对于一个文件集或语料库中的一份文件的重要程度。
首先解释一下TF-IDF的意思:
TF(term frequency):词语在一篇文章中出现的频率
IDF(inverse document frequency):反文档频率,与词语在其他文档中出现的频率负相关
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率高,即TF值高;并且在其他文章中很少出现,即IDF值高,那么认为这个词或短语具有很好的类别区分能力,适合作为该文章的关键词。
TF-IDF的具体计算公式为:

在这里插入图片描述
文档中词的tfidf值越高,便认为该词越可以代表该文档的主题。TF-IDF算法的python实现如下,同时jieba库中也实现了TF-IDF,有兴趣的话也可以去了解一下。

# TF-IDf算法python实现
import re
import math
# 获取一个文档中每个词的TF值,doc参数保存文档中的句子列表,返回单词与其tf值的字典
# 首先对文档中的单词进行切分,然后统计每个词的词频
def GetWordTF(doc):
    words_count = 0   # 单词总数
    words_map = {
   } # 单词与单词数的映射
    tf_map = {
   }  # tf值映射词典,格式: tf_map[word] = tf_word
    for sentence in doc:  # 遍历文档中的每个句子
        # 单词的切分方式可以根据所给的数据格式进行修改
        # 我将提取英文句子中的每个单词,使用正则表达式提取并去除空字符串
        words_arr = [word for word in re.split(r'\W+',sentence) if word]
        words_count += len(words_arr)   # 统计有效词的总长度
        for word in words_arr:   # 遍历每一个词并进行统计单词数
            words_map[word] = words_map.get(word,0) + 1
    for key,val in words_map.items():   # 计算每个单词的tf值
        tf_map[key] = val / words_count
    return tf_map

# 获取文档每个单词在文档集docSet中的IDF值映射
def GetWordIDF(tfMap,docSet):
    docs_num = len(docSet)   # 文档集中文档的总数
    word_doc_num = {
   }   # 包含word的文档数,格式为word_doc_num[word] = num of doc that contains word
    idf_map = {
   }  # idf值映射字典,格式idf_map[word] = idf_word
    
  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值