然后把html标签干掉,一堆正则就行了,剩下的基本上就是正文了,另外,技术站的东西还特殊处理了一下,把 中的内容干掉了,一堆代码对我来说没什么用。
最后,把标点符号干掉,把特殊符号干掉,调整一下格式,最后的每一篇文章都变成下面的样子
ID(实际上是url) [TAB]TITLE(标题) [TAB]CONTENT(文章详情)
一共有11628 篇文章,其中汽车类大约6000,技术类大约6000,好了,数据也基本上清洗好了。4. 训练数据
都觉得这一节才是重点,其实有jieba 分词和gensim 以后,代码非常简单,不超过50行,我们来一步一步玩。 4.1 分词--建立词典--准备数字语料
分词是基础,首先进行分词
from gensim import corpora,modelssimilaritiesutils import jieba jieba.posseg as pseg jieba.load_userdict( "user_dic.txt" ) #载入自定义的词典,主要有一些计算机词汇和汽车型号的词汇 #定义原始语料集合 train_set=[] f=open("./data/all.txt") lines=readlines() for line in lines: content = (linelower())split"t")[2] + 1] #切词,etl函数用于去掉无用的符号,cut_all表示最大切分 word_list = filter(lambda x: len)>0mapetlcutcontentcut_all=False))) appendword_listclose()
得到的tain_set就是原始语料 了,然后对这些语料导入到词典中,建立一个词典。#生成字典 dictionary = corporaDictionarytrain_set) #去除极低频的杂质词 dictionaryfilter_extremesno_below=no_abovekeep_nNone#将词典保存下来,方便后续使用 saveoutput + "all.dic")
将语料导入词典后,每个词实际上就已经被编号成1,2,3....这种编号了,这是向量化的第一步,然后把词典保存下来。然后生成数字语料corpus [doc2bowtext) text ]
这一句表示把每一条原始数据向量化成编号,这样以后,corpus这个变量是个二维数据,每一行表示一个文档的每个词的编号和词频,每一行像这样
[(1,2),(2,4),(5,2)....] 表示编号为1的词出现了2次,编号为2的词出现了4次....OK,前期准备OK了,原始文章通过切词 -->建立词典 -->生成语料 后已经被我们数字化了,后面就简单了。4.1 TFIDF模型
有了数字语料以后,我们可以生成一个TFIDF模型#使用数字语料生成TFIDF模型 tfidfModel modelsTfidfModelcorpus#存储tfidfModel tfidfModel"allTFIDF.mdl"这一句是关键,我们用了原始的数字语料,生成了一个TFIDF模型,这个模型能干什么呢?gensim 重载了[]操作符 ,我们可以用类似[(1,2)....] 的原始向量传进去,变成一个tfidf的向量,像这样模型数据(allTFIDF.mdl) ,生成了一份全部语料的TFIDF向量的索引数据(allTFIDF.idx) ,加上上面的词典数据(all.dic) ,我们现在有三份数据了,后面再说怎么用,现在先继续LDA部分。4.2 LDA模型
LDA上一篇讲了那么多,在gensim 看来就是下面几行代码,而且使用了传说中的机器学习 哦。只能说gensim的代码封装得太简洁了。#通过TFIDF向量生成LDA模型,id2word表示编号的对应词典,num_topics表示主题数,我们这里设定的50,主题太多时间受不了。 lda LdaModel id2worddictionarynum_topics50#把模型保存下来 lda"allLDA50Topic.mdl"#把所有TFIDF向量变成LDA的向量 corpus_lda lda#建立索引,把LDA数据保存下来 indexLDA corpus_ldaindexLDA"allLDA50Topic.idx"虽然只有这三步,但是还是挺耗时的,在log打开的情况下可以看到处理过程,我随便截取了几个,像下面一样,很明显,前面几个主题都和汽车相关,后面几个主题都和技术相关,看样子还算比较靠谱的。#38 (0.020): 0.003*新奇 + 0.003*骏 + 0.002*途安 + 0.002*配备 + 0.002*都市 + 0.001*除 + 0.001*昂科威 #27 (0.020): 0.003*配置 + 0.003*内饰 + 0.003*车型 + 0.002*气囊 + 0.002*瑞风 + 0.002*万元 + 0.002*逸致 #21 (0.020): 0.035*命令 + 0.018*浏览器 + 0.007*第三方 + 0.007*安装 + 0.006*控制台 #25 (0.020): 0.064*文件 + 0.004*约束 + 0.004*练习 + 0.003*复制到 + 0.003*就行了 + 0.003*反编译
好了,LDA部分也完了,又多了两个文件allLDA50Topic.mdl 和allLDA50Topic.idx ,加上前面的3个,一共5个文件了,OK,休息一下,喝杯可乐,继续下一步。5. 验证结果
好了,第四部分中不知不觉我们已经使用机器学习 这么高端的东西了,那现在要验证一下这么高端的东西到底效果如何了。前面的TFIDF和LDA我们都保存了模型和向量数据,那么我们就用两篇新的文章,来看看和这篇文章最相似的文章都有哪些来验证这两个模型靠谱不靠谱吧。我随便打开一个汽车网站,选了一篇汽车的文章(宝马的评测),再找了我之前的一篇技术的文章(讲搜索引擎的),并且只随机截取了文章的一段进行测试。看开头这应该是一篇为全新宝马X1 Li(下文简称新X1)洗地的文章,我想很多宝马死忠、车神也已经准备移步评论........一般情况下,搜索引擎默认会认为索引是不会有太大的变化的,所以把索引分为全量索引和增量索引两部分,全量索引一般是以天.......好,文章选好了,先载入之前保存的数据文件#载入字典 Dictionaryload#载入TFIDF模型和索引 TfidfModeloutput+MatrixSimilarity#载入LDA模型和索引 ldaModel LdaModel然后把测试数据进行切词 ,TFIDF向量化 ,找相似 ,LDA向量化 ,找相似 #query就是测试数据,先切词 query_bow (query)))) #使用TFIDF模型向量化 tfidfvect query_bow#然后LDA向量化,因为我们训练时的LDA是在TFIDF基础上做的,所以用itidfvect再向量化一次 ldavec ldaModeltfidfvect#TFIDF相似性 simstfidf indexTfidf#LDA相似性 simlda indexLDAldavec]
好了,结束,所有代码就这么些了。太简单了。。。。我们来看看效果。6 输出结果
我们先看TFIDF的结果
(编辑:广西网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|