Привет, Хабр!
Объем информации растет с каждым днем, умение быстро извлекать суть из больших массивов данных становится мастхэв навыком. Библиотека 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).
ссылка на оригинал статьи https://habr.com/ru/articles/832940/
Добавить комментарий