-
文本数据
- 停用词
- 语料中大量出现
- 没啥大用
-
留着过年嘛?
31.1 Tf-idf:关键词提取
- 《中国的蜜蜂养殖》: 进行词频(Term Frequency,缩写为TF)统计
- 出现次数最多的词是----“的” 、 “是” 、 “在”----这一类最常用的词(停用词)
- “中国” 、 “蜜蜂” 、 “养殖”这三个词的出现次数一样多,重要性是一样的?
- "中国"是很常见的词,相对而言,"蜜蜂"和"养殖"不那么常见
- "逆文档频率"(Inverse Document Frequency,缩写为IDF)
-
如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性正是我们所需要的关键词
-
- 《中国的蜜蜂养殖》:假定该文长度为1000个词,“中国” 、 “蜜蜂” 、 “养殖”各出现20次,则这三个词的"词频"(TF)都为0.02
- 搜索Google发现,包含"的"字的网页共有250亿张,假定这就是中文网页总数。
-
包含"中国"的网页共有62.3亿张,包含"蜜蜂"的网页为0.484亿张,包含"养殖"的网页为0.973亿张
-
31.2 相似度
- 相似度
- 句子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]
31.3 文本分析挖掘实验
In:
pip install nltk
out:
Requirement already satisfied: nltk in d:\programdata\anaconda3\lib\site-packages (3.4.5)
Requirement already satisfied: six in d:\programdata\anaconda3\lib\site-packages (from nltk) (1.12.0)
Note: you may need to restart the kernel to use updated packages.
In:
import nltk
nltk.download()
out:
showing info https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml
showing info https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml
showing info http://nltk.org/nltk_data/
True
31.3.1 数据加载
In:
sogou = pd.read_table("../data/sogou.txt",header=None,
names=['category','title','url','content'])
stopwords = pd.read_table("../data/stopwords.txt",header=None,
names=['stopword'],quoting=3) #3表示QUOTE_NONE
31.3.2 分词
In:
# pip install jieba
import jieba
contents = []
for cont in sogou['content']:
contents.append(jieba.lcut(cont)) #list[list]
31.3.3 去除停用词
In:
contents_new = []
for cont in contents:
contents_new.append([word for word in cont
if word not in stopwords['stopword'].tolist()])
In:
#列表转字符串
contents_list = [" ".join(wlist) for wlist in contents_new]
31.3.4 向量化
In:
from sklearn.feature_extraction.text import TfidfVectorizer #CountVectorizer 词频
tfidf = TfidfVectorizer()
In:
content_vec = tfidf.fit_transform(contents_list)
In:
#拆分训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(content_vec,sogou['category'])
31.3.5 建模
In:
from sklearn.linear_model import LogisticRegression
logic = LogisticRegression()
logic.fit(x_train,y_train)
logic.score(x_test,y_test) #0.8208
out:
0.8208