Metadata-Version: 2.4
Name: grantscan
Version: 0.1.0
Summary: Screen a library of paper PDFs for the grant codes they cite.
Project-URL: Homepage, https://github.com/jacopoabramo/grantscan
Project-URL: User guide, https://github.com/jacopoabramo/grantscan/blob/main/docs/user-guide.md
Project-URL: Issues, https://github.com/jacopoabramo/grantscan/issues
Project-URL: Changelog, https://github.com/jacopoabramo/grantscan/releases
Author-email: Jacopo Abramo <jacopo.abramo@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: bibliometrics,funding,grants,pdf,research,search
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Win32 (MS Windows)
Classifier: Environment :: X11 Applications :: Qt
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Text Processing :: Indexing
Requires-Python: >=3.12
Requires-Dist: openpyxl>=3.1.5
Requires-Dist: psygnal>=0.15.1
Requires-Dist: pypdfium2>=5.12.1
Requires-Dist: pyside6-essentials>=6.11.1
Requires-Dist: qtpy>=2.4.3
Requires-Dist: rapidfuzz>=3.14.5
Description-Content-Type: text/markdown

# 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.

![grantscan](https://github.com/jacopoabramo/grantscan/raw/main/docs/images/03-results.png)

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][releases] and double-click
it. It needs no installation, no Python, and no network.

Or, with Python 3.12 or newer:

```bash
pip install grantscan
grantscan
```

## Using it

**[The user guide][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.

```bash
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](https://github.com/pypdfium2-team/pypdfium2)
over Google's PDFium, which is BSD-3-Clause, and draws its interface with Qt
through PySide6, which is LGPL-3.0.

[releases]: https://github.com/jacopoabramo/grantscan/releases/latest
[guide]: https://github.com/jacopoabramo/grantscan/blob/main/docs/user-guide.md
