31.python机器学习-文本分析

  • 文本数据
  • 停用词
    • 语料中大量出现
    • 没啥大用
    • 留着过年嘛?

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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值