话要紧!Python中关键字提取的简单指南
非结构化数据包含大量信息。就像利用能源一样,它将为其利益相关者创造高价值。多家公司已经在这一领域进行了大量工作。毫无疑问,非结构化数据是嘈杂的,必须进行大量工作以清理,分析数据并使它们有意义地使用。本文讨论了一个领域,该领域通过总结内容并确定感兴趣的主题来帮助分析大量数据–关键字提取
关键字提取概述
这是一种文本分析技术。我们可以在短时间内获得对该主题的重要见解。它有助于简化文本并获得相关的关键字。这样可以节省浏览整个文档的时间。示例用例是从新闻文章中找到感兴趣的主题,并根据客户评论等确定问题。关键字提取所使用的一种技术是TF-IDF(术语频率-反向文档频率)
TF – IDF概述
术语频率–术语在文本中出现的频率。度量为术语t在文本中出现的次数/文档中单词的总数
反向文档频率–单词在文档中的重要性。以对数来衡量(句子总数/术语t的句子数)
TF-IDF –单词的重要性由该分数来衡量。度量为TF * IDF
我们将使用相同的概念,并尝试使用Python逐行对其进行编码。我们将使用较少的文本文档集,并执行上述所有步骤。尽管市场上已经有了一些用于关键字提取的高级概念,但本文旨在了解识别单词重要性的基本概念。让我们开始吧!
实作
1.进口包装
我们需要标记化以创建单词标记,itemgetter可以对字典进行排序,数学需要执行对数运算
从nltk导入标记化
从操作员导入itemgetter
导入数学
2.声明变量
我们将声明一个字符串变量。它将是示例文本文档的占位符
doc ='我毕业了。我想学习Python。我喜欢学习Python。Python很简单。Python很有趣。学习增加思考。每个人都应该花时间在学习上
3.删除停用词
停用词是经常出现的词,可能对我们的分析没有意义。我们可以删除使用nltk库
从nltk.corpus导入nltk从nltk.tokenize导入停用
词import word_tokenize
stop_words = set(stopwords.words('english'))
4.查找文档中的总单词
在计算词频时需要
total_words = doc.split()
total_word_length = len(total_words)
print(total_word_length)
5.查找句子总数
在计算反向文档频率时,这是必需的
total_sentences = tokenize.sent_tokenize(doc)
total_sent_len = len(total_sentences)
print(total_sent_len)
6.计算每个单词的TF
我们将首先计算每个不停词的词数,最后将每个元素除以步骤4的结果
tf_score = {}
,代表total_words中的each_word:
each_word = each_word.replace('。',''),
如果each_word不在stop_words中:
如果tif_score中的each_word:
tf_score [each_word] + = 1,
否则:
tf_score [each_word] = 1
#除法通过total_word_length为每个字典元素
tf_score.update((x,y / int(total_word_length))对于tf_score.items()中的x,y)
print(tf_score)
7.检查单词列表中是否存在该单词的功能
计算IDF时需要此方法
def check_sent(单词,句子):
final = [all([w in x表示单词中的w]])表示在句子中的x]
send_len = [如果最终的,则在范围(0,len(final))中,i的句子[i] i]]
返回int(len(sent_len))
8.计算每个单词的IDF
我们将在第7步中使用该函数来迭代不间断字并将结果存储为“反向文档频率”
idf_score = {}
for total_words中的each_word:
each_word = each_word.replace('。',''),
如果each_word不在stop_words中:
如果id_score中的each_word:
idf_score [each_word] = check_sent(each_word,total_sentences)
否则:
idf_score [each_word] = 1
#执行一个日志并将
idf_score.update((x,math.log(int(total_sent_len)/ y))划分为idf_score.items()中的x,y)
print(idf_score)
9.计算TF * IDF
由于两个字典的键都相同,因此我们可以迭代一个字典来获取键并将两个值相乘
tf_idf_score = {key:tf_score [key] * idf_score.get(key,0)for key in tf_score.keys()}
print(tf_idf_score)
10.创建一个函数以在文档中获取N个重要单词
def get_top_n(dict_elem,n):
结果= dict(sorted(dict_elem.items(),键= itemgetter(1),反向= True)[:n])
返回结果
11.获得最重要的5个词
打印(get_top_n(tf_idf_score,5))
结论
因此,这是您可以在Python中构建自己的关键字提取器的方法之一!可以以一种简单的方式来概括上述步骤,如文档->删除停用词->查找术语频率(TF)->查找反向文档频率(IDF)->查找TF * IDF->获取前N个关键字。如果本文有趣或有任何帮助,请分享您的想法。始终欢迎改进和建议。您可以在GitHub上找到代码
题库