High-performance TextRank implementation with Python bindings
Project description
rapid_textrank
High-performance TextRank implementation in Rust with Python bindings.
Extract keywords and key phrases from text up to 10-100x faster than pure Python implementations (depending on document size and tokenization), with support for multiple algorithm variants and 18 languages.
Features
- Fast: Up to 10-100x faster than pure Python implementations (see benchmarks)
- Multiple algorithms: TextRank, PositionRank, and BiasedTextRank variants
- Unicode-aware: Proper handling of CJK and other scripts (emoji are ignored by the built-in tokenizer)
- Multi-language: Stopword support for 18 languages
- Dual API: Native Python classes + JSON interface for batch processing
- Rust core: Computation happens in Rust (the Python GIL is currently held during extraction)
Quick Start
pip install rapid_textrank
from rapid_textrank import extract_keywords
text = """
Machine learning is a subset of artificial intelligence that enables
systems to learn and improve from experience. Deep learning, a type of
machine learning, uses neural networks with many layers.
"""
keywords = extract_keywords(text, top_n=5, language="en")
for phrase in keywords:
print(f"{phrase.text}: {phrase.score:.4f}")
Output:
machine learning: 0.2341
deep learning: 0.1872
artificial intelligence: 0.1654
neural networks: 0.1432
systems: 0.0891
How TextRank Works
TextRank is a graph-based ranking algorithm for keyword extraction, inspired by Google's PageRank.
The Algorithm
-
Build a co-occurrence graph: Words become nodes. An edge connects two words if they appear within a sliding window (default: 4 words).
-
Run PageRank: The algorithm iteratively distributes "importance" through the graph. Words connected to many important words become important themselves.
-
Extract phrases: High-scoring words are grouped into noun chunks (POS-filtered) to form key phrases. Scores are aggregated (sum, mean, or max).
Text: "Machine learning enables systems to learn from data"
Co-occurrence graph (window=2):
machine ←→ learning ←→ enables ←→ systems ←→ learn ←→ data
↓
PageRank
↓
Scores: machine(0.23) learning(0.31) enables(0.12) ...
↓
Phrase extraction
↓
"machine learning" (0.54), "systems" (0.18), ...
Further Reading
- TextRank: Bringing Order into Texts (Mihalcea & Tarau, 2004)
- PositionRank: An Unsupervised Approach to Keyphrase Extraction (Florescu & Caragea, 2017)
- BiasedTextRank: Unsupervised Graph-Based Content Extraction (Kazemi et al., 2020)
Algorithm Variants
| Variant | Best For | Description |
|---|---|---|
BaseTextRank |
General text | Standard TextRank implementation |
PositionRank |
Academic papers, news | Favors words appearing early in the document |
BiasedTextRank |
Topic-focused extraction | Biases results toward specified focus terms |
PositionRank
Weights words by their position—earlier appearances score higher. Useful for documents where key information appears in titles, abstracts, or opening paragraphs.
from rapid_textrank import PositionRank
extractor = PositionRank(top_n=10)
result = extractor.extract_keywords("""
Quantum Computing Advances in 2024
Researchers have made significant breakthroughs in quantum error correction.
The quantum computing field continues to evolve rapidly...
""")
# "quantum computing" and "quantum" will rank higher due to early position
BiasedTextRank
Steers extraction toward specific topics using focus terms. The bias_weight parameter controls how strongly results favor the focus terms.
from rapid_textrank import BiasedTextRank
extractor = BiasedTextRank(
focus_terms=["security", "privacy"],
bias_weight=5.0, # Higher = stronger bias
top_n=10
)
result = extractor.extract_keywords("""
Modern web applications must balance user experience with security.
Privacy regulations require careful data handling. Performance
optimizations should not compromise security measures.
""")
# Results will favor security/privacy-related phrases
API Reference
Convenience Function
The simplest way to extract keywords:
from rapid_textrank import extract_keywords
phrases = extract_keywords(
text, # Input text
top_n=10, # Number of keywords to return
language="en" # Language for stopword filtering
)
Class-Based API
For more control, use the extractor classes:
from rapid_textrank import BaseTextRank, PositionRank, BiasedTextRank
# Standard TextRank
extractor = BaseTextRank(top_n=10, language="en")
result = extractor.extract_keywords(text)
# Position-weighted
extractor = PositionRank(top_n=10, language="en")
result = extractor.extract_keywords(text)
# Topic-biased
extractor = BiasedTextRank(
focus_terms=["machine", "learning"],
bias_weight=5.0,
top_n=10,
language="en"
)
result = extractor.extract_keywords(text)
# You can also pass focus_terms per-call
result = extractor.extract_keywords(text, focus_terms=["neural", "network"])
Configuration
Fine-tune the algorithm with TextRankConfig:
from rapid_textrank import TextRankConfig, BaseTextRank
config = TextRankConfig(
damping=0.85, # PageRank damping factor (0-1)
max_iterations=100, # Maximum PageRank iterations
convergence_threshold=1e-6,# Convergence threshold
window_size=3, # Co-occurrence window size
top_n=10, # Number of results
min_phrase_length=1, # Minimum words in a phrase
max_phrase_length=4, # Maximum words in a phrase
score_aggregation="sum", # How to combine word scores: "sum", "mean", "max", "rms"
language="en", # Language for stopwords
include_pos=["NOUN","ADJ","PROPN","VERB"], # POS tags to include in the graph
use_pos_in_nodes=True, # If True, graph nodes are lemma+POS
phrase_grouping="scrubbed_text", # "lemma" or "scrubbed_text"
stopwords=["custom", "terms"] # Additional stopwords (extends built-in list)
)
extractor = BaseTextRank(config=config)
Result Objects
result = extractor.extract_keywords(text)
# TextRankResult attributes
result.phrases # List of Phrase objects
result.converged # Whether PageRank converged
result.iterations # Number of iterations run
# Phrase attributes
for phrase in result.phrases:
phrase.text # The phrase text (e.g., "machine learning")
phrase.lemma # Lemmatized form
phrase.score # TextRank score
phrase.count # Occurrences in text
phrase.rank # 1-indexed rank
# Convenience method
tuples = result.as_tuples() # [(text, score), ...]
JSON Interface
For processing large documents or integrating with spaCy, use the JSON interface. This accepts pre-tokenized data to avoid re-tokenizing in Rust. Stopword handling can use each token's is_stopword field and/or a config.language plus config.stopwords (additional words that extend the built-in list). Language codes follow the Supported Languages table below.
from rapid_textrank import extract_from_json, extract_batch_from_json
import json
# Single document
doc = {
"tokens": [
{
"text": "Machine",
"lemma": "machine",
"pos": "NOUN",
"start": 0,
"end": 7,
"sentence_idx": 0,
"token_idx": 0,
"is_stopword": False
},
# ... more tokens
],
"config": {"top_n": 10, "language": "en", "stopwords": ["nlp", "transformers"]}
}
result_json = extract_from_json(json.dumps(doc))
result = json.loads(result_json)
# Batch processing (Rust core; per-document processing is sequential)
docs = [doc1, doc2, doc3]
results_json = extract_batch_from_json(json.dumps(docs))
results = json.loads(results_json)
Supported Languages
Stopword filtering is available for 18 languages. Use these codes for the language parameter in all APIs (including JSON config):
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
en |
English | de |
German | fr |
French |
es |
Spanish | it |
Italian | pt |
Portuguese |
nl |
Dutch | ru |
Russian | sv |
Swedish |
no |
Norwegian | da |
Danish | fi |
Finnish |
hu |
Hungarian | tr |
Turkish | pl |
Polish |
ar |
Arabic | zh |
Chinese | ja |
Japanese |
You can inspect the built-in stopword list with:
import rapid_textrank as rt
rt.get_stopwords("en")
Performance
rapid_textrank achieves significant speedups through Rust's performance characteristics and careful algorithm implementation.
Benchmark Script
Run this script to compare performance on your hardware:
"""
Benchmark: rapid_textrank vs pytextrank
Prerequisites:
pip install rapid_textrank pytextrank spacy
python -m spacy download en_core_web_sm
"""
import time
import statistics
# Sample texts of varying sizes
TEXTS = {
"small": """
Machine learning is a subset of artificial intelligence.
Deep learning uses neural networks with many layers.
""",
"medium": """
Natural language processing (NLP) is a field of artificial intelligence
that focuses on the interaction between computers and humans through
natural language. The ultimate goal of NLP is to enable computers to
understand, interpret, and generate human language in a valuable way.
Machine learning approaches have transformed NLP in recent years.
Deep learning models, particularly transformers, have achieved
state-of-the-art results on many NLP tasks including translation,
summarization, and question answering.
Key applications include sentiment analysis, named entity recognition,
machine translation, and text classification. These technologies
power virtual assistants, search engines, and content recommendation
systems used by millions of people daily.
""",
"large": """
Artificial intelligence has evolved dramatically since its inception in
the mid-20th century. Early AI systems relied on symbolic reasoning and
expert systems, where human knowledge was manually encoded into rules.
The machine learning revolution changed everything. Instead of explicit
programming, systems learn patterns from data. Supervised learning uses
labeled examples, unsupervised learning finds hidden structures, and
reinforcement learning optimizes through trial and error.
Deep learning, powered by neural networks with multiple layers, has
achieved remarkable success. Convolutional neural networks excel at
image recognition. Recurrent neural networks and transformers handle
sequential data like text and speech. Generative adversarial networks
create realistic synthetic content.
Natural language processing has been transformed by these advances.
Word embeddings capture semantic relationships. Attention mechanisms
allow models to focus on relevant context. Large language models
demonstrate emergent capabilities in reasoning and generation.
Computer vision applications include object detection, facial recognition,
medical image analysis, and autonomous vehicle perception. These systems
process visual information with superhuman accuracy in many domains.
The ethical implications of AI are significant. Bias in training data
can lead to unfair outcomes. Privacy concerns arise from data collection.
Job displacement affects workers across industries. Regulation and
governance frameworks are being developed worldwide.
Future directions include neuromorphic computing, quantum machine learning,
and artificial general intelligence. Researchers continue to push
boundaries while addressing safety and alignment challenges.
""" * 3 # ~1000 words
}
def benchmark_rapid_textrank(text: str, runs: int = 10) -> dict:
"""Benchmark rapid_textrank."""
from rapid_textrank import BaseTextRank
extractor = BaseTextRank(top_n=10, language="en")
# Warmup
extractor.extract_keywords(text)
times = []
for _ in range(runs):
start = time.perf_counter()
result = extractor.extract_keywords(text)
elapsed = time.perf_counter() - start
times.append(elapsed * 1000) # Convert to ms
return {
"min": min(times),
"mean": statistics.mean(times),
"median": statistics.median(times),
"std": statistics.stdev(times) if len(times) > 1 else 0,
"phrases": len(result.phrases)
}
def benchmark_pytextrank(text: str, runs: int = 10) -> dict:
"""Benchmark pytextrank with spaCy."""
import spacy
import pytextrank
nlp = spacy.load("en_core_web_sm")
nlp.add_pipe("textrank")
# Warmup
doc = nlp(text)
times = []
for _ in range(runs):
start = time.perf_counter()
doc = nlp(text)
phrases = list(doc._.phrases[:10])
elapsed = time.perf_counter() - start
times.append(elapsed * 1000)
return {
"min": min(times),
"mean": statistics.mean(times),
"median": statistics.median(times),
"std": statistics.stdev(times) if len(times) > 1 else 0,
"phrases": len(phrases)
}
def main():
print("=" * 70)
print("TextRank Performance Benchmark")
print("=" * 70)
for size, text in TEXTS.items():
word_count = len(text.split())
print(f"\n{size.upper()} TEXT (~{word_count} words)")
print("-" * 50)
# Benchmark rapid_textrank
rust_results = benchmark_rapid_textrank(text)
print(f"rapid_textrank: {rust_results['mean']:>8.2f} ms (±{rust_results['std']:.2f})")
# Benchmark pytextrank
try:
py_results = benchmark_pytextrank(text)
print(f"pytextrank: {py_results['mean']:>8.2f} ms (±{py_results['std']:.2f})")
speedup = py_results['mean'] / rust_results['mean']
print(f"Speedup: {speedup:>8.1f}x faster")
except Exception as e:
print(f"pytextrank: (not available: {e})")
print("\n" + "=" * 70)
print("Note: pytextrank times include spaCy tokenization.")
print("For fair comparison with pre-tokenized input, use rapid_textrank's JSON API.")
print("=" * 70)
if __name__ == "__main__":
main()
Why Rust is Fast
The performance advantage comes from several factors:
-
CSR Graph Format: The co-occurrence graph uses Compressed Sparse Row format, enabling cache-friendly memory access during PageRank iteration.
-
String Interning: Repeated words share a single allocation via
StringPool, reducing memory usage 10-100x for typical documents. -
Parallel Processing: Rayon provides data parallelism in internal graph construction without explicit thread management.
-
Link-Time Optimization (LTO): Release builds use full LTO with single codegen unit for maximum inlining.
-
Rust core: Most computation happens in Rust, minimizing Python-level overhead.
-
FxHash: Fast non-cryptographic hashing for internal hash maps.
Installation
From PyPI
pip install rapid_textrank
Import name is rapid_textrank.
With spaCy Support
pip install rapid_textrank[spacy]
import spacy
import rapid_textrank.spacy_component # registers the pipeline factory
nlp = spacy.load("en_core_web_sm")
nlp.add_pipe("rapid_textrank")
doc = nlp("Machine learning is a subset of artificial intelligence.")
for phrase in doc._.phrases[:5]:
print(f"{phrase.text}: {phrase.score:.4f}")
From Source
Requirements: Rust 1.70+, Python 3.9+
git clone https://github.com/xang1234/rapid-textrank
cd rapid_textrank
pip install maturin
maturin develop --release
Development Setup
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run Rust tests
cargo test
Publishing
Publishing is automated with GitHub Actions using Trusted Publishing (OIDC), so no API tokens are stored.
TestPyPI release (push a tag):
git tag -a test-0.1.0 -m "TestPyPI 0.1.0"
git push origin test-0.1.0
Tag pattern: test-*
PyPI release (push a tag):
git tag -a v0.1.0 -m "Release 0.1.0"
git push origin v0.1.0
Tag pattern: v*
Wheel builds
GitHub Actions builds wheels for Python 3.9–3.12 on Linux, macOS, and Windows.
Before the first publish, add Trusted Publishers on TestPyPI and PyPI:
- Repo:
xang1234/textranker - Workflows:
.github/workflows/publish-testpypi.ymland.github/workflows/publish-pypi.yml - Environments:
testpypiandpypi
You can also trigger either workflow manually via GitHub Actions if needed.
License
MIT License - see LICENSE for details.
Citation
If you use rapid_textrank in research, please cite the original TextRank paper:
@inproceedings{mihalcea-tarau-2004-textrank,
title = "{T}ext{R}ank: Bringing Order into Text",
author = "Mihalcea, Rada and Tarau, Paul",
booktitle = "Proceedings of EMNLP 2004",
year = "2004",
publisher = "Association for Computational Linguistics",
}
For PositionRank:
@inproceedings{florescu-caragea-2017-positionrank,
title = "{P}osition{R}ank: An Unsupervised Approach to Keyphrase Extraction from Scholarly Documents",
author = "Florescu, Corina and Caragea, Cornelia",
booktitle = "Proceedings of ACL 2017",
year = "2017",
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 rapid_textrank-0.1.1.tar.gz.
File metadata
- Download URL: rapid_textrank-0.1.1.tar.gz
- Upload date:
- Size: 163.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e201f572a9e4dc534a97fd760d1ab1f73b12c3b12372d15556ad5776a25613b2
|
|
| MD5 |
7e4437db99881895fbd9e1e7ea46b9b9
|
|
| BLAKE2b-256 |
c0769cef6941f9cf9b5264a7f7e113dffcf96a2b3b96eca6a5de8da2435e8e7f
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1.tar.gz:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1.tar.gz -
Subject digest:
e201f572a9e4dc534a97fd760d1ab1f73b12c3b12372d15556ad5776a25613b2 - Sigstore transparency entry: 912005307
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 421.7 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d4703a6a5998ded1efd219c56a510fb8521538cd129b3ee3b009c74806f123c
|
|
| MD5 |
5ca625e7eb089d9c4ec245bc23cfa6e2
|
|
| BLAKE2b-256 |
212dae1cc2f3c0a51f0599241b7698513071857b6f924387b1c4b3da8aef82e7
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp312-cp312-win_amd64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp312-cp312-win_amd64.whl -
Subject digest:
6d4703a6a5998ded1efd219c56a510fb8521538cd129b3ee3b009c74806f123c - Sigstore transparency entry: 912006292
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 546.5 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
968f107635e6044128679a3a39af44f03589255fe3bf265fdb6926956321df2b
|
|
| MD5 |
2ecc4ca6b12edee2304467f908966f56
|
|
| BLAKE2b-256 |
aad4744129f28f0bd903e5d235d790c64b3c89eaa6f4afa028b9e64d82a345ad
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
968f107635e6044128679a3a39af44f03589255fe3bf265fdb6926956321df2b - Sigstore transparency entry: 912006403
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 507.1 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f22f6ef8593105f10bc1ee0abe924cb99006c6703ab3c6929ac9cf7c98af54b8
|
|
| MD5 |
19140a18ea3fc04b5d2a1ef1b121bf64
|
|
| BLAKE2b-256 |
f9aa7a20c57efef27ab1de32af292f0f77930597f68a7091d8fc55a60935731e
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
f22f6ef8593105f10bc1ee0abe924cb99006c6703ab3c6929ac9cf7c98af54b8 - Sigstore transparency entry: 912005692
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 420.8 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
366fdde79cd2e139a801df7e643467b6d40f61d841599249efc879ac4673d6ab
|
|
| MD5 |
69fa96b6cb014990768136a17a75ee38
|
|
| BLAKE2b-256 |
5fdf66b20fc508fdfe139043feef5e11935eb553b60bfd01934581eb61b97962
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp311-cp311-win_amd64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp311-cp311-win_amd64.whl -
Subject digest:
366fdde79cd2e139a801df7e643467b6d40f61d841599249efc879ac4673d6ab - Sigstore transparency entry: 912006092
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 547.5 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2293e813639d8381800091d6768cc7a34b99620126298fcceffb721392432af4
|
|
| MD5 |
ceefea899b52314aded70a0fd8ee290f
|
|
| BLAKE2b-256 |
769d7f2f448c284be2d9374008b292f257a2453f3eb734d30b369c21c9d21612
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
2293e813639d8381800091d6768cc7a34b99620126298fcceffb721392432af4 - Sigstore transparency entry: 912006493
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 506.8 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e42e555a1d8f80d89e942996999a7ba243d930964d568155e0d25be4db646757
|
|
| MD5 |
05961fbd1e945edd4c62a5506135bd2c
|
|
| BLAKE2b-256 |
255d8096e55a794e6a5248c6bf8cde8397efb12ce403f53e406c76d64eb22ee6
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
e42e555a1d8f80d89e942996999a7ba243d930964d568155e0d25be4db646757 - Sigstore transparency entry: 912005389
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 421.0 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0e5ccc6f2b4c047a83814c8d2838d17794d860c7dc1c245a1c2a98576cda588
|
|
| MD5 |
0be0eb6c5688c97718ab37ea5c921ed3
|
|
| BLAKE2b-256 |
33cd0f4625a5c9e2e828ef0942f42cdc4e2d7cd0088585a3dcc1a6616fd85c8d
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp310-cp310-win_amd64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp310-cp310-win_amd64.whl -
Subject digest:
b0e5ccc6f2b4c047a83814c8d2838d17794d860c7dc1c245a1c2a98576cda588 - Sigstore transparency entry: 912005582
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 547.6 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bc2813581d758eb5d0aa52b738d2cf35168ad26a444c44126839b3ff9f09df3
|
|
| MD5 |
a33fc7b2bec0b17a9bf77487f0c68b0a
|
|
| BLAKE2b-256 |
55a498990deeec3cb68f7d54c29114c15053649601fa285feb3dcd526e9a9a1d
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
4bc2813581d758eb5d0aa52b738d2cf35168ad26a444c44126839b3ff9f09df3 - Sigstore transparency entry: 912005895
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 506.9 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87f23977c898f0f3a672cacb5d57440a7b4c3027de0338aeafc4187997f9bccf
|
|
| MD5 |
61f383056f79307f219b16bf884b24e3
|
|
| BLAKE2b-256 |
bc00adf9bb4e5d9d18f9b9ed8d877c654d42482155d2f4dd5e93932f3345e8e4
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
87f23977c898f0f3a672cacb5d57440a7b4c3027de0338aeafc4187997f9bccf - Sigstore transparency entry: 912005507
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 421.2 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e17021a9aabe24858491c21edb1d3b2af9127099988ce79292f801f806c0904
|
|
| MD5 |
c8ff598001e594535b04488a285ceedb
|
|
| BLAKE2b-256 |
e325bef1e85e5c2b1e2f7b6c0c4fc0e9a75ac831f1b0e5381aed8b2ce0cf9022
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp39-cp39-win_amd64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp39-cp39-win_amd64.whl -
Subject digest:
1e17021a9aabe24858491c21edb1d3b2af9127099988ce79292f801f806c0904 - Sigstore transparency entry: 912006015
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 547.9 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee40cfd24ddc9172772d32c530de403c89354f13eee79f4b96951865462fa34f
|
|
| MD5 |
1c4632c36e9739f970d09944a59c4da5
|
|
| BLAKE2b-256 |
f4308399983673ffb0483d53536c851a2f9c08b69d3bc1b08e2bb4e05f2913a5
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
ee40cfd24ddc9172772d32c530de403c89354f13eee79f4b96951865462fa34f - Sigstore transparency entry: 912006201
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type:
File details
Details for the file rapid_textrank-0.1.1-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapid_textrank-0.1.1-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 507.3 kB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11a484aee5823bad6bd2fa3303025226a35e6a3afe892f9b874d5890d8f63524
|
|
| MD5 |
a30fedc0ccef4ed5f3648b324b56644f
|
|
| BLAKE2b-256 |
6cc83f806184326f60b87831c6b661556c56f191d31d1dd94965fc1a3bff4906
|
Provenance
The following attestation bundles were made for rapid_textrank-0.1.1-cp39-cp39-macosx_11_0_arm64.whl:
Publisher:
publish-pypi.yml on xang1234/rapid-textrank
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapid_textrank-0.1.1-cp39-cp39-macosx_11_0_arm64.whl -
Subject digest:
11a484aee5823bad6bd2fa3303025226a35e6a3afe892f9b874d5890d8f63524 - Sigstore transparency entry: 912005775
- Sigstore integration time:
-
Permalink:
xang1234/rapid-textrank@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/xang1234
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@f983c007d63a17fb3948659c10e7bd66e85c2abe -
Trigger Event:
push
-
Statement type: