使用文本挖掘实现站点个性化推荐
技能配景一条信息是否可以或许让用户感乐趣,首要取决于这条信息的内容是否是用户存眷的内容。而将用户感乐趣的信息推送给对应的用户,可以更好地施展该信息的代价,不然,不只对应信息的代价无法有用施展,乃至会引起用户的情感,由于假如用户对这条信息不感乐趣,那么这条信息对付该用户来说就相等于垃圾信息。 此刻要害的题目是,怎样判定呈现有的信息中,哪些信息是用户感乐趣的信息,从而把这些用户也许感乐趣的信息推送给用户,这样对付用户来说,可以获取祈望的内容,对付企业来说,这可以更好地获取贸易好处。 好比,我们在行使今天头条的时辰,你会发明推送过来的文章根基上都是我们感乐趣的文章,这些文章都是本性化保举过来的。着实,假如我们可以将这项技能更好的操作,这可以改改观多规模。 可以想象,假如小嗣魅站点回收本性化保举技能,那么当读者在读一本小说的时辰,我们可以判定该读者的乐趣,并从小说库中选择出读者也许最感乐趣的小说,并将筛选出来的小说保举给该读者,那么此时,对付读者和网站来说是双赢的,好比就读者而言,节减了小说筛选的本钱,而且可以很利便地得到本身感乐趣的内容,就网站而言,将吻合的内容保举给吻合的用户,更有利于用户的付费。除此之外,本性化保举技能还可以应用到消息站点、商城、视泼魅站点等等方面。? 文本发掘技能(Text Mining)简介文本发掘技能(Text Mining)是数据发掘技能中的一种,简朴来说,文本发掘技能就是对现有的一些文本信息举办说明、处理赏罚等,从而提取或计较出一些有代价的信息供我们行使的一种技能。 而在这篇文章中,我们首要用到文本发掘技能中的分词、文内情似度计较等技能,而文内情似度计较我们首要会回收TF-IDF算法,相干理论常识列位读者可以自行相识,本篇文章中首要会举办拭魅战的讲授。 将文本发掘技能应用于本性保举的思绪 那么,我们怎样将文本发掘技能应用于本性保举呢?? 好比,我们可以这样实现本性保举:? 焦点步调此刻我们已经明晰了本性化保举需求的实现思绪,接下来我们清算一下实现的焦点步调。 我们可以回收以下步调举办(以小嗣魅站点为例,其他站点相同):? 实现进程上面我们已经讲授了实践的焦点步调,接下来我们举办详细的实现,在此回收的开拓说话是Python,必要的第三方库有:jieba、gensim,必要提前行使pip安装好,如下: pip install jieba pip install genism 起首我们假设一下景象(为了担保前后同等,同样以小嗣魅站点为例,其他范例站点参考即可),若是此刻我们的处事器中有3本小说,别离是盗墓条记(处事器中文件名为dmbj.html)、老九门(处事器中文件名为ljm.html)、鬼吹灯(处事器中文件名为gcd.html),此刻读者正在看盗墓条记,必要我们从老九门与鬼吹灯中(插手小说库中小说更多,计较要领也是一样的)保举一内情似度高的小说给读者。 起首,我们必要读取站点中除读者当前正在阅读的这本小说之外的全部小说数据(虽然也可以把读者正在阅读的这本小说读取一下,只不外这样的话后头的功效必要去除相似度为1的小说数据),如下所示: import urllib.request #读取老九门这本小说 d1=urllib.request.urlopen("http://127.0.0.1/ljm.html").read().decode("utf-8","ignore") #读取鬼吹灯这本小说 d2=urllib"http://127.0.0.1/gcd.html")"ignore") 读取了小说数据之后,接下来我们必要对要计较的多本小说数据别离举办分词,在这里,我们会行使jieba库举办分词处理赏罚,如下所示: import jieba data1=jieba.cut(d1) data2=jieba.cut(d2) 分词之后,我们必要对要计较的多本小说数据别离清算成指命名目,利便后续举办计较,如下所示: data11="" for item in data1: data11+=item+" " data21=item in data2: data21+=" " docs=[data11,data21] 随后,我们必要计较出各词语的频数,如下所示: tall=[[w1 for w1 in doc.split()] for doc in docs] from collections import defaultdict frequency=defaultdict(int) text in tall: token in text: frequency[token]+=1 统计出频数之后,我们可以过滤掉频率低的词语,虽然这是在词语许多的环境下,假如原来就词语量有限,好比小说的内容很是少,那么此时我们就不必要过滤了。也就是说,是否必要过滤,首要取决于词语量的巨细,若词语量大,连过滤之后说明服从会更高,若词语量过小,显然不该该再过滤,不然过滤之后的词语就更少了。详细过滤的方法如下,因为这几本小说的词语量很大,以是频数在25以下的词语我们都过滤掉了: tall=[[token text if frequency[token]>25] text in tall] 举办了词语的过滤之后,我们必要通过语料库成立辞书,详细如下所示: dictionary=corpora.Dictionary(tall) 接下来,我们必要读取用户当前存眷的小说的数据,因为适才我们假设的景象中,用户正在读盗墓条记这本小说,以是此时我们必要加载盗墓条记这本小说的数据,详细如下所示: thisnoveldata=urllib"http://127.0.0.1/dmbj.html")"ignore") data3=jieba.cut(thisnoveldata) data31="" for item in data3: data31+=item+" " this_novel=data31 读取了用户当前存眷的小说数据之后,我们可以将用户当前存眷的小说的数据通过doc2bow转化为稀少向量,详细如下所示: new_vec=dictionary.doc2bow(this_novel.split()) 随后,我们可以对稀少向量举办进一步处理赏罚,获得新语料库,如下所示: corpus=[dictionary.doc2bow(text) 获得新语料库之后,我们可以将新语料库通过tfidfmodel举办处理赏罚,获得tfidf:tfidf=models.TfidfModel(corpus) |