2019-11-12 学习使用arxiv-sanity-preserver

参考学习资料:https://github.com/karpathy/arxiv-sanity-preserver#arxiv-sanity-preserver
这是一个论文检索引擎
先来一段介绍:

arxiv sanity preserver

This project is a web interface that attempts to tame the overwhelming flood of papers on Arxiv. It allows researchers to keep track of recent papers, search for papers, sort papers by similarity to any paper, see recent popular papers, to add papers to a personal library, and to get personalized recommendations of (new or old) Arxiv papers. This code is currently running live at www.arxiv-sanity.com/, where it's serving 25,000+ Arxiv papers from Machine Learning (cs.[CV|AI|CL|LG|NE]/stat.ML) over the last ~3 years. With this code base you could replicate the website to any of your favorite subsets of Arxiv by simply changing the categories infetch_papers.py.

以上介绍的大概意思就是说这个搜索引擎很智能,想关注什么领域的最新进展就把喜欢的主题词在infetch_papers.py做一下更改即可,这是机器学习的杰作等等。

几秒钟就能注册成功,跟你打字速度一样快,进入之后是这么个界面:


image.png

代码布局
代码有两大部分:

索引代码。使用 Arxiv API 下载任何你喜欢的类别的最新论文,然后下载所有论文,提取所有文本,根据每篇论文的内容创建 tfidf 向量。因此,此代码与后端抓取和计算有关:建立 arxiv 论文数据库、计算内容向量、创建缩略图、为人计算 SVM 等。

用户界面。然后是一个网络服务器(基于Flask/Tornado/sqlite),允许通过数据库搜索和过滤相似文件,等等。

Dependencies
Several: You will need numpy, feedparser (to process xml files), scikit learn (for tfidf vectorizer, training of SVM), flask (for serving the results), flask_limiter, and tornado (if you want to run the flask server in production). Also dateutil, and scipy. And sqlite3 for database (accounts, library support, etc.). Most of these are easy to get through pip, e.g.:

$ virtualenv env                # optional: use virtualenv
$ source env/bin/activate       # optional: use virtualenv
$ pip install -r requirements.txt

此外还可能需要 ImageMagickpdftotext, 可通过Ubuntu 系统指令 sudo apt-get install imagemagick poppler-utils完成,好多的依赖。

流程如下,最好是按顺序来:

  1. Run fetch_papers.py to query arxiv API and create a file db.p that contains all information for each paper. This script is where you would modify the query, indicating which parts of arxiv you'd like to use. Note that if you're trying to pull too many papers arxiv will start to rate limit you. You may have to run the script multiple times, and I recommend using the arg --start-index to restart where you left off when you were last interrupted by arxiv.
  2. Run download_pdfs.py, which iterates over all papers in parsed pickle and downloads the papers into folder pdf
  3. Run parse_pdf_to_text.py to export all text from pdfs to files in txt
  4. Run thumb_pdf.py to export thumbnails of all pdfs to thumb
  5. Run analyze.py to compute tfidf vectors for all documents based on bigrams. Saves a tfidf.p, tfidf_meta.p and sim_dict.p pickle files.
  6. Run buildsvm.py to train SVMs for all users (if any), exports a pickle user_sim.p
  7. Run make_cache.py for various preprocessing so that server starts faster (and make sure to run sqlite3 as.db < schema.sql if this is the very first time ever you're starting arxiv-sanity, which initializes an empty database).
  8. Start the mongodb daemon in the background. Mongodb can be installed by following the instructions here - https://docs.mongodb.com/tutorials/install-mongodb-on-ubuntu/.
  • Start the mongodb server with - sudo service mongod start.
  • Verify if the server is running in the background : The last line of /var/log/mongodb/mongod.log file must be - [initandlisten] waiting for connections on port <port>
  1. Run the flask server with serve.py. Visit localhost:5000 and enjoy sane viewing of papers!
    可选项: 你也可以运行twitter_daemon.py在screen session, 使用Twitter API credentials (stored in twitter.txt) Twitter periodically looking for mentions of papers in the database, 并且可以把搜索结果写入twitter.p.

作者说还有一个简单的shell脚本,通过逐个运行这些命令,他会每天运行这个脚本来获取新论文,将它们合并到数据库中,并重新计算所有tfidf矢量/分类器。有关此过程的更多详细信息,请参阅下文。
protip: numpy/BLAS: 脚本analyze.pynumpy执行大量繁重的工作。作者建议小心地设置你的numpy使用BLAS(例如OpenBLAS),否则计算将需要很长时间。该脚本拥有 25,000 篇论文和 5000 名用户,使用与 BLAS 链接的 numpy在他的计算机上运行了几个小时。

Running online

If you'd like to run the flask server online (e.g. AWS) run it as python serve.py --prod.
You also want to create a secret_key.txt file and fill it with random text (see top of serve.py).

Current workflow

作者说他这个运作现在还不是全自动的,那他怎么让代码活到现在呢,他通过一个脚本,在 arxiv 出来后(~midnight PST) 执行了以下更新:

python fetch_papers.py
python download_pdfs.py
python parse_pdf_to_text.py
python thumb_pdf.py
python analyze.py
python buildsvm.py
python make_cache.py

作者使用的 screen session,所以设置screen -S serve 参数 (或-rto reattach to it) 然后在运行:

python serve.py --prod --port 80

服务器将加载新文件并开始托管站点。请注意,在某些系统上,如果没有 sudo,您无法使用端口 80。两个选项是使用iptables重置路由端口,或者可以使用 setcap来授予运行serve.pypython解释器的权限。在这种情况下,我建议谨慎对待权限,也许可以尝试用虚拟机?(不是太明白这个设置,应该是怕资料泄露之类的)等等。

因为还没有系统的学习过python,暂时还不敢随意尝试。
ImageMagick
这里提到的依赖工具其中一个是个类似作弊器一样的东西(美图秀秀+全能扫描王?)http://www.imagemagick.org/script/index.php
也是个开源的免费软件目前版本是ImageMagick 7.0.9-2. 兼容 Linux, Windows, Mac Os X, iOS, Android OS, 及其他.
可参考ImageMagick使用实例来使用ImageMagick用 command-line 完成任务. 也可参见 Fred's ImageMagick Scripts: 里面包括执行几何变换、模糊、锐化、边缘、降噪和颜色操作的大量命令行脚本。也可以用参考Magick.NET,使用ImageMagick可不用安装客户端。

下载安装参考:http://www.imagemagick.org/script/download.php

另一个是个读PDF并转为文档的工具 pdftotext
在开源的XpdfReader代码上做了修饰的一个工具http://www.xpdfreader.com/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容