# Arxiv Summarizer
The `ArxivSummarizer` is a Python class designed for summarizing ArXiv documents using Hugging Face's Transformers library. It can be configured with a custom `SummarizationModel` or with pre-trained models based on user preferences.
## Table of Contents
- [Arxiv Summarizer](#arxiv-summarizer)
- [Table of Contents](#table-of-contents)
- [Installation](#installation)
- [Usage](#usage)
- [As CLI](#as-cli)
- [With Custom SummarizationModel](#with-custom-summarizationmodel)
- [With Pre-trained Model by Name](#with-pre-trained-model-by-name)
- [With Default Models](#with-default-models)
- [Fetching a list of papers](#fetching-a-list-of-papers)
- [Examples](#examples)
- [Contributing](#contributing)
- [License](#license)
## Installation
Make sure you have Python 3.8 or later installed. Install the required dependencies using the following command:
You can use Arxiv Summarizer by simply doing
```bash
pip install arxiv-summarizer
```
For developers looking to tinker you can simply `git clone` this repository and use:
```bash
pip install .
```
## Usage
### As CLI
Arxiv Summarizer can be easily used as a CLI tool to get papers summarized...
```sh
$ python3 -m arxiv_summarizer 1234.56789v1
```
### With Custom SummarizationModel
If you have a custom `SummarizationModel` and `Tokenizer`, you can use them with `ArxivSummarizer` directly:
```python
from arxiv_summarizer import SummarizationModel, ArxivSummarizer
# Initialize your custom SummarizationModel
custom_model = SummarizationModel(
model="your_custom_model",
tokenizer="your_custom_tokenizer",
max_length=512, do_sample=True
)
# Initialize ArxivSummarizer with your custom model
summarizer = ArxivSummarizer(summarizer=custom_model)
# Generate a summary
summary = summarizer(arxiv_id="1234.5678")
print(summary)
```
### With Pre-trained Model by Name
You can use a pre-trained model from Hugging Face's model hub by specifying its name:
```python
from arxiv_summarizer import ArxivSummarizer
# Initialize ArxivSummarizer with a pre-trained model by name
summarizer = ArxivSummarizer(model="facebook/bart-large-cnn")
# Generate a summary
summary = summarizer(arxiv_id="1234.5678")
print(summary)
```
### With Default Models
If you don't provide a specific model, `ArxivSummarizer` will use default models based on GPU availability:
```python
from arxiv_summarizer import ArxivSummarizer
# Initialize ArxivSummarizer with default models
summarizer = ArxivSummarizer()
# Generate a summary
summary = summarizer(arxiv_id="1234.5678")
print(summary)
```
### Fetching a list of papers
First we can search a list of papers directly using the `fetch_paper()` definition.
```python
from rich.progress import Progress
from rich.console import Console
from rich.table import Table
from typing import List
from arxiv_summarizer.fetch_paper import fetch_paper, ArxivPaper
# Get the list of papers
papers = fetch_paper("Yoshua Bengio", max_docs=15)
results : List[ArxivPaper] = [paper for paper in papers]
print(f"{len(results)} Papers Found !!!")
```
This will load the papers, their metadata and their summaries. Now we can download the content of the paper and show the progress using a progressbar from `rich`.
```python
# Download the papers
with Progress() as progress:
task = progress.add_task("[cyan] Downloading content...", total = len(results))
for index, paper in enumerate(results):
progress.update(task, advance=1, description=f"Downloading content for paper {paper.arxiv_id}")
_ = results[index].content # This will download the content automatically.
```
Once all the content has been downloaded, we can display the content in a tabular structure using a `rich` Table.
```python
# Print the data
console = Console()
table = Table(show_header=True, header_style="bold magenta")
table.add_column("ID", style="dim")
table.add_column("Title", style="dim")
table.add_column("Authors", style="dim")
table.add_column("Content Size", style="dim")
for entry in results:
entry:ArxivPaper
table.add_row(entry.arxiv_id, entry.name, ", ".join(entry.authors), str(len(entry.content)))
console.print(table)
```
```
15 Papers Found !!!
Downloading content for paper 1203.4416v1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ ID ┃ Title ┃ Authors ┃ Content Size ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ 1206.5533v2 │ Practical recommendations for │ Yoshua Bengio │ 134815 │
│ │ gradient-based training of deep │ │ │
│ │ architectures │ │ │
│ 1207.4404v1 │ Better Mixing via Deep Representations │ Yoshua Bengio, Grégoire Mesnil, Yann │ 31767 │
│ │ │ Dauphin, Salah Rifai │ │
│ 1305.0445v2 │ Deep Learning of Representations: Looking │ Yoshua Bengio │ 121365 │
│ │ Forward │ │ │
│ 1212.2686v1 │ Joint Training of Deep Boltzmann Machines │ Ian Goodfellow, Aaron Courville, Yoshua │ 13806 │
│ │ │ Bengio │ │
│ 1703.07718v1 │ Independently Controllable Features │ Emmanuel Bengio, Valentin Thomas, Joelle │ 19385 │
│ │ │ Pineau, Doina Precup, Yoshua Bengio │ │
│ 1211.5063v2 │ On the difficulty of training Recurrent │ Razvan Pascanu, Tomas Mikolov, Yoshua │ 50908 │
│ │ Neural Networks │ Bengio │ │
│ 1206.5538v3 │ Representation Learning: A Review and New │ Yoshua Bengio, Aaron Courville, Pascal │ 194906 │
│ │ Perspectives │ Vincent │ │
│ 1207.0057v1 │ Implicit Density Estimation by Local │ Yoshua Bengio, Guillaume Alain, Salah │ 35635 │
│ │ Moment Matching to Sample from │ Rifai │ │
│ │ Auto-Encoders │ │ │
│ 1305.6663v4 │ Generalized Denoising Auto-Encoders as │ Yoshua Bengio, Li Yao, Guillaume Alain, │ 33769 │
│ │ Generative Models │ Pascal Vincent │ │
│ 1311.6184v4 │ Bounding the Test Log-Likelihood of │ Yoshua Bengio, Li Yao, Kyunghyun Cho │ 23711 │
│ │ Generative Models │ │ │
│ 1510.02777v2 │ Early Inference in Energy-Based Models │ Yoshua Bengio, Asja Fischer │ 26477 │
│ │ Approximates Back-Propagation │ │ │
│ 1509.05936v2 │ STDP as presynaptic activity times rate of │ Yoshua Bengio, Thomas Mesnard, Asja │ 22030 │
│ │ change of postsynaptic activity │ Fischer, Saizheng Zhang, Yuhuai Wu │ │
│ 1103.2832v1 │ Autotagging music with conditional │ Michael Mandel, Razvan Pascanu, Hugo │ 47698 │
│ │ restricted Boltzmann machines │ Larochelle, Yoshua Bengio │ │
│ 2007.15139v2 │ Deriving Differential Target Propagation │ Yoshua Bengio │ 63661 │
│ │ from Iterating Approximate Inverses │ │ │
│ 1203.4416v1 │ On Training Deep Boltzmann Machines │ Guillaume Desjardins, Aaron Courville, │ 20531 │
│ │ │ Yoshua Bengio │ │
└──────────────┴────────────────────────────────────────────┴────────────────────────────────────────────┴──────────────┘
```
## Examples
For more detailed examples, refer to the [Examples](examples/) directory.
## Contributing
Contributions are welcome! Please refer to the [Contributing Guidelines](CONTRIBUTING.md) for details on how to contribute to this project.
## License
This project is licensed under the [Apache](LICENSE).
Raw data
{
"_id": null,
"home_page": "https://github.com/ArchanGhosh/Arxiv-Summarizer",
"name": "arxiv-summarizer",
"maintainer": "Archan Ghosh, Arnav Das, Debgandhar Ghosh, Subhayu Bala",
"docs_url": null,
"requires_python": "",
"maintainer_email": "gharchan@gmail.com, arnav.das88@gmail.com, debgandhar4000@gmail.com, balasubhayu99@gmail.com",
"keywords": "arxiv sdk summarization summary",
"author": "Archan Ghosh, Arnav Das",
"author_email": "gharchan@gmail.com, arnav.das88@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/5d/b7/313acb1cd06701324c7d73fc0c4cbd6927e2c31348499a1771c31a70a30c/arxiv-summarizer-0.1.1.tar.gz",
"platform": null,
"description": "# Arxiv Summarizer\n\nThe `ArxivSummarizer` is a Python class designed for summarizing ArXiv documents using Hugging Face's Transformers library. It can be configured with a custom `SummarizationModel` or with pre-trained models based on user preferences.\n\n## Table of Contents\n\n- [Arxiv Summarizer](#arxiv-summarizer)\n - [Table of Contents](#table-of-contents)\n - [Installation](#installation)\n - [Usage](#usage)\n - [As CLI](#as-cli)\n - [With Custom SummarizationModel](#with-custom-summarizationmodel)\n - [With Pre-trained Model by Name](#with-pre-trained-model-by-name)\n - [With Default Models](#with-default-models)\n - [Fetching a list of papers](#fetching-a-list-of-papers)\n - [Examples](#examples)\n - [Contributing](#contributing)\n - [License](#license)\n\n## Installation\n\nMake sure you have Python 3.8 or later installed. Install the required dependencies using the following command:\n\nYou can use Arxiv Summarizer by simply doing\n```bash\npip install arxiv-summarizer\n```\n\nFor developers looking to tinker you can simply `git clone` this repository and use:\n```bash\npip install .\n```\n\n## Usage\n\n### As CLI\n\nArxiv Summarizer can be easily used as a CLI tool to get papers summarized... \n\n```sh\n$ python3 -m arxiv_summarizer 1234.56789v1\n```\n\n### With Custom SummarizationModel\n\nIf you have a custom `SummarizationModel` and `Tokenizer`, you can use them with `ArxivSummarizer` directly:\n\n```python\nfrom arxiv_summarizer import SummarizationModel, ArxivSummarizer\n\n# Initialize your custom SummarizationModel\ncustom_model = SummarizationModel(\n model=\"your_custom_model\", \n tokenizer=\"your_custom_tokenizer\", \n max_length=512, do_sample=True\n)\n\n# Initialize ArxivSummarizer with your custom model\nsummarizer = ArxivSummarizer(summarizer=custom_model)\n\n# Generate a summary\nsummary = summarizer(arxiv_id=\"1234.5678\")\nprint(summary)\n```\n\n### With Pre-trained Model by Name\n\nYou can use a pre-trained model from Hugging Face's model hub by specifying its name:\n\n```python\nfrom arxiv_summarizer import ArxivSummarizer\n\n# Initialize ArxivSummarizer with a pre-trained model by name\nsummarizer = ArxivSummarizer(model=\"facebook/bart-large-cnn\")\n\n# Generate a summary\nsummary = summarizer(arxiv_id=\"1234.5678\")\nprint(summary)\n```\n\n### With Default Models\n\nIf you don't provide a specific model, `ArxivSummarizer` will use default models based on GPU availability:\n\n```python\nfrom arxiv_summarizer import ArxivSummarizer\n\n# Initialize ArxivSummarizer with default models\nsummarizer = ArxivSummarizer()\n\n# Generate a summary\nsummary = summarizer(arxiv_id=\"1234.5678\")\nprint(summary)\n```\n\n### Fetching a list of papers\n\nFirst we can search a list of papers directly using the `fetch_paper()` definition.\n```python\nfrom rich.progress import Progress\nfrom rich.console import Console\nfrom rich.table import Table\n\nfrom typing import List\nfrom arxiv_summarizer.fetch_paper import fetch_paper, ArxivPaper\n\n# Get the list of papers\npapers = fetch_paper(\"Yoshua Bengio\", max_docs=15)\nresults : List[ArxivPaper] = [paper for paper in papers]\n\nprint(f\"{len(results)} Papers Found !!!\")\n```\n\nThis will load the papers, their metadata and their summaries. Now we can download the content of the paper and show the progress using a progressbar from `rich`.\n```python\n# Download the papers\nwith Progress() as progress:\n task = progress.add_task(\"[cyan] Downloading content...\", total = len(results))\n\n for index, paper in enumerate(results):\n progress.update(task, advance=1, description=f\"Downloading content for paper {paper.arxiv_id}\")\n _ = results[index].content # This will download the content automatically.\n```\n\nOnce all the content has been downloaded, we can display the content in a tabular structure using a `rich` Table.\n```python\n# Print the data\nconsole = Console()\n\ntable = Table(show_header=True, header_style=\"bold magenta\")\ntable.add_column(\"ID\", style=\"dim\")\ntable.add_column(\"Title\", style=\"dim\")\ntable.add_column(\"Authors\", style=\"dim\")\ntable.add_column(\"Content Size\", style=\"dim\")\n\nfor entry in results:\n entry:ArxivPaper\n table.add_row(entry.arxiv_id, entry.name, \", \".join(entry.authors), str(len(entry.content)))\n\nconsole.print(table)\n```\n\n```\n15 Papers Found !!!\nDownloading content for paper 1203.4416v1 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 100% 0:00:00\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 ID \u2503 Title \u2503 Authors \u2503 Content Size \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 1206.5533v2 \u2502 Practical recommendations for \u2502 Yoshua Bengio \u2502 134815 \u2502\n\u2502 \u2502 gradient-based training of deep \u2502 \u2502 \u2502\n\u2502 \u2502 architectures \u2502 \u2502 \u2502\n\u2502 1207.4404v1 \u2502 Better Mixing via Deep Representations \u2502 Yoshua Bengio, Gr\u00e9goire Mesnil, Yann \u2502 31767 \u2502\n\u2502 \u2502 \u2502 Dauphin, Salah Rifai \u2502 \u2502\n\u2502 1305.0445v2 \u2502 Deep Learning of Representations: Looking \u2502 Yoshua Bengio \u2502 121365 \u2502\n\u2502 \u2502 Forward \u2502 \u2502 \u2502\n\u2502 1212.2686v1 \u2502 Joint Training of Deep Boltzmann Machines \u2502 Ian Goodfellow, Aaron Courville, Yoshua \u2502 13806 \u2502\n\u2502 \u2502 \u2502 Bengio \u2502 \u2502\n\u2502 1703.07718v1 \u2502 Independently Controllable Features \u2502 Emmanuel Bengio, Valentin Thomas, Joelle \u2502 19385 \u2502\n\u2502 \u2502 \u2502 Pineau, Doina Precup, Yoshua Bengio \u2502 \u2502\n\u2502 1211.5063v2 \u2502 On the difficulty of training Recurrent \u2502 Razvan Pascanu, Tomas Mikolov, Yoshua \u2502 50908 \u2502\n\u2502 \u2502 Neural Networks \u2502 Bengio \u2502 \u2502\n\u2502 1206.5538v3 \u2502 Representation Learning: A Review and New \u2502 Yoshua Bengio, Aaron Courville, Pascal \u2502 194906 \u2502\n\u2502 \u2502 Perspectives \u2502 Vincent \u2502 \u2502\n\u2502 1207.0057v1 \u2502 Implicit Density Estimation by Local \u2502 Yoshua Bengio, Guillaume Alain, Salah \u2502 35635 \u2502\n\u2502 \u2502 Moment Matching to Sample from \u2502 Rifai \u2502 \u2502\n\u2502 \u2502 Auto-Encoders \u2502 \u2502 \u2502\n\u2502 1305.6663v4 \u2502 Generalized Denoising Auto-Encoders as \u2502 Yoshua Bengio, Li Yao, Guillaume Alain, \u2502 33769 \u2502\n\u2502 \u2502 Generative Models \u2502 Pascal Vincent \u2502 \u2502\n\u2502 1311.6184v4 \u2502 Bounding the Test Log-Likelihood of \u2502 Yoshua Bengio, Li Yao, Kyunghyun Cho \u2502 23711 \u2502\n\u2502 \u2502 Generative Models \u2502 \u2502 \u2502\n\u2502 1510.02777v2 \u2502 Early Inference in Energy-Based Models \u2502 Yoshua Bengio, Asja Fischer \u2502 26477 \u2502\n\u2502 \u2502 Approximates Back-Propagation \u2502 \u2502 \u2502\n\u2502 1509.05936v2 \u2502 STDP as presynaptic activity times rate of \u2502 Yoshua Bengio, Thomas Mesnard, Asja \u2502 22030 \u2502\n\u2502 \u2502 change of postsynaptic activity \u2502 Fischer, Saizheng Zhang, Yuhuai Wu \u2502 \u2502\n\u2502 1103.2832v1 \u2502 Autotagging music with conditional \u2502 Michael Mandel, Razvan Pascanu, Hugo \u2502 47698 \u2502\n\u2502 \u2502 restricted Boltzmann machines \u2502 Larochelle, Yoshua Bengio \u2502 \u2502\n\u2502 2007.15139v2 \u2502 Deriving Differential Target Propagation \u2502 Yoshua Bengio \u2502 63661 \u2502\n\u2502 \u2502 from Iterating Approximate Inverses \u2502 \u2502 \u2502\n\u2502 1203.4416v1 \u2502 On Training Deep Boltzmann Machines \u2502 Guillaume Desjardins, Aaron Courville, \u2502 20531 \u2502\n\u2502 \u2502 \u2502 Yoshua Bengio \u2502 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n## Examples\n\nFor more detailed examples, refer to the [Examples](examples/) directory.\n\n## Contributing\n\nContributions are welcome! Please refer to the [Contributing Guidelines](CONTRIBUTING.md) for details on how to contribute to this project.\n\n## License\n\nThis project is licensed under the [Apache](LICENSE).\n",
"bugtrack_url": null,
"license": "Apache",
"summary": "A happy toolkit for arxiv paper summarization and understanding.",
"version": "0.1.1",
"project_urls": {
"GitHub": "https://github.com/ArchanGhosh/Arxiv-Summarizer",
"Homepage": "https://github.com/ArchanGhosh/Arxiv-Summarizer"
},
"split_keywords": [
"arxiv",
"sdk",
"summarization",
"summary"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5fadfb5aef24bdb9b5e639a936da80f6804e185de5462d7b275769926a12f38a",
"md5": "a475a865a6124cd677812fa447375cb3",
"sha256": "a060643e1383d92ce785bf723644fa5e731b0a8bdb6e47e627a4a4b97b1694b6"
},
"downloads": -1,
"filename": "arxiv_summarizer-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a475a865a6124cd677812fa447375cb3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 18250,
"upload_time": "2023-12-27T06:34:09",
"upload_time_iso_8601": "2023-12-27T06:34:09.652225Z",
"url": "https://files.pythonhosted.org/packages/5f/ad/fb5aef24bdb9b5e639a936da80f6804e185de5462d7b275769926a12f38a/arxiv_summarizer-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5db7313acb1cd06701324c7d73fc0c4cbd6927e2c31348499a1771c31a70a30c",
"md5": "c50180b9d940c8e11aab42011300bd55",
"sha256": "f81b4b7edbaafd24249d4cce83004f4f988e822d5d5a603a68d807e7aec82365"
},
"downloads": -1,
"filename": "arxiv-summarizer-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "c50180b9d940c8e11aab42011300bd55",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19850,
"upload_time": "2023-12-27T06:34:11",
"upload_time_iso_8601": "2023-12-27T06:34:11.578073Z",
"url": "https://files.pythonhosted.org/packages/5d/b7/313acb1cd06701324c7d73fc0c4cbd6927e2c31348499a1771c31a70a30c/arxiv-summarizer-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-27 06:34:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ArchanGhosh",
"github_project": "Arxiv-Summarizer",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "arxiv-summarizer"
}