grantscan
Which of our papers acknowledged this grant?
Research groups have to answer that question repeatedly: for a funder's final
report, for a renewal, for an institutional review. The answer is buried in the
acknowledgment paragraph of every paper the group has published, and the codes
themselves are unmemorable strings like RTG 4200/1 or 900123456.
Answering it by hand means opening papers one at a time and reading the small print at the end of each. Answering it with a normal search is worse than it sounds, because a code that reads cleanly on the page rarely survives being extracted from a PDF: it breaks across a line, loses its spaces, or fuses to the word beside it. Searching for what you can see gets you a fraction of what is there.
grantscan reads a folder of papers once and then answers that question in milliseconds, for one code or for a whole reporting portfolio, showing you the sentence each answer rests on so you can judge it rather than trust it.
It also answers the question a spreadsheet cannot: which of the codes you asked about appear in no paper at all. For a report you have to sign, that is usually the line that matters.
Getting it
Download grantscan.exe from the latest release and double-click
it. It needs no installation, no Python, and no network.
Or, with Python 3.12 or newer:
pip install grantscan
grantscan
Using it
The user guide is written for the people who will use this rather than work on it. In short: add your folders, list the codes you care about, press Search.
Papers are read on your computer. Nothing is sent anywhere.
Working on it
DESIGN.md explains how it is put together and why, including what was
measured to decide it.
uv sync
uv run pytest
uv run ruff check .
uv run ruff format .
uv run mypy
uv run grantscan
Dependencies are managed with uv add, never by editing pyproject.toml.
| package | what it does |
|---|---|
core/ |
normalising, parsing a code, locating sections, matching. Pure functions. |
model/ |
the corpus, its text store, and the only module importing a PDF library |
presenter/ |
thread pool, search generations, exact-then-fuzzy staging |
export/ |
writing a run to a workbook |
view/ |
PySide6. The only package importing Qt. |
Licence
MIT. It reads PDFs with pypdfium2 over Google's PDFium, which is BSD-3-Clause, and draws its interface with Qt through PySide6, which is LGPL-3.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file grantscan-0.1.0.tar.gz.
File metadata
- Download URL: grantscan-0.1.0.tar.gz
- Upload date:
- Size: 28.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba49982087ed72c182524d377ae96b91a2702fe0f064ce985042e6e6a38b0e0c
|
|
| MD5 |
3d5e0b761ee9d84d710ed017723aeeba
|
|
| BLAKE2b-256 |
ed2ef9e671aec091aae3c6994f1634c5a6acb25a118cca219b2a333cae14cba9
|
Provenance
The following attestation bundles were made for grantscan-0.1.0.tar.gz:
Publisher:
ci.yaml on jacopoabramo/grantscan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
grantscan-0.1.0.tar.gz -
Subject digest:
ba49982087ed72c182524d377ae96b91a2702fe0f064ce985042e6e6a38b0e0c - Sigstore transparency entry: 2382569960
- Sigstore integration time:
-
Permalink:
jacopoabramo/grantscan@200877f64caca794370f8954b4f5d2136017cfc8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/jacopoabramo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yaml@200877f64caca794370f8954b4f5d2136017cfc8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file grantscan-0.1.0-py3-none-any.whl.
File metadata
- Download URL: grantscan-0.1.0-py3-none-any.whl
- Upload date:
- Size: 36.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70cfe6db8c979cdccfeefc0db5d75a0999f635a5e15f7092efd125f90c79663a
|
|
| MD5 |
8934fdeadfb6d91e1ec382bef6ba3f58
|
|
| BLAKE2b-256 |
ad5c5d2029a3845f47133d3e788c69b3b4ba51fe3e1dde992ef3b30c230dec3a
|
Provenance
The following attestation bundles were made for grantscan-0.1.0-py3-none-any.whl:
Publisher:
ci.yaml on jacopoabramo/grantscan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
grantscan-0.1.0-py3-none-any.whl -
Subject digest:
70cfe6db8c979cdccfeefc0db5d75a0999f635a5e15f7092efd125f90c79663a - Sigstore transparency entry: 2382570003
- Sigstore integration time:
-
Permalink:
jacopoabramo/grantscan@200877f64caca794370f8954b4f5d2136017cfc8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/jacopoabramo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yaml@200877f64caca794370f8954b4f5d2136017cfc8 -
Trigger Event:
push
-
Statement type: