当前位置:   article > 正文

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
  • 1

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.
  • 1
  • 2
  • 3

In:

import nltk
nltk.download()
  • 1
  • 2

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/
  • 1
  • 2
  • 3
True
  • 1

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 
  • 1
  • 2
  • 3
  • 4

31.3.2 分词

In:

# pip install jieba
import jieba
contents = []
for cont in sogou['content']:
    contents.append(jieba.lcut(cont))  #list[list]
  • 1
  • 2
  • 3
  • 4
  • 5

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()])
  • 1
  • 2
  • 3
  • 4

In:

#列表转字符串
contents_list = [" ".join(wlist) for wlist in contents_new]
  • 1
  • 2

31.3.4 向量化

In:

from sklearn.feature_extraction.text import TfidfVectorizer #CountVectorizer 词频
tfidf = TfidfVectorizer()
  • 1
  • 2

In:

content_vec = tfidf.fit_transform(contents_list)
  • 1

In:

#拆分训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(content_vec,sogou['category'])
  • 1
  • 2
  • 3

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
  • 1
  • 2
  • 3
  • 4

out:

0.8208
  • 1
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号