От текста к краткому изложению: библиотека Sumy
Привет, Хабр!
Объем информации растет с каждым днем, умение быстро извлекать суть из больших массивов данных становится мастхэв навыком. Библиотека Sumy справляется с этой задачей на ура, предоставляя возможность получать сжатые и четкие версии длинных текстов.
Sumy — это инструмент для автоматического обобщения текстов на Python. В основе работы лежит задача резюмирования текста, которая позволяет получать краткие и четкие версии больших объемов информации.
Установим:
pip install sumy
Основные фичи Sumy:
Sumy поддерживает несколько методов обобщения, включая LSA, TextRank и LexRank.
С минимальным количеством кода можно начать обобщение текста довольно быстро.
Sumy легко интегрируется с другими Python-библиотеками.
Помимо английского, Sumy также предоставляет поддержку для русского языка.
Основной синтаксис
Перед началом работы необходимо импортировать необходимые модули. Базовый шаблон, который используется в большинстве случаев:
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lsa import LsaSummarizer
from sumy.summarizers.text_rank import TextRankSummarizer
Парсеры преобразуют текст в формат, который можно использовать для резюмирования.
В Sumy доступны четыре основных парсера для работы с текстом:
PlaintextParser
: для обработки простых текстов и строк. Хорош для работы с обычными текстовыми файлами.HtmlParser
: для извлечения текста из HTML-документов и веб-страниц.JsonParser
: для обработки текста из JSON-структур.DocxParser
: для извлечения текста из документов Microsoft Word.
ПримерPlaintextParser
:
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
text = """Текст, который вы хотите резюмировать. Он может быть довольно длинным и содержать множество предложений."""
parser = PlaintextParser.from_string(text, Tokenizer("russian"))
Для работы с HTML-контентом:
from sumy.parsers.html import HtmlParser
url = "http://example.com"
parser = HtmlParser.from_url(url, Tokenizer("russian"))
Токенизаторы делят текст на предложения и слова. Для русского языка чаще всего используется Tokenizer("russian")
. Однако можно юзать стандартные токенизаторы NLTK для большего контроля:
from sumy.nlp.tokenizers import Tokenizer
tokenizer = Tokenizer("russian")
Применение алгоритмов выглядит следующим образом, напомню, что поддерживаются эти: Latent Semantic Analysis, TextRank, LexRank и LsaSummarizer.
LSA:
from sumy.summarizers.lsa import LsaSummarizer
summarizer = LsaSummarizer()
summary = summarizer(parser.document, 3) # получить 3 предложения
for sentence in summary:
print(sentence)
TextRank:
from sumy.summarizers.text_rank import TextRankSummarizer
summarizer = TextRankSummarizer()
summary = summarizer(parser.document, 3) # получить 3 предложения
for sentence in summary:
print(sentence)
Можно также указать количество предложений, которые хочется получить в резюме. Это делается при вызове метода суммаризатора:
summary = summarizer(parser.document, 2) # получить 2 предложения
Примеры применения
Обобщение новостных статей
Допустим, нужно создать краткие резюме для новостных статей, чтобы можно было быстро ознакомиться с основными событиями дня. Sumy идеально вписывается в это, т.к позволяет извлекать ключевые предложения и идеи из длинных текстов:
from sumy.parsers.html import HtmlParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lsa import LsaSummarizer
# URL новостной статьи
url = "https://example-news-site.com/article"
# инициализация парсера и суммаризатора
parser = HtmlParser.from_url(url, Tokenizer("english"))
summarizer = LsaSummarizer()
# генерация резюме
summary = summarizer(parser.document, 3) # получить 3 предложения
print("Краткое резюме статьи:")
for sentence in summary:
print(sentence)
Используем HtmlParser для загрузки новостной статьи по URL и LsaSummarizer для создания краткого резюме, состоящего из трех предложений.
Анализ отчетов
Часто требуется быстро ознакомиться с длинными отчетами или теми же исследовательскими работами.
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.text_rank import TextRankSummarizer
# исходный текст научного отчета
text = """В этом исследовании мы анализируем влияние изменения климата на экосистемы.
Используются различные методы для оценки изменений температуры и уровня осадков.
Результаты показывают значительное влияние на растительность и животный мир."""
# инициализация парсера и суммаризатора
parser = PlaintextParser.from_string(text, Tokenizer("english"))
summarizer = TextRankSummarizer()
# генерация резюме
summary = summarizer(parser.document, 2) # получить 2 предложения
print("Краткое резюме отчета:")
for sentence in summary:
print(sentence)
Используем PlaintextParser для работы с текстовым содержимым научного отчета и TextRankSummarizer для получения краткого резюме, содержащего два предложения.
Обработка отзывов пользователей
Sumy позволяет извлекать общие мнения и выявлять основные тенденции в отзывах.
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lex_rank import LexRankSummarizer
# исходные отзывы пользователей
text = """Этот продукт превосходен! Он оправдал все мои ожидания.
Мне не понравилось качество упаковки, но сам продукт отличного качества.
Рекомендую всем, кто ищет надежный товар."""
# инициализация парсера и суммаризатора
parser = PlaintextParser.from_string(text, Tokenizer("english"))
summarizer = LexRankSummarizer()
# генерация резюме
summary = summarizer(parser.document, 2) # получить 2 предложения
print("Краткое резюме отзывов:")
for sentence in summary:
print(sentence)
Используем LexRankSummarizer для обработки текстов отзывов и создания резюме, состоящего из двух предложений.
Подробнее с библиотекой можно ознакомиться здесь.
А напоследок хочу пригласить вас на бесплатный вебинар, где вы узнаете, что такое RAG, зачем это нужно в NLP сервисах и в каких областях применяется эта технология. Помимо этого мы рассмотрим типы RAG, методы оценки качества RAG сервиса и практический пример на задаче Question Answering (QA).