1 数据集信息来源
澳大利亚广播公司 ABC 发布的新闻头条数据
导入相关模块:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.feature_extraction import text
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from nltk.tokenize import RegexpTokenizer
from nltk.stem.snowball import SnowballStemmer
%matplotlib inline
读取数据集:数据集下载链接在文章底部
# 读取数据集
data = pd.read_csv("C:/Users/86135/AI/Lesson2/output_2021-08-26-14_37_47/abcnews-date-text(1).csv",error_bad_lines=False,usecols =["headline_text"])
data.head()
data = data.head(10000) # 获取部分数据快速运行,可以尝试修改使用的数据量查看后续的建模效果,不过注意使用的数据越多后续模型训练的时间越长
#print(data.info)# 打印数据信息
1.1 删除重复数据
通过pandas.DataFrame.duplicated可以查看重复的数据行。具体方法见:DataFrame.duplicated()
# 查看重复的数据行
data[data['headline_text'].duplicated(keep=False)].sort_values('headline_text').head(8)
通过pandas.DataFrame.drop_duplicates 可以查看重复的数据行。具体方法见:DataFrame.drop_duplicates()
# 删除重复行,
data = data.drop_duplicates('headline_text')
2 数据预处理
2.1 为向量化表示进行前处理
进行自然语言处理时,必须将单词转换为机器学习算法可以利用的向量。如果目标是对文本数据进行机器学习建模,例如电影评论或推文或其他任何内容,则需要将文本数据转换为数字。此过程称为“嵌入”或“向量化”。
进行向量化时,请务必记住,它不仅仅是将单个单词变成单个数字。单词可以转换为数字,整个文档就可以转换为向量。向量的维度往往不止一个,而且对于文本数据,向量通常是高维的。这是因为特征数据的每个维度将对应一个单词,而我们所处理的文档通常包含数千个单词。
2.2 TF-IDF
在信息检索中,tf–idf 或 TFIDF(term frequency–inverse document frequency)是一种数值统计,旨在反映单词对语料库中文档的重要性。在信息检索,文本挖掘和用户建模的搜索中,它通常用作加权因子。 tf-idf 值与单词在文档中出现的次数成正比,同时被单词在语料库中的出现频率所抵消,这有助于调整某些单词通常会更频繁出现的事实。 如今,tf-idf是最流行的术语加权方案之一。在数字图书馆领域,有83%的基于文本的推荐系统使用tf-idf。
搜索引擎经常使用tf–idf加权方案的变体作为在给定用户查询时对文档相关性进行评分和排名的主要工具。tf–idf可成功用于各种领域的停用词过滤,包括文本摘要和分类。
排名函数中最简单的是通过将每个查询词的tf–idf相加得出,许多更复杂的排名函数是此简单模型的变体。
当有TF(词频)和IDF(逆文档频率)后,将这两个词相乘,就能得到一个词的TF-IDF的值。某个词在文章中的TF-IDF越大,那么一般而言这个词在这篇文章的重要性会越高,所以通过计算文章中各个词的TF-IDF,由大到小排序,排在最前面的几个词,就是该文章的关键词
tf-idf算法步骤:
-
计算词频:
某个词在文章中出现的次数 = p,文章总词数 = n
标准化词频(tf) = p / n p / n p/