几个月前,我下载了数千篇计算机科学论文的元数据,这样我就可以尝试编写一个迷你推荐引擎来告诉我接下来应该读什么论文。

由于我没有任何人可以阅读每篇论文的数据,因此排除了协作过滤方法,所以我认为我可以尝试基于内容的过滤。

让我们快速检查一下基于内容过滤的Wikipedia定义 :

在基于内容的推荐器系统中,关键字用于描述项目,并且用户配置文件用于指示该用户喜欢的项目类型。

换句话说,这些算法试图推荐与用户过去喜欢(或正在检查)的商品相似的商品。

我们将重点放在查找算法的相似项部分上,并根据它们的标题来计算项的相似度,从而从简单开始。 如果我们使用论文的全文或至少使用摘要,则可能会得到更好的结果,但是数据不那么可用。

我们将采用以下方法来计算任意两对论文之间的相似性:

for each paper:generate a TF/IDF vector of the terms in the paper's titlecalculate the cosine similarity of each paper's TF/IDF vector with every other paper's TF/IDF vector

使用Python scikit-learn库非常容易做到这一点,而我实际上已经完成了过程的第一部分,同时对电视节目《我如何与母亲见面》中的有趣短语进行了一些探索性分析 。

让我们开始吧。

每篇论文只有一个文件,其中包含论文的标题。 我们首先需要遍历该目录并构建一个包含论文的数组:

import globcorpus = []
for file in glob.glob("papers/*.txt"):with open(file, "r") as paper:corpus.append((file, paper.read()))

接下来,我们将为每篇论文构建一个TF / IDF矩阵:

from sklearn.feature_extraction.text import TfidfVectorizertf = TfidfVectorizer(analyzer='word', ngram_range=(1,3), min_df = 0, stop_words = 'english')
tfidf_matrix =  tf.fit_transform([content for file, content in corpus])

接下来,我们将编写一个函数,该函数将基于余弦相似度为我们找到前n个相似的论文:

from sklearn.metrics.pairwise import linear_kerneldef find_similar(tfidf_matrix, index, top_n = 5):cosine_similarities = linear_kernel(tfidf_matrix[index:index+1], tfidf_matrix).flatten()related_docs_indices = [i for i in cosine_similarities.argsort()[::-1] if i != index]return [(index, cosine_similarities[index]) for index in related_docs_indices][0:top_n]

让我们尝试一下:

>>> corpus[1619]
('papers/221215.txt', 'TOTEM: a reliable ordered delivery protocol for interconnected local-area networks')>>> for index, score in find_similar(tfidf_matrix, 1619):print score, corpus[index]0.917540397202 ('papers/852338.txt', 'A reliable ordered delivery protocol for interconnected local area networks')
0.248736845733 ('papers/800897.txt', 'Interconnection of broadband local area networks')
0.207309089025 ('papers/103726.txt', 'High-speed local area networks and their performance: a survey')
0.204166719869 ('papers/161736.txt', 'High-speed switch scheduling for local-area networks')
0.198514433132 ('papers/627363.txt', 'Algorithms for Distributed Query Processing in Broadcast Local Area Networks')

查找重复的论文非常好!

>>> corpus[1599]
('papers/217470.txt', 'A reliable multicast framework for light-weight sessions and application level framing')>>> for index, score in find_similar(tfidf_matrix, 1599):print score, corpus[index]1.0            ('papers/270863.txt', 'A reliable multicast framework for light-weight sessions and application level framing')
0.139643354066 ('papers/218325.txt', 'The KryptoKnight family of light-weight protocols for authentication and key distribution')
0.134763799612 ('papers/1251445.txt', 'ALMI: an application level multicast infrastructure')
0.117630311817 ('papers/125160.txt', 'Ordered and reliable multicast communication')
0.117630311817 ('papers/128741.txt', 'Ordered and reliable multicast communication')

但是有时它会标识不相同的重复项:

>>> corpus[5784]
('papers/RFC2616.txt', 'Hypertext Transfer Protocol -- HTTP/1.1')>>> for index, score in find_similar(tfidf_matrix, 5784):print score, corpus[index]1.0 ('papers/RFC1945.txt', 'Hypertext Transfer Protocol -- HTTP/1.0')
1.0 ('papers/RFC2068.txt', 'Hypertext Transfer Protocol -- HTTP/1.1')
0.232865694216 ('papers/131844.txt', 'XTP: the Xpress Transfer Protocol')
0.138876842331 ('papers/RFC1866.txt', 'Hypertext Markup Language - 2.0')
0.104775586915 ('papers/760249.txt', 'On the transfer of control between contexts')

话虽如此,如果您正在阅读并喜欢HTTP 1.0 RFC,那么HTTP 1.1 RFC可能不是一个不错的建议。

显然,也有一些论文被认为是相似的,而并非相似。 我创建了一个CSV文件 ,每张纸包含5张相似的纸,只要相似度大于0.5。 您也可以在github上看到生成该文件的脚本 。

到目前为止,我已经了解了很多,但接下来我将要探讨以下几件事:

  • 我们如何知道相似性建议是否有用? 我们如何衡量好? 使用术语计数向量比TF / IDF更好吗?
  • 基于摘要和/或标题的相似性

这篇文章中所有用于计算相似性并将其写入CSV的代码也位于github上,因此可以随意使用。

翻译自: https://www.javacodegeeks.com/2016/07/scitkit-learn-tfidf-cosine-similarity-computer-science-papers.html

scitkit-learn:计算机科学论文的TF / IDF和余弦相似度相关推荐

  1. 搜索引擎:文本分类——TF/IDF算法

    原理 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类.TFIDF实际上是:TF * IDF,TF ...

  2. 文本特征抽取的向量空间模型(VSM)和TF/IDF方法

    文本特征抽取 两组小说,一组是爱情的,另一组是科幻的.我们能否用支持向量机训练一个模型,用来识别小说类型呢? 这个并不容易.因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入.如果用它来做文 ...

  3. tf-idf词向量和bow_使用词袋Bow和TF IDF进行多标签分类

    tf-idf词向量和bow 1.加载数据 (1. Load the data) For this study, we are using Kaggle data for Toxic Comment C ...

  4. 如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?

    转自<知乎>如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?  问题:  作为一个博士生,一直为写论文头疼,读过很多高质量论文,觉得写的真好,但是轮到自己 ...

  5. 关键词提取算法—TF/IDF算法

    关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...

  6. tf/idf_Neo4j:带密码的TF / IDF(和变体)

    tf/idf 几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wik ...

  7. Neo4j:带密码的TF / IDF(和变体)

    几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wikipedia的 ...

  8. 数学计算机关系论文2000字,数学与计算机科学论文2000字_数学与计算机科学毕业论文模板...

    导读:如何撰写出满意的数学与计算机科学论文是现在很多人都为之苦恼的问题之一,而论文的撰写也并非易事,必定是需要花费很多心思和汗水的,本论文分类为计算机科学论文,下面是小编为大家整理的几篇数学与计算机科 ...

  9. 与计算机科学有关的论文,有关计算机科学论文范文2篇

    社会经济的发展带动科学技术的飞速发展,短短几十年已经在中国占据了重要的地位.在这样的背景之下,培养人才是新时代社会中重要的任务之一.下面是秋天网小编为大家整理的有关计算机科学论文,供大家参考. 有关计 ...

最新文章

  1. 代理 设置wsl_第一次使用WSL我做了什么
  2. 通过SQL Server操作MySQL的步骤和方法
  3. Angular运行在java_在本地运行现有Angular项目
  4. R-apply()函数
  5. 闭包允许内层函数引用父函数中的变量,但是该变量是最终值
  6. 95-136-041-源码-Operator-OneInputStreamOperator
  7. css删除li 圆点_CSS中li圆点样式
  8. 已root手机在DDMS下无法读取data目录的解决办法
  9. python 栈和队列_python实现栈和队列
  10. 28.ldconfig
  11. jquery手机模拟器
  12. php中的implode,php implode函数 多维数组
  13. vue 临时会话sessionStorage
  14. 网络:七层,HTTP应用层、TCP传输层、IP网络层,拔网线TCP还在,三次握手保证双向与减少因延时传输错误
  15. matlab 非a到z,matlab命令及函数A到Z
  16. Quartus | FPGA开发工具(Inter系列芯片)
  17. Referer的作用
  18. Linux内核由32位升到64,将Ubuntu从32位版本升级到64位版本
  19. 李开复成长中的10句格言:求知若饥 虚心若愚
  20. HR面试题(史上最全、持续更新、吐血推荐)

热门文章

  1. iframe 的使用理解
  2. VMware安装Ubuntu-18.04.3 Server版本
  3. 软考嵌入式系统设计师2011年上午试题总结
  4. 三维建模思路培养——复古风书房建模
  5. 使用弥散MRI构建连接体:Why,How和But
  6. 3个老鼠确定8个瓶子哪瓶有毒
  7. joystick遥杆(PS遥杆) 的使用方法
  8. IE浏览器不能上网而其他浏览器可以正常上网解决办法
  9. 电口、光口、网口区别
  10. 腾讯T3大牛亲自教你!2021年你与字节跳动只差这份笔记,分享PDF高清版