{"id":13469334,"url":"https://github.com/miso-belica/sumy","last_synced_at":"2026-02-14T23:00:55.124Z","repository":{"id":37602295,"uuid":"8313091","full_name":"miso-belica/sumy","owner":"miso-belica","description":"Module for automatic summarization of text documents and HTML pages.","archived":false,"fork":false,"pushed_at":"2025-12-26T19:37:26.000Z","size":2226,"stargazers_count":3654,"open_issues_count":31,"forks_count":540,"subscribers_count":111,"default_branch":"main","last_synced_at":"2025-12-28T03:42:57.567Z","etag":null,"topics":["html-extraction","html-extractor","html-page","lsa","nlp","pagerank-algorithm","python","reduction","summarization","summarizer","summary","sumy","text-extraction","textteaser"],"latest_commit_sha":null,"homepage":"https://miso-belica.github.io/sumy/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miso-belica.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["miso-belica"]}},"created_at":"2013-02-20T12:56:48.000Z","updated_at":"2025-12-17T19:04:31.000Z","dependencies_parsed_at":"2023-02-18T18:01:48.223Z","dependency_job_id":"96d56d3c-5c88-456a-84ff-6a77082b6e02","html_url":"https://github.com/miso-belica/sumy","commit_stats":{"total_commits":409,"total_committers":31,"mean_commits":"13.193548387096774","dds":"0.16870415647921755","last_synced_commit":"0bcec9f1f512526314a4c788a4a83cec985b7955"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/miso-belica/sumy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miso-belica%2Fsumy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miso-belica%2Fsumy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miso-belica%2Fsumy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miso-belica%2Fsumy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miso-belica","download_url":"https://codeload.github.com/miso-belica/sumy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miso-belica%2Fsumy/sbom","scorecard":{"id":649745,"data":{"date":"2025-08-11","repo":{"name":"github.com/miso-belica/sumy","commit":"d31ead33831275c0e8d595f69174d9f129f8944a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.3,"checks":[{"name":"Code-Review","score":5,"reason":"Found 8/16 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/publish-to-pypi.yml:1","Warn: no topLevel permission defined: .github/workflows/run-tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-to-pypi.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/miso-belica/sumy/publish-to-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-to-pypi.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/miso-belica/sumy/publish-to-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-tests.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/miso-belica/sumy/run-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-tests.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/miso-belica/sumy/run-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-tests.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/miso-belica/sumy/run-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-tests.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/miso-belica/sumy/run-tests.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating python:3-alpine to python:3-alpine@sha256:a70b35b575e33d951e3f9d3fe94163ef0fd338c22552bc587a1b098a87ed6184","Warn: pipCommand not pinned by hash: Dockerfile:5-7","Warn: pipCommand not pinned by hash: .github/workflows/publish-to-pypi.yml:20","Warn: pipCommand not pinned by hash: .github/workflows/publish-to-pypi.yml:21","Warn: pipCommand not pinned by hash: .github/workflows/run-tests.yml:20","Warn: pipCommand not pinned by hash: .github/workflows/run-tests.yml:21","Warn: pipCommand not pinned by hash: .github/workflows/run-tests.yml:59","Warn: pipCommand not pinned by hash: .github/workflows/run-tests.yml:60","Warn: pipCommand not pinned by hash: .github/workflows/run-tests.yml:62","Warn: pipCommand not pinned by hash: .github/workflows/run-tests.yml:64","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   9 pipCommand dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T13:11:55.900Z","repository_id":37602295,"created_at":"2025-08-21T13:11:55.900Z","updated_at":"2025-08-21T13:11:55.900Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29460136,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T22:42:09.113Z","status":"ssl_error","status_checked_at":"2026-02-14T22:42:05.053Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["html-extraction","html-extractor","html-page","lsa","nlp","pagerank-algorithm","python","reduction","summarization","summarizer","summary","sumy","text-extraction","textteaser"],"created_at":"2024-07-31T15:01:34.335Z","updated_at":"2026-02-14T23:00:55.116Z","avatar_url":"https://github.com/miso-belica.png","language":"Python","funding_links":["https://github.com/sponsors/miso-belica"],"categories":["Web Content Extracting","Python","资源列表","Natural Language Processing","Web内容提取","网络","文本数据和NLP","Web Content Extracting [🔝](#readme)","Awesome Python","Uncategorized","Feature Extraction","Machine learning \u0026 NLP"],"sub_categories":["网页内容提取","Conversation \u0026 Translation","Web Content Extracting","Uncategorized","Text/NLP"],"readme":"# Automatic text summarizer\n\n\n[![image](https://github.com/miso-belica/sumy/actions/workflows/run-tests.yml/badge.svg)](https://github.com/miso-belica/sumy/actions/workflows/run-tests.yml)\n[![GitPod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/miso-belica/sumy) \n\nSimple library and command line utility for extracting summary from HTML\npages or plain texts. The package also contains simple evaluation\nframework for text summaries. Implemented summarization methods are described in the [documentation](docs/summarizators.md). I also maintain a list of [alternative implementations](docs/alternatives.md) of the summarizers in various programming languages.\n\n## Is my natural language supported?\nThere is a [good chance](docs/index.md#Tokenizer) it is. But if not it is [not too hard to add](docs/how-to-add-new-language.md) it.\n\n## Installation\n\nMake sure you have [Python](http://www.python.org/) 3.8+ installed.\n\n### Using uv (recommended)\n\n[uv](https://docs.astral.sh/uv/) is a modern, fast Python package installer and resolver.\n\n```sh\n$ uv pip install sumy\n$ uv pip install git+https://github.com/miso-belica/sumy.git  # for the fresh version\n```\n\n### Using pip\n\n```sh\n$ pip install sumy\n$ pip install git+git://github.com/miso-belica/sumy.git  # for the fresh version\n```\n\n### For development\n\nIf you want to contribute or modify the code:\n\n```sh\n$ git clone https://github.com/miso-belica/sumy.git\n$ cd sumy\n$ uv sync               # Install dependencies (dev group included automatically)\n$ uv run pytest         # Run tests\n$ uv run sumy --help    # Run sumy using uv\n```\n\n## Usage\n\nThanks to some good soul out there, the easiest way to try sumy is in your browser at https://huggingface.co/spaces/issam9/sumy_space\n\nSumy contains command line utility for quick summarization of documents.\n\n```sh\n$ sumy lex-rank --length=10 --url=https://en.wikipedia.org/wiki/Automatic_summarization # what's summarization?\n$ sumy lex-rank --language=uk --length=30 --url=https://uk.wikipedia.org/wiki/Україна\n$ sumy luhn --language=czech --url=https://www.zdrojak.cz/clanky/automaticke-zabezpeceni/\n$ sumy edmundson --language=czech --length=3% --url=https://cs.wikipedia.org/wiki/Bitva_u_Lipan\n$ sumy --help # for more info\n```\n\nVarious evaluation methods for some summarization method can be executed\nby commands below:\n\n```sh\n$ sumy_eval lex-rank reference_summary.txt --url=https://en.wikipedia.org/wiki/Automatic_summarization\n$ sumy_eval lsa reference_summary.txt --language=czech --url=https://www.zdrojak.cz/clanky/automaticke-zabezpeceni/\n$ sumy_eval edmundson reference_summary.txt --language=czech --url=https://cs.wikipedia.org/wiki/Bitva_u_Lipan\n$ sumy_eval --help # for more info\n```\n\nIf you don't want to bother by the installation, you can try it as a container.\n\n```sh\n$ docker run --rm misobelica/sumy lex-rank --length=10 --url=https://en.wikipedia.org/wiki/Automatic_summarization\n```\n\n## Python API\n\nOr you can use sumy like a library in your project. Create file `sumy_example.py` ([don't name it `sumy.py`](https://stackoverflow.com/questions/41334622/python-sumy-no-module-named-sumy-parsers-html)) with the code below to test it.\n\n```python\n# -*- coding: utf-8 -*-\n\nfrom __future__ import absolute_import\nfrom __future__ import division, print_function, unicode_literals\n\nfrom sumy.parsers.html import HtmlParser\nfrom sumy.parsers.plaintext import PlaintextParser\nfrom sumy.nlp.tokenizers import Tokenizer\nfrom sumy.summarizers.lsa import LsaSummarizer as Summarizer\nfrom sumy.nlp.stemmers import Stemmer\nfrom sumy.utils import get_stop_words\n\n\nLANGUAGE = \"english\"\nSENTENCES_COUNT = 10\n\n\nif __name__ == \"__main__\":\n    url = \"https://en.wikipedia.org/wiki/Automatic_summarization\"\n    parser = HtmlParser.from_url(url, Tokenizer(LANGUAGE))\n    # or for plain text files\n    # parser = PlaintextParser.from_file(\"document.txt\", Tokenizer(LANGUAGE))\n    # parser = PlaintextParser.from_string(\"Check this out.\", Tokenizer(LANGUAGE))\n    stemmer = Stemmer(LANGUAGE)\n\n    summarizer = Summarizer(stemmer)\n    summarizer.stop_words = get_stop_words(LANGUAGE)\n\n    for sentence in summarizer(parser.document, SENTENCES_COUNT):\n        print(sentence)\n```\n\n## Interesting projects using sumy\n\nI found some interesting projects while browsing the internet or sometimes people wrote me an e-mail with questions, and I was curious how they use the sumy :)\n\n* [Learning to generate questions from text](https://software.intel.com/en-us/articles/using-natural-language-processing-for-smart-question-generation) - https://github.com/adityasarvaiya/Automatic_Question_Generation\n* Summarize your video to any duration - https://github.com/aswanthkoleri/VideoMash and similar https://github.com/OpenGenus/vidsum\n* Tool for collectively summarizing large discussions - https://github.com/amyxzhang/wikum\n* AutoTL;DR bot for [Lemmy](https://en.wikipedia.org/wiki/Lemmy_(software)) uses sumy: https://github.com/RikudouSage/LemmyAutoTldrBot\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiso-belica%2Fsumy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiso-belica%2Fsumy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiso-belica%2Fsumy/lists"}