rougers
ROUGE metrics in Rust, with scores identical to Google's
rouge-score, about 30 times faster on one core
and over 100 times faster on all of them.
rouge-score is the reference implementation behind Hugging Face evaluate, most
summarization papers and many LLM evaluation pipelines. It is written in pure Python
and becomes the bottleneck once you score tens of thousands of outputs. rougers
reproduces it exactly, down to the last bit of every float, including the tokenizer,
NLTK's Porter stemmer and the summary-level rougeLsum.
The Rust crate is rougers; the Python package built on it is rouge-score-rs. This is an
independent project, not affiliated with Google or the authors of rouge-score.
Python
pip install rouge-score-rs
Change the import and keep the rest of your code:
from rouge_score_rs import rouge_scorer # was: from rouge_score import rouge_scorer
scorer = rouge_scorer.RougeScorer(["rouge1", "rouge2", "rougeL", "rougeLsum"], use_stemmer=True)
scores = scorer.score(
"The quick brown fox jumps over the lazy dog",
"The quick brown dog jumps on the log.",
)
scores["rouge1"]
# Score(precision=0.75, recall=0.6666666666666666, fmeasure=0.7058823529411765)
score_multi, custom tokenizers, split_summaries, scoring.BootstrapAggregator and
tokenize.tokenize work the same way as in rouge-score, and scorers can be pickled
for use in worker processes.
To score many pairs, use score_batch. It runs on all CPU cores and releases the GIL:
results = scorer.score_batch(references, predictions) # list of dicts, one per pair
Set RAYON_NUM_THREADS to limit the number of threads.
Rust
[dependencies]
rougers = "0.1"
use rougers::{RougeScorer, RougeType};
let scorer = RougeScorer::new(["rouge1", "rougeL"], true)?;
let scores = scorer.score(
"The quick brown fox jumps over the lazy dog",
"The quick brown dog jumps on the log.",
);
let rouge_l = scores.get(RougeType::L).unwrap();
println!("{:.4}", rouge_l.fmeasure);
RougeScorer is Send + Sync, so it can be shared across threads, for example with
Rayon.
Performance
10,000 pairs of English text from the NLTK Gutenberg corpus, about 60 words each,
with rouge1, rouge2, rougeL, rougeLsum and stemming. Measured on an Apple M1 Pro
with Python 3.12:
| seconds | pairs per second | speedup | |
|---|---|---|---|
rouge-score 0.1.2 |
16.95 | 590 | 1× |
rouge-score-rs score() |
0.59 | 17,078 | 29× |
rouge-score-rs score_batch(), 8 threads |
0.12 | 83,957 | 142× |
The script asserts that all three produce the same scores. To reproduce:
cd bindings/python
python benchmarks/compare.py --pairs 10000
Compatibility
The test suite compares rouge-score-rs with rouge-score and fails on any difference
in any float:
- the stemmer against NLTK on all 235,976 words of a system dictionary (NLTK 3.8–3.10 stem them identically);
- tokenization against Python's
str.lowerfor every Unicode code point; - thousands of random texts with repeated words, punctuation, digits, newlines and non-Latin scripts, plus property-based tests on arbitrary Unicode;
score_multi, custom tokenizers,split_summariesand bootstrap aggregation with a fixed NumPy seed.
Known differences:
- An invalid ROUGE type raises
ValueErrorwhen the scorer is created, not on the first call toscore. Type names must be exactlyrouge1…rouge9,rougeLorrougeLsum. - Texts must be
str;rouge-scorealso accepts UTF-8bytes. BootstrapAggregatorneeds NumPy (pip install 'rouge-score-rs[aggregate]') andsplit_summaries=Trueneeds NLTK (pip install 'rouge-score-rs[sentences]'). Without them,rouge-score-rshas no Python dependencies.
Development
cargo test -p rougers
cd bindings/python
uv sync --group dev
uv run pytest
License
Apache-2.0, the same licence as rouge-score and NLTK, whose scoring, tokenization and
stemming logic this project ports. See NOTICE.
Metadata
Release files for rouge-score-rs 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rouge_score_rs-0.1.0.tar.gz | 109.4 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| rouge_score_rs-0.1.0-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| rouge_score_rs-0.1.0-cp39-abi3-musllinux_1_2_x86_64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ x86-64 | Details |
| rouge_score_rs-0.1.0-cp39-abi3-musllinux_1_2_aarch64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ ARM64 | Details |
| rouge_score_rs-0.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| rouge_score_rs-0.1.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| rouge_score_rs-0.1.0-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| rouge_score_rs-0.1.0-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 2.7 MB
Release files / rouge_score_rs-0.1.0.tar.gz
| Download URL | rouge_score_rs-0.1.0.tar.gz |
|---|---|
| Size | 109.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f0d00bd2f9569261563c655b67f031d9215ef7361ebc20153ed73fec51cebb33
|
|
BLAKE2b-256 checksum How to use checksums |
e33473b0a8631ca7eb9d3dc0fca70e01fefe5d683a22be7075ba9aad0c1d8ec1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / rouge_score_rs-0.1.0-cp39-abi3-win_amd64.whl
| Download URL | rouge_score_rs-0.1.0-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 207.7 kB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
ce686dcd7ae3ba0777d267116e7a46819e02581db97815a3ff8ff2f08920256a
|
|
BLAKE2b-256 checksum How to use checksums |
3ec2b694dc20c157e501fc6fd0394945737c4170c74334458531d9668f39ac18
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / rouge_score_rs-0.1.0-cp39-abi3-musllinux_1_2_x86_64.whl
| Download URL | rouge_score_rs-0.1.0-cp39-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 557.5 kB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
84aa950e73dc1ba41c3b86223db023a4b8a6ecff192ad644dac0bd942196d81e
|
|
BLAKE2b-256 checksum How to use checksums |
012ea7ab0dcc67a8a0e363af190d9771687591bb163086b5a21a796e04ff6db7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / rouge_score_rs-0.1.0-cp39-abi3-musllinux_1_2_aarch64.whl
| Download URL | rouge_score_rs-0.1.0-cp39-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 522.1 kB |
| Tags | CPython 3.9 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
e17dfea0f9d16bcb4c4d9d81f62792e941660cf2f5a34d544ec3f86933b3a13c
|
|
BLAKE2b-256 checksum How to use checksums |
f04d02b505edae0e9f477098c6f7d447b3c03ed6e194614237f16b776f3c687f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / rouge_score_rs-0.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | rouge_score_rs-0.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 345.3 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
0e5373c7c0d81228dc96fc4a776110bb6ef909adc4b28ef552118c81d8749e32
|
|
BLAKE2b-256 checksum How to use checksums |
18b050f1938b77e6e3ec8db118bdce5a23ab69ea0f4bc095eb2611e280fe127e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / rouge_score_rs-0.1.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | rouge_score_rs-0.1.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 343.1 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
1fd7df1cde0ede9040790c5f348c21f063029c5846ef05483be77f189573ebe1
|
|
BLAKE2b-256 checksum How to use checksums |
0dcf003b549e4da4e8d672ad015b21494b8ed23f27ac906e5cba7c77bf15b678
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / rouge_score_rs-0.1.0-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | rouge_score_rs-0.1.0-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 302.5 kB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4447afa57e667779bcc216208e604fef0be76e1e175122f212983f5baf19eb10
|
|
BLAKE2b-256 checksum How to use checksums |
40506b3c4d1243b3b9b97fa5722b5bb5cf33147382af09904a5a19edd2da0425
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / rouge_score_rs-0.1.0-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | rouge_score_rs-0.1.0-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 306.5 kB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
215ad02c1c71dd36702d54ca21cd7107658eb77de2b86ac07b7c9d5acd7bfbc3
|
|
BLAKE2b-256 checksum How to use checksums |
d564cef5df7f11803d44a4a318ae8b5c6db0280582f1192b46b78eab3422933c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency log