gurusura / PaperMemory

Your browser's reference manager: automatic paper detection (Arxiv, OpenReview & more), publication venue matching and code repository discovery! Also enhances ArXiv: BibTex citation, Markdown link, direct download and more!

Home Page:https://chrome.google.com/webstore/detail/arxivtools/hmebhknlgddhfbbdhgplnillngljgmdi

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

My Paper Memory โšก


๐Ÿช Official stores
Chrome & Brave  โ€ข  Firefox



An automated, web-based and minimalist reference manager that also finds code repositories and published versions of preprints.

It is not meant to replace, rather complete more standard reference managers as Zotero etc.

This browser extension allows you to automatically store research papers you read, find a code repository and much more:

  1. ๐Ÿฌ Automatically record papers you open, without clicking anywhere. You can then search them, tag them, comment them and link a code repository.
  2. ๐Ÿ’ป Automatically find code repositories using PapersWithCode's API
  3. ๐Ÿค Match pre-prints to publications using 4 different databases
  4. ๐ŸŽฌ Change a pdf's webpage title to the article's title, because who cares about that saved bookmark 1812.10889.pdf when it could be InstaGAN Instance-aware Image-to-Image Translation.pdf
  5. ๐ŸŽซ BibTex citation, because citing papers should not be a hassle you can copy a BibTex citation to your clipboard or export the Memory itself as a .bib file
  6. ๐Ÿ”— Markdown link, [title](url) because it's the little things that make sharing a paper easier (to be used in issues, PRs, Readme, HackMD.io etc.)
  7. ๐Ÿ—‚ Direct download button with a nice name including the paper's title, so that you don't have to open the pdf's webpage and then download it from your browser.
  8. ๐Ÿ“„ Go back from a pdf to its abstract page. For instance: from https://arxiv.org/pdf/1703.06907.pdf to https://arxiv.org/abs/1703.06907 in a click.
  9. ๐Ÿ›๏ธ Export your data as a .json file or a .bib full BibTex export



Supported Venues  โ€ข  Demo  โ€ข  Keyboard Navigation  โ€ข  User Guide  โ€ข  Advanced features  โ€ข  Install from source  โ€ข  About preprints  โ€ข  Discovering code Repositories  โ€ข  FAQ


Supported venues

  • Arxiv (PaperMemory will try to find if a pre-print has been published and create a corresponding note to the paper (see preprints))
  • BioRxiv
  • NeurIPS
  • Open Review (ICLR etc.)
  • Computer Vision Foundation (I/ECCV, CVPR etc.)
  • Proceedings of Machine Learning Research (PMLR) (AISTATS, ICML, CoRL, CoLT, ALT, UAI etc.)
  • Association for Computational Linguistics (ACL) (EMNLP, ACL, CoNLL, NAACL etc.)
  • Proceedings of the National Academy of Sciences (PNAS)
  • SciRate
  • Nature (Nature, Nature Communications, Nature Machine Intelligence etc.)
  • American Chemical Society (ACS)
  • IOPscience
  • PubMed Central
  • International Joint Conferences on Artificial Intelligence (IJCAI)
  • Association for Computing Machinery (ACM)
  • IEEE
  • Springer (books, chapters and, of course, articles)
  • American Physical Society (APS)
  • Wiley (Advanced Materials, InfoMat etc.)
  • Science Direct
  • Science (Science, Science Immunology, Science Robotics etc.)
  • FrontiersIn (Frontiers in Neuroscience, Frontiers in Neuroscience, Frontiers in Microbiology etc.)
  • PLOS
  • Royal Society of Chemistry
  • Sci-Hub
  • Add more

About finding published papers from preprints

Privacy

All the data collected is stored locally on your computer and you can export it to json it from the options page.

Feature requests

I'm regularly adding feature ideas in the issues. Feel free to go upvote the ones you'd like to see happen or submit your own requests.

Duplicates

As of version 0.5.3, PaperMemory finds and merges duplicates based on their titles only. If you visit a paper which has the same title as an existing paper, it will not be added as a new paper, rather "attached" to the existing one. However, if the existing paper does not have a known publication venue and the new paper does, then they are switched to favour the one with a known publication venue.

Demo

Customize features in the menu:

Switch between Light and Dark mode


Share ideas ๐Ÿ’ก in issues and love with stars โญ๏ธ:)

Keyboard Navigation

  • Keyboard navigation:
    • Open the popup:
      • cmd/ctrl + shift + e
    • Open the Memory
      • a from the popup's home will open it
      • navigate to the bottom left button with tab and hit enter
    • Search
      • Search field is automatically focused on memory open
      • Navigate to the top input with tab or shift + tab
    • Navigate papers
      • tab will iterate through papers down the list
      • shift + tab will go back up the list
    • Edit a paper
      • Press e to edit the paper's metadata: tags, code and note when the paper is focused (from click or keyboard tab navigation)
        • Navigate through fields with (shift+) tab: tags and note if you're on a paper's page.
      • Press enter to open a focused paper (focus an existing tab with the paper or create a new tab to the paper's pdf if it's not open already)
      • backspace to delete a focused paper (a confirmation will be prompted first don't worry ๐Ÿ‘ฎโ€โ™€๏ธ)
    • Close Memory or Menu
      • esc closes the memory (or the menu -- not in Firefox)
  • Search
    • In a paper's authors, title and note.
      • Split queries on spaces: gan im will look for: all papers whose (title OR author) contain ("gan" AND "im")
    • In a paper's code link
      • Start the search query with c: to only search code links
    • Paper years
      • Start the search query with y: ${year}, optionally with , separating requested years or starting with > or < to filter paper published after/before a given year (stricly)
        • y: 20,21,22 will display papers published in 2020 OR 2021 OR 2022
        • y: <2015 will display papers published before (strictly) 2015
        • y: >19 will display papers published after (strictly) 2019
    • Paper tags
      • Start the search query with t: to filter by tags
      • t: gan will look for all papers whose tag-list contains at least 1 tag containing "gan"
      • t: gan tim will look for all papers whose tag-list contains (at least 1 tag containing "gan") AND (at least 1 tag containing "tim")
  • Export your memory as json file (in the extension's Menu)

Keyboard Shortcuts

By default, and if they are not already attributed, the following keyboard shortcuts are available:

  • cmd/ctrl + shift + e will open PaperMemory's popup
  • cmd/ctrl + shift + s will try to download the pdf of the current paper. If you have enabled this feature in the menu, the paper will be downloaded in your PaperMemoryStore (see thee advanced options page for more info)
  • cmd/ctrl + shift + l will trigger the manual parsing of a paper if you have disabled automatic paper detection in the menu

All those shortcuts can be changed/set from chrome://extensions/shortcuts or about:addons (Firefox).

Guides

Advanced

In the extension's options (right click on the icon or in the popup's menu) you will find advanced customization features:

  • Auto-tagging: add tags to papers based on regexs matched on authors and titles
  • Source filtering: filter out some paper sources you don't want to record papers from
  • Custom title function: provide Javascript code to generate your own web page titles and pdf filenames based on a paper's attributes
  • Data management: export/load your memory data and export the bibliography as a .bib file
  • Online Synchronization: use Github Gists to sync your papers across devices

Install from source (Brave & Chrome)

  • Download/clone the repo
  • Go to Chrome/Brave's extension manager
  • Enable developer mode
  • Click on "load unpackaged extension"
  • Select the downloaded folder :)

Preprints

There currently exists, to my knowledge, no centralized source for matching a preprint to its subsequent published article. This makes it really hard to try and implement best practices in terms of citing published papers rather than their preprint.

My approach with PaperMemory is to try and notify you that a publication likely exists by utilizing the note field. You will occasionally notice Accepted @ X in a Paper's notes. This will be added automatically if you are on a known published venue's website (as Nature, PMLR or NeurIPS) but also from:

  • PapersWithCode.com
    • A query is sent to their api from an Arxiv ID or a paper's plain text title if it's not an Arxiv paper
    • As PaperMemory retrieves code, it also looks for a proceeding field in PWC's response.
    • If it exists and is not null then it is expected to look like ${conf}-${year}-${month}.
    • In this case a note is added to the paper: Accepted @ ${conf} ${year} -- [paperswithcode.com]
  • dblp.org
    • A query is sent to their api for an exact paper title match
    • The oldest hit in the response which is not a preprint (hit.venue !== "CoRR") is used
    • If such a match is found, a note is added as: Accepted @ ${venue} ${year} -- [dblp.org]
  • SemanticScholar.org
    • A query is sent to their api for an exact paper title match
    • Up to 50 relevant papers are returned in response.data as an Array
    • In case of a match, the venue should not be "ArXiv"
    • If there's a match and its venue is not Arxiv then match.venue and match.year are used to create a note: Accepted @ {venue} ({year}) -- [semanticscholar.org]
  • CrossRef.org

There's room for improvement here^, please contact me (an issue will do) if you want to help

Discovering Code repositories

PaperMemory uses the PapersWithCode API in order to discover code repositories. If the paper being added to the Memory is from Arxiv, PaperMemory will use PWC's arxiv_id search field. Otherwise it will query per title. PaperMemory then expects exactly 1 result from the API. Any different count in the response will make PaperMemory consider there is no match.

If a match is found, the selected repo is the official (if it exists) one with the most stars (customizable in the Advanced Options).

Here's an example return value from PWC's API

"https://paperswithcode.com/api/v1/papers/?title=climategan"

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": "climategan-raising-climate-change-awareness",
      "arxiv_id": "2110.02871",
      "nips_id": null,
      "url_abs": "https://arxiv.org/abs/2110.02871v1",
      "url_pdf": "https://arxiv.org/pdf/2110.02871v1.pdf",
      "title": "ClimateGAN: Raising Climate Change Awareness by Generating Images of Floods",
      "abstract": "...",
      "authors": ["..."],
      "published": "2021-10-06",
      "conference": "climategan-raising-climate-change-awareness-1",
      "conference_url_abs": "https://openreview.net/forum?id=EZNOb_uNpJk",
      "conference_url_pdf": "https://openreview.net/pdf?id=EZNOb_uNpJk",
      "proceeding": "iclr-2022-4"
    }
  ]
}

"https://paperswithcode.com/api/v1/papers/climategan-raising-climate-change-awareness/repositories/"

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "url": "https://github.com/cc-ai/climategan",
      "owner": "cc-ai",
      "name": "climategan",
      "description": "Code and pre-trained model for the algorithm generating visualisations of 3 climate change related events: floods, wildfires and smog. ",
      "stars": 25,
      "framework": "pytorch",
      "is_official": true
    },
    {
      "url": "https://github.com/cc-ai/mila-simulated-floods",
      "owner": "cc-ai",
      "name": "mila-simulated-floods",
      "description": "",
      "stars": 7,
      "framework": "pytorch",
      "is_official": true
    }
  ]
}

Ad-Hoc PDFs

If you want to associate a pdf to a paper in your PaperMemoryStore that is not downloaded from PaperMemory (for instance, it is behind a paywall), you can download it to ~/Downloads/PaperMemoryStore/ (maybe you're reading the paper on Sci-Hub you thief ๐Ÿ™ƒ) provided the file's name contains the paper's title (not counting non-alphanumeric characters and case-insensitive).

Because of limitations Browser Extensions face, a file must be downloaded from the Browser to the folder in order to be detected. This means that if someone sends you a pdf over Slack or if you move a file to the PaperMemoryStore folder for instance, you won't be able to match it to a PaperMemory item.

FAQ

Why does PaperMemory require access to all urls?
Because Chrome & Brave will disable an extension by default when it auto-updates with new permissions. In this case, any new addition of a paper source will require new permissions to access the data necessary to parse the paper data and will therefore disable the extension until users re-enable it.
The button to go from an abstract to its pdf does not work
In general there can be 2 reasons:
  1. It's a bug, it can happen, I'm sorry about this: you should raise an issue, and ideally even provide a fix in a Pull Resquest
  2. More likely, the pdf is behind a paywall and the standard abstract -> pdf path was redirected by the venue's website
How do you match Arxiv.org pre-prints to actual publications?

It's all there: preprints ๐Ÿ˜ƒ

Contributions and ideas on how to improve the process and potentially add publication sources from titles or arxiv id are welcome!

Where does PaperMemory store my data?
It's all stored locally in your browser's local storage. If you want to transfer data to a new browser/computer, use the export/import tools in the extension's options.
How can I export all or some papers?

In the Advanced Options page, you can either export your full memory data to a .json or .bib bibliography, or only export papers with a given tag. More details in #89

How do I resolve duplicates?
  • If you installed PaperMemory <0.5.3 (May 2022) you may have duplicate papers in your Memory. The easiest way to resolve this is to go to a duplicate's page, then delete it from memory and refresh the page. The automatic de-duplication features in version 0.5.3 should handle the matching if the 2 papers have the same title.

  • If you still see duplicates with PaperMemory >=0.5.3 and the 2 papers have the same title, this may be a problem with PaperMemory and you should open an issue here on Github.
Can I access the memory full-screen?
Sure! In the extension popup's menu, there's a link at the bottom to the full-page memory. You can also just go to this url (Thanks @kaixin96!):
chrome-extension://ehchlpggdaffcncbeopdopnndhdjelbc/src/fullMemory/fullMemory.html
Can I exclude a paper source?
Yep. In the extension popup's advanced options page: right-click the extension's icon and click on `Options`. Or click on the link at the bottom of the popup menu. Or go to this url (Thanks @kaixin96!):
chrome-extension://ehchlpggdaffcncbeopdopnndhdjelbc/src/options/options.html
Are there data backups?

In case there's a bad bug or you mess up when overwriting your memory, PaperMemory preforms weekly backups (locally as always), which you can retrieve with a little coding:

  1. Open the extension's options (either right clicking its icon, or from the extension's menu, at the bottom)
  2. On the options page, open the Javascript Console with cmd/ctrl + alt + i or right click > Inspect
  3. Do the following in the Javascript Console:
    const backups = await getStorage("weeklyBackups")
    console.log(Object.keys(backups)) // this shows you available backup dates
    const overwrite = backups["<some key from above>"]
    console.log(overwrite) // inspect this and make sure it is what you want
    setStorage("papers", overwrite) // Careful! This will overwrite the current data with the backup data

Note that if you uninstall PaperMemory all your data will be gone and the only way to keep track of what was in your Memory is to export it first (in the advanced options page).

Todo

  • Improve Contributing.md
  • Write many more tests! Help is wanted (it's not so hard to write unittests ๐Ÿ˜„) (see Contributing.md)

Help

  • Firefox
    • Using Firefox? #9 ๐Ÿš

About

Your browser's reference manager: automatic paper detection (Arxiv, OpenReview & more), publication venue matching and code repository discovery! Also enhances ArXiv: BibTex citation, Markdown link, direct download and more!

https://chrome.google.com/webstore/detail/arxivtools/hmebhknlgddhfbbdhgplnillngljgmdi

License:MIT License


Languages

Language:JavaScript 72.5%Language:HTML 19.0%Language:CSS 7.9%Language:Python 0.6%