跳转到主要内容

搜索科学论文

项目描述

Paperoni

  • 搜索 命令行中的科学论文
  • 下载PDF文件
  • 生成BibTeX条目
  • 生成用于您出版物的HTML!
  • 构建论文集合

Screenshot

Paperoni使用Microsoft Academic Knowledge API,需要API密钥

获取Microsoft Academic Knowledge API密钥(免费层:每月10,000次查询)

安装

pip install paperoni

# This will prompt for the API key
paperoni config

概述

这是Paperoni的一些示例,您可以做一些事情。以下显示的大多数标志可以组合使用。

# Search for papers from an author
paperoni search -a alan turing

# Search for papers with a certain title
paperoni search -t the chemical basis of morphogenesis

# Search for the most cited AI papers of 2017
paperoni search -k artificial intelligence -y 2017 --cited

# Collect papers into a file
paperoni collect -c my-papers.json -a olivier breuleux -y 2018

# Dump BibTeX for all papers in a collection
paperoni bibtex -c my-papers.json >> papers.bib

# Output a webpage
paperoni html -c my-papers.json

# Collect info about a researcher into a file (interactive)
paperoni researcher -r researchers.json -a olivier breuleux

# Search for papers from researchers with status "phd"
paperoni search -r researchers.json --status phd

搜索

paperoni search命令允许您搜索论文

$ paperoni search -h
usage: paperoni search [-h] [--author [VALUE [VALUE ...]]] [--cited]
                       [--collection VALUE] [--command VALUE] [--end VALUE]
                       [--group] [--institution [VALUE [VALUE ...]]]
                       [--key VALUE] [--keywords [VALUE [VALUE ...]]]
                       [--limit NUM] [--offset NUM] [--recent]
                       [--researchers VALUE] [--start VALUE]
                       [--status [VALUE [VALUE ...]]] [--symposium]
                       [--no-symposium] [--title [VALUE [VALUE ...]]]
                       [--venue VALUE] [--verbose]
                       [--words [VALUE [VALUE ...]]] [--workshop]
                       [--no-workshop] [--year NUM]

optional arguments:
  -h, --help            show this help message and exit
  --collection VALUE, -c VALUE
                        File containing the collection
  --command VALUE       Command to run on every paper
  --group               Group multiple versions of the same paper
  --key VALUE           Microsoft Cognitive API key
  --researchers VALUE, -r VALUE
                        Researchers file (JSON)
  --verbose, -v         Verbose output

search:
  --author [VALUE [VALUE ...]], -a [VALUE [VALUE ...]]
                        Search for an author
  --cited               Sort by most cited
  --end VALUE           End date (yyyy-mm-dd or yyyy)
  --institution [VALUE [VALUE ...]], -i [VALUE [VALUE ...]]
                        Search papers from institution
  --keywords [VALUE [VALUE ...]], -k [VALUE [VALUE ...]]
                        Search for keywords
  --limit NUM           Number of papers to fetch (default: 100)
  --offset NUM          Search offset
  --recent              Sort by most recent
  --start VALUE         Start date (yyyy-mm-dd or yyyy)
  --status [VALUE [VALUE ...]]
                        Researcher status(es) to filter for
  --symposium           List symposiums
  --no-symposium        Do not list symposiums
  --title [VALUE [VALUE ...]], -t [VALUE [VALUE ...]]
                        Search words in the title
  --venue VALUE         Search papers from a specific conference or journal
  --words [VALUE [VALUE ...]], -w [VALUE [VALUE ...]]
                        Search words in the title or abstract
  --workshop            List workshops
  --no-workshop         Do not list workshops
  --year NUM, -y NUM    Year

界面将交互式地列出每个结果,允许您执行操作

  • l以显示论文的更多信息:摘要、所属机构、所有链接
  • b以打印论文的BibTeX条目(另见paperoni bibtex
  • p以将PDF保存到当前目录,如果可用的PDF(且不需要身份验证或验证码)

生成BibTeX

使用paperoni bibtex,您可以从搜索或集合中生成BibTeX条目。每个条目将有一个从第一位作者、年份、标题中最长的单词和一个小哈希数生成的引用名称。

生成HTML

使用paperoni html,您可以从搜索或集合中生成HTML。

  • 使用--template my-template.html使用指定的文件作为模板。出版物将被插入到id为paperoni-papers的元素中,例如<div id="paperoni-papers">PAPERS GO HERE</div>。您也可以使用以下语法指定不同的id:--template my-template.html#mypapers
  • 使用--template none如果您根本不想使用模板,只想获得原始HTML。
  • 使用--inject file.html将论文直接插入到id为paperoni-papers的元素中file.html这将修改文件。 该div中之前的任何内容都将被删除。出于安全考虑,paperoni将创建一个带有.bk扩展名的备份文件,除非您传递--no-backup

paperoni html包括完整的搜索界面。如果您想在网络上直接搜索,不需要传递集合。

如果您有一个研究人员文件,可以使用-r传递它,paperoni可以为集合中的任何研究人员生成生物链接。

您可以使用paperoni html -h查看所有选项。

集合

可以使用以下方式将论文保存到集合中:

# Assuming you want your collection to be in my-collection.json
paperoni collect -c my-collection.json

选项与search相同,但您可以通过搜索结果进行排序,将论文添加到集合或拒绝它们。已添加或拒绝的论文将被忽略,因此可以通过重复使用相同的搜索字符串并遍历任何新论文来增量构建集合。

paperoni search -c my-collection.json将在集合中搜索论文。由于这是一个纯本地搜索,搜索算法可能略有不同。

研究人员数据库

对于更高级的使用,您可以创建一个包含一个或多个人的研究人员文件。

paperoni researcher的目的是正确识别作者,比仅按名称搜索更好,因为个人可能有多个同音字。还可以将多个作者分组,以便您可以搜索他们的所有论文,这对于收集您组织的所有出版物很有用:只需注册您的研究人员即可。您甚至可以记录他们的起始/结束日期,这将仅收集该时间段内的出版物。

paperoni researcher -r researchers.json -a author name将引导您进行交互式操作。

  1. 查找ids:您将被要求确定某些论文是否来自该作者,以剔除同音字。
  2. 设置属性:您可以设置研究人员的任意属性。请注意,paperoni html识别bio属性。输入null可以删除属性。
  3. 添加角色:您可以可选地分配一个或多个“角色”。一个“角色”是一些任意的标记,可以带有可选的起始和结束日期,可以分配给研究人员。

然后您可以编写例如paperoni collect -c org.json -r researchers.json --status xyz来收集研究人员在其给定状态时的论文。标志-r也与paperoni search兼容。

常见问题解答

我找不到一篇论文。

Paperoni使用Microsoft Academic来查找论文。首先检查您是否可以在那里找到论文。如果它确实在那里,这是Paperoni的一个错误,您应该报告问题。

如果它不在那里,最可能的原因是论文太新,还没有被索引。有时需要几周时间才能索引论文。

PDF下载不起作用。

尝试使用l命令,该命令将列出与论文相关的所有链接,并按类型组织。尝试在浏览器中打开它们,可能效果会更好。

我可以手动将新论文添加到集合中吗?

假设您指的是数据库中未索引的论文,不幸的是,答案是肯定的。

我可以从集合中删除论文吗?

是的,搜索要删除的论文(s),使用-c参数传递集合,并使用r交互式命令将其删除。

$ paperoni search -c collection.json -t the paper title
================================================================================
Title: The paper title
Authors: Some Guy
Date: 2020-02-02
================================================================================
Enter a command (h or ? for help): b/p/[s]/r/q/l/h r
Removed 'The paper title' from the collection.

您可以使用--command r非交互式地完成此操作。

程序化API

API非常处于beta阶段且不稳定。它可能会任意更改。

如果您想执行一些自定义操作,如生成您想要的HTML,编写除BibTeX之外的参考格式,或任何其他操作,这里有一些代码可以帮助您开始。以下代码将搜索Alan Turing的论文,并打印出标题和摘要

import coleo

# You need these to wrap collection or researchers, if you want to provide
# them outside of the command line.
from paperoni.io import PapersFile, ResearchersFile

# There is also search(), the difference is that search() does not define
# CLI arguments for collection and researchers but takes them as inputs
# instead
from paperoni.commands.searchutils import search_ext

def main():
    papers = search_ext()
    for paper in papers:
        print(paper.title)
        print(paper.abstract)
        print("====")

if __name__ == "__main__":
    with coleo.setvars(
        author="alan turing",
        # collection=PapersFile("alan.json"),
        # researchers=ResearchersFile("rsch.json"),
    ):
        coleo.auto_cli(main, print_result=False)
  • coleo.auto_cli会暴露所有在search_ext内部定义的搜索标志,如--title等,因此您可以免费获得所有这些。
  • coleo.setvars允许您以编程方式设置任何选项,但对于一些选项,如collectionresearchers,您需要自己包装(请参阅注释行)。
  • Paper对象的API有些糟糕并且不稳定,所以我目前不会对其进行文档说明,但如果你导出paper.data,你可以看到所有原始数据并从那里开始工作。

如果您想在main()中定义额外的命令行参数,请查看coleo,它相当简单。

未来版本的paperoni可能会破坏API,因此请确保锁定您正在使用的版本。

插件

API非常处于beta阶段且不稳定。它可能会任意更改。

您可以通过在paperoni.command入口点注册新命令来向paperoni添加新命令。命令行选项必须使用coleo定义。如果您正在使用poetry

pyproject.toml

[tool.poetry.plugins."paperoni.command"]
showprop = "my_paperoni:showprop"

my_paperoni/__init__.py

from coleo import Option, default, tooled
from paperoni.commands.searchutils import search


@tooled
def showprop():

    # Name of the property to display
    # [alias: -p]
    prop: Option & str = default("title")

    # This will add all the search options
    papers = search()

    for paper in papers:
        if prop == "title":
            print(paper.title)
        elif prop == "venue":
            print(paper.venue)
        ...

安装插件

# If the plugin is accessible through pip
pip install my_paperoni

# If this is a local project:
poetry install

使用插件

paperoni showprop -p venue -a alan turing --limit 10

未来版本的paperoni可能会破坏API,因此请确保锁定您正在使用的版本。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

paperoni-0.1.8.tar.gz (27.2 kB 查看哈希值)

上传时间:

构建分布

paperoni-0.1.8-py3-none-any.whl (27.5 kB 查看哈希值)

上传时间: Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面