python数据分析与挖掘学习笔记_小说文本数据挖掘part2

Posted 小胖子小胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python数据分析与挖掘学习笔记_小说文本数据挖掘part2相关的知识,希望对你有一定的参考价值。

接上一节。 注:本文的所有路径都才用的是相对路径,读者请自行换成自己的绝对路径,保证文件可读取。

要进行文本挖掘,需要引入gensim这个工具包,需要用到其中的语料库,模型,相似度等包。

from gensim import corpora, models, similarities   # corpora语料库
import jieba
from collections import defaultdict
import urllib.request

1. 读取文档

上一节讲过两种读取文档的方法,第二种可以保证编码正确。

对于python3,如果有编码问题,首先在文件头加 # coding:utf-8

#d1=open(doc1).read()
#d2=open(doc2).read()
d1 = urllib.request.urlopen("http://127.0.0.1/gcd.html").read().decode("utf-8", "ignore")
d2 = urllib.request.urlopen("http://127.0.0.1/ljm.html").read().decode("utf-8", "ignore")

2. 对要计算的多篇文档进行分词

data1 = jieba.cut(d1)
data2 = jieba.cut(d2)


3. 对要计算的多本小说数据分别整理成指定格式,方便后续进行计算

data11 = ""
for item in data1:
    data11 += item+" "
data21 = ""
for item in data2:
    data21 += item+" "


4. 计算出词语的频率

documents = [data11, data21]
texts = [[word for word in document.split()]
       for document in documents]

frequency = defaultdict(int)
for text in texts:
    for token in text:
        frequency[token] += 1

5、(可选)过滤掉频率低的词语

texts=[[word for word in text if frequency[token]>3]
 for text in texts]

这句是过滤掉频率小于3的词语,可以根据实际情况该步骤可选


6. 通过语料库建立词典

dictionary = corpora.Dictionary(texts)
dictionary.save("./new_dict.txt")

也可以将该字典存储到本地


7. 读取用户当前关注的小说的数据

仍然是类似第一步读取文件数据,并分割文本,做相似处理

doc3 = "./d3.txt"
d3 = open(doc3).read()
data3 = jieba.cut(d3)
data31 = ""
for item in data3:
    data31 += item+" "

8. 将用户当前关注的小说的数据通过doc2bow转化为稀疏向量

new_doc = data31
new_vec = dictionary.doc2bow(new_doc.split())

9. 对稀疏向量进行进一步处理,得到新语料库

corpus = [dictionary.doc2bow(text) for text in texts]
corpora.MmCorpus.serialize("./d3.mm", corpus)

10. 将新语料库通过tfidf model进行处理,得到tfidf

tfidf = models.TfidfModel(corpus)

11. 通过token2id得到特征数

featureNum=len(dictionary.token2id.keys())

12. 稀疏矩阵相似度计算,从而建立索引

index=similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featureNum)

13. 分别得到用户当前关注的小说与小说库中各小说的相似度结果

sim=index[tfidf[new_vec]]

根据得出的相似度,就可以选择相似度高的作品,推荐给读者。


这里有一个概念的对比, 协同过滤和基于内容推荐的区别。

我也是今天才注意到这个问题。

这里有一个知乎的提问,大家可以阅读一下,体会一下区别。

https://www.zhihu.com/question/19971859





以上是关于python数据分析与挖掘学习笔记_小说文本数据挖掘part2的主要内容,如果未能解决你的问题,请参考以下文章

python数据分析与挖掘学习笔记-交通路标自动识别实战与神经网络算法

python数据分析与挖掘学习笔记-交通路标自动识别实战与神经网络算法

机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

基于R的文本挖掘及可视化--挖一挖音乐诗人李健

《数据挖掘:概念与技术》学习笔记1

机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)