文本分析技术:关键词提取

在信息爆炸的时代,如何从海量数据中快速提取有价值的信息成为了一个重要课题。关键词提取技术,作为一种文本分析手段,能够帮助在极短的时间内洞察文本主题,提炼出关键词汇。这项技术不仅节省了阅读全文的时间,还能在新闻文章中发现感兴趣的话题,或根据客户评论识别问题所在。

TF-IDF算法简介

TF-IDF算法是关键词提取中常用的一种技术,它通过计算词频(Term Frequency)和逆文档频率(Inverse Document Frequency)来衡量一个词在文档中的重要性。词频指的是一个词在文本中出现的次数,而逆文档频率则衡量一个词在所有文档中出现的频率。TF-IDF的值是这两个值的乘积,从而得到每个词的重要性得分。

Python实现TF-IDF算法

接下来,将通过Python代码逐步实现TF-IDF算法。首先,需要导入必要的库,包括用于分词的nltk库、用于排序的itemgetter以及用于计算对数的math库。然后,声明一个字符串变量,用于存放示例文本文档。

from nltk import tokenize from operator import itemgetter import math import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize # 声明示例文本文档 doc = '是一名毕业生。想学习Python。喜欢学习Python。Python很简单。Python很有趣。学习能提高思维能力。每个人都应该投入时间学习。'

接下来,需要去除停用词,这些词在文本中频繁出现,但对于分析可能并不重要。可以使用nltk库来去除这些词。

stop_words = set(stopwords.words('english'))

然后,需要计算文档中的总词数,这将用于计算词频。同时,也需要计算文档中的总句子数,这将用于计算逆文档频率。

total_words = doc.split() total_word_length = len(total_words) print(total_word_length) total_sentences = tokenize.sent_tokenize(doc) total_sent_len = len(total_sentences) print(total_sent_len)

接下来,将计算每个非停用词的词频,并将其除以文档中的总词数。

tf_score = {} for each_word in total_words: each_word = each_word.replace('.','') if each_word not in stop_words: if each_word in tf_score: tf_score[each_word] += 1 else: tf_score[each_word] = 1 # 除以总词数 tf_score.update((x, y/int(total_word_length)) for x, y in tf_score.items()) print(tf_score)

为了计算逆文档频率,需要定义一个函数来检查一个词是否出现在句子列表中。

def check_sent(word, sentences): final = [all([w in x for w in word]) for x in sentences] sent_len = [sentences[i] for i in range(0, len(final)) if final[i]] return int(len(sent_len))

然后,将使用这个函数来计算每个非停用词的逆文档频率,并进行对数运算和除法。

idf_score = {} for each_word in total_words: each_word = each_word.replace('.','') if each_word not in stop_words: if each_word in idf_score: idf_score[each_word] = check_sent(each_word, total_sentences) else: idf_score[each_word] = 1 # 进行对数和除法运算 idf_score.update((x, math.log(int(total_sent_len)/ y)) for x, y in idf_score.items()) print(idf_score) tf_idf_score = {key: tf_score[key] * idf_score.get(key, 0) for key in tf_score.keys()} print(tf_idf_score) def get_top_n(dict_elem, n): result = dict(sorted(dict_elem.items(), key = itemgetter(1), reverse = True)[:n]) return result print(get_top_n(tf_idf_score, 5))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485