Skip to main content

High-performance TextRank implementation with Python bindings

Project description

rapid_textrank

License: MIT Python 3.9+ Rust

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

  1. Build a co-occurrence graph: Words become nodes. An edge connects two words if they appear within a sliding window (default: 4 words).

  2. Run PageRank: The algorithm iteratively distributes "importance" through the graph. Words connected to many important words become important themselves.

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

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=4,             # 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
)

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:

  1. CSR Graph Format: The co-occurrence graph uses Compressed Sparse Row format, enabling cache-friendly memory access during PageRank iteration.

  2. String Interning: Repeated words share a single allocation via StringPool, reducing memory usage 10-100x for typical documents.

  3. Parallel Processing: Rayon provides data parallelism in internal graph construction without explicit thread management.

  4. Link-Time Optimization (LTO): Release builds use full LTO with single codegen unit for maximum inlining.

  5. Rust core: Most computation happens in Rust, minimizing Python-level overhead.

  6. 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.yml and .github/workflows/publish-pypi.yml
  • Environments: testpypi and pypi

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

rapid_textrank-0.1.0.tar.gz (161.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rapid_textrank-0.1.0-cp312-cp312-win_amd64.whl (415.9 kB view details)

Uploaded CPython 3.12Windows x86-64

rapid_textrank-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (539.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rapid_textrank-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (501.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rapid_textrank-0.1.0-cp311-cp311-win_amd64.whl (415.4 kB view details)

Uploaded CPython 3.11Windows x86-64

rapid_textrank-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (540.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rapid_textrank-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (501.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rapid_textrank-0.1.0-cp310-cp310-win_amd64.whl (415.4 kB view details)

Uploaded CPython 3.10Windows x86-64

rapid_textrank-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (540.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rapid_textrank-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (501.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rapid_textrank-0.1.0-cp39-cp39-win_amd64.whl (415.6 kB view details)

Uploaded CPython 3.9Windows x86-64

rapid_textrank-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (541.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

rapid_textrank-0.1.0-cp39-cp39-macosx_11_0_arm64.whl (501.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file rapid_textrank-0.1.0.tar.gz.

File metadata

  • Download URL: rapid_textrank-0.1.0.tar.gz
  • Upload date:
  • Size: 161.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rapid_textrank-0.1.0.tar.gz
Algorithm Hash digest
SHA256 985fbea7e8869702b632108110d28aef3db12e0d8b2120ccf16436d3cba2b012
MD5 b4027a828f6dba0f529388b506ab9a1a
BLAKE2b-256 c86e5b21aa7e6c732a284c798db29880c7a9e783e5629474dc7e66573e0e2e89

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0.tar.gz:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 376fa24b5168818fabfac2694bdb6738a9320aa942d132ebdbc5bfcd1c224739
MD5 8f9207e4ff609426cf7ff063b0e9493a
BLAKE2b-256 8516fd96f5e746ac762dc7ce5ee1d7d408a285f0d4b612e33bb8015d6ce10f9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp312-cp312-win_amd64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c3f75903ddf15a22db8fb577a6d45269e0ac4ecb12ca1308ec910a23f507820e
MD5 32e2155f69eb62b018f6ae3453c2f792
BLAKE2b-256 dba4efc9428b599decf5bf023dd897321ca5ce7dd1dd45d781d08b404fcb3874

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0cebd89fa7892e26465ff3918d571547723f2680cfc29081dd036a0836c2ba69
MD5 7b37f7367384a1dc20cc33db52baff26
BLAKE2b-256 356ff67338dd046a2d5cc91b6eb56cceb51bea06730a39185a6a9e5e7a1778db

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d9485a084795928f9eb3eb05eda7d8374338cad914bfe6170ba718aed0bb985d
MD5 94d599c23f9bbb6a6d68e82c62af2085
BLAKE2b-256 14c1225f02e147c0a336fba5ecf790040ce66f00ad0b9409ec090604b6214bdf

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp311-cp311-win_amd64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9813978da2920fec9acaddfeaed9c2db4a812fe4713621d76a123912040ffb66
MD5 b5310ca14f0a5d7f5f86c87d0edce819
BLAKE2b-256 2e141863e160c440014be482ad07f1e263efdd838d704fa0b997ce982031ccfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 173f253b95f70e1f1b85196c8e21dcdb3e5e322a494e3a27d1720b3bea4bf2cd
MD5 fd720dccc4b4d91c8ef77c33365f5dd0
BLAKE2b-256 0f5f1fda3d7c83fd2baa0138be4a2d1ce719322f027feb6e114f3f23a2d6fad4

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6b4cf686266a303ce6d349519d6afb05b3b2048e9592477396c17b07d0767df4
MD5 080c9594e3b9ab8d7385ea4b9d4d1956
BLAKE2b-256 abc0f807f256da6127765e3b43a57a893a3e19949266d85c83426bf21d2afe72

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp310-cp310-win_amd64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c6e7ef50392f3cdcceb6966432639104308748df2070486ca75a9ae3144f94df
MD5 dacaaf0a6e06d6708e8eae9884d02ff0
BLAKE2b-256 ee57ca82a3524dcb35de988f0237d7578328318fd6c2fc10f7b25d6a20697be9

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d6b8055bb7d1b46d5f38bca82a5cf8146d4b15af37c04e5127cab0459c5d84e
MD5 4ec1f4e85378502b0312f794ff388450
BLAKE2b-256 72dea35333d0f16eff4d5ba642ce3967471327dabb6300bd08d58d0fdd492ab1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8490051de5ac944c8fee744028cfd3ce4019d25d7fcc2e3c6e19efc1837f06a9
MD5 f00f2a33139daad66e74b64548e7a7a6
BLAKE2b-256 8a73889b7da988394c025e86078d514b697fc0ed9d6439d2a2fcbf9587dcc798

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp39-cp39-win_amd64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1dea9d0b69d1c0f9fd6d71b48c551fb4a3145578177c1eb18858bc9bda00b315
MD5 a8ed5323c28685a3f26ff5768fbae56a
BLAKE2b-256 9c85ce22037848b11e88550e68e51256caba12385ad9eb0d4232fb098a9b19eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rapid_textrank-0.1.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapid_textrank-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1004554684ad964c2cfdefe08bc8cb4a3ab7882f15a7cf0c1076686471c61b0
MD5 b7fb0eabf015a028a50166a4c0add883
BLAKE2b-256 f446fcfaa79086e69625654ab58c5d28404b5204a0e2930023c344f08a7b5da2

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapid_textrank-0.1.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on xang1234/rapid-textrank

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page