文本分析:新闻分类任务
停用词(符号,字符都有):1.语料中大量出现 2.没啥作用
Tf-idf:关键词提取
《中国的蜜蜂养殖》:进行词频(Term Frequency,缩写为TF)统计
出现次数最多的词是----“的” “是” “在”----这一类最常用的词(停用词)
“中国” “蜜蜂” “养殖”这三个词出现的频率一样多,重要性一样?
"中国"是很常见的词,相对而言,“蜜蜂”和“养殖”不那么常见
“逆文档频率” (Inverse Document Frequent,缩写为IDF)
如果这个词比较少见,但它在该文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们需要的关键词
词频(TF) = 某个词在文章中出现的次数 / 文章总的词数
逆文档频率(IDF) = log(语料库的文档总数 / 包含该词的文档数 + 1)
TF-IDF = 词频(TF) X 逆文档频率(IDF)
相似度
句子A:我喜欢看电视,不喜欢看电影。
句子B:我不喜欢看电视,也不喜欢看电影。
分词:
句子A:我/喜欢/看/电视,不/喜欢/看/电影。
句子B:我/不/喜欢/看/电视,也/不/喜欢/看/电影。
语料库:我,喜欢,看,电视,电影,不,也。
词频:
句子A:我1,喜欢2,看2,电视1,电影1,不1,也0
句子B:我1,喜欢2,看2,电视1,电影1,不2,也1
词频向量:
句子A:[1,2,2,1,1,1,0]
句子B:[1,2,2,1,1,2,1]
根据两个向量求出余弦值
下面是代码实例,使用结巴分词器进行分词
In[1]:import pandas as pd
import jieba
In[2]:df_news = pd.read_table('val.txt', names=['category', 'theme', 'URL', 'content'], encoding='utf-8')
df_news.dropna()
df_news.head()
# 使用结吧分词器分词
In[3]:content = df_news.content.values.tolist()
# 将数据转换为列表形式
print(content[1000])
In[4]:content_S = []
for line in content:
current_segment = jieba.lcut(line)
if len(current_segment) > 1 and current_segment != '\r\n':
content_S.append(current_segment)
# 每个分词器结果都是一个列表
In[5]:content_S[1000]
In[6]:df_content = pd.DataFrame({
'content_S':content_S})
df_content.head()
stopwords = pd.read_csv('stopwords.txt', index_col=False, sep='\t', quoting=3, names=['stopwords'], encoding='utf-8')
stopwords.head(