Семантический поиск заголовков и текста статей
tldrstory — это приложение для семантического поиска заголовков и текстового контента, связанного с историями. tldrstory применяет нулевую маркировку к тексту, что позволяет динамически классифицировать контент. Эта платформа также создает индекс txtai, который позволяет выполнять поиск по сходству текста. Настраиваемое приложение Streamlit и серверная служба FastAPI позволяют пользователям просматривать и анализировать обрабатываемые данные.
У tldrstory есть соответствующая статья на Medium, в которой рассматриваются концепции этого README и многое другое. Проверьте это!
Следующие ссылки представляют собой примеры приложений, созданных с помощью tldrstory.
Самый простой способ установки — через pip и PyPI.
pip install tldrstory
Вы также можете установить tldrstory прямо с GitHub. Рекомендуется использовать виртуальную среду Python.
pip install git+https://github.com/neuml/tldrstory
Поддерживается Python 3.8+
Перейдите по этой ссылке, чтобы решить проблемы установки, связанные с конкретной средой.
После установки приложение необходимо настроить для запуска. Приложение tldrstory состоит из трех отдельных процессов:
В этом разделе будет показано, как запустить приложение «Новости спорта».
mkdir sports
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/app.yml -O sports/app.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/api.yml -O sports/api.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/index-simple.yml -O sports/index.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/src/python/tldrstory/app.py -O sports/app.py
python -m tldrstory.index sports/index.yml
CONFIG=sports/api.yml API_CLASS=tldrstory.api.API uvicorn " txtai.api:app " &
streamlit run sports/app.py sports/app.yml " Sports " " ? "
По умолчанию tldrstory поддерживает чтение данных из RSS и Reddit API. Дополнительные источники данных могут быть определены и настроены.
Ниже показан пример определения пользовательского источника данных. neuspo — это приложение для просмотра спортивных событий и новостей в режиме реального времени. Этот источник данных загружает 4 предопределенные записи в базу данных статей.
from tldrstory . source . source import Source
class Neuspo ( Source ):
"""
Articles have the following schema:
uid - unique id
source - source name
date - article date
title - article title
url - reference url for data
entry - entry date
"""
def run ( self ):
# List of articles created
articles = []
articles . append ( self . article ( "0" , "Neuspo" , self . now (), "Eagles defeat the Giants 22 - 21" ,
"https://neuspo.com/stream/34952e3919d685982c17735018b0197f" , self . now ()))
articles . append ( self . article ( "1" , "Neuspo" , self . now (), "Giants lose to the Eagles 22 - 21" ,
"https://t.co/e9FFgo0wgR?amp=1" , self . now ()))
articles . append ( self . article ( "2" , "Neuspo" , self . now (), "Rays beat Dodgers 6 to 4" ,
"https://neuspo.com/stream/6cb820b3ebadc086aa36b5cc4a0f575d" , self . now ()))
articles . append ( self . article ( "3" , "Neuspo" , self . now (), "Dodgers drop Game 2, 6-4" ,
"https://t.co/1hEQAShVnP?amp=1" , self . now ()))
return articles
Давайте повторим описанные выше шаги, используя neuspo в качестве источника данных. Сначала удалите каталог Sports/data, чтобы гарантировать создание новой базы данных. Затем мы можем загрузить приведенную выше суть в спортивный каталог.
# Delete the sports/data directory before running
wget https://gist.githubusercontent.com/davidmezzetti/9a6064d9a741acb89bd46eba9f906c26/raw/7058e97da82571005b2654b4ab908f25b9a04fe2/neuspo.py -O sports/neuspo.py
Отредактируйте файл Sports/index.yml и удалите раздел RSS. Замените его следующим.
# Custom data source for neuspo
source : sports.neuspo.Neuspo
Теперь повторите шаги 2–4 из инструкций выше.
В следующих разделах определяются параметры конфигурации для каждого процесса, который является частью приложения tldrstory.
Настраивает индексацию контента. В настоящее время поддерживается извлечение данных через Reddit API, RSS и пользовательские источники.
name : string
Имя приложения
schedule : string
Строка в стиле Cron, обеспечивающая запланированный запуск задания индексирования. См. эту ссылку для получения дополнительной информации о строках cron.
Конфигурация источника данных.
reddit.subreddit : name of subreddit to pull from
reddit.sort : sort type
reddit.time : time range
reddit.queries : list of text queries to run
Выполняет серию запросов Reddit API. Для работы этого метода необходимо создать и настроить ключ Reddit API. Параметры аутентификации можно установить в среде или в файле praw.ini. См. эту ссылку для получения дополнительной информации о настройке учетной записи Reddit API. Все, что необходимо, — это доступ только для чтения.
Дополнительные сведения о настройке параметров запроса см. в документации PRAW.
rss : list of RSS urls
Читает серию RSS-каналов и создает статьи для каждой найденной ссылки на статью.
source : string
Настраивает пользовательский источник. Этот параметр принимает полный путь к классу в виде строки, например «tldrstory.source.rss.RSS».
Пользовательские источники могут использовать любые данные, имеющие дату, текстовую строку и URL-адрес ссылки. См. документацию в source.py для получения информации о том, как создать собственный источник. rss.py и reddit.py — примеры реализации.
ignore : list of url patterns
Список шаблонов URL, которые следует игнорировать. Поддерживает строки и регулярные выражения.
labels : dict
Конфигурация метки для классификатора нулевого выстрела. Эта конфигурация устанавливает категорию вместе со списком значений темы.
Пример:
labels :
topic :
values : [Label 1, Label 2]
В приведенном выше примере категория «Тема» настраивается с двумя возможными метками: «Ярлык 1» и «Ярлык 2». Здесь можно установить любую метку, и для классификации входного текста по этим меткам будет использоваться крупномасштабная модель НЛП.
path : string
Где хранить выходные данные модели, будет создан путь, если он еще не существует.
embeddings : dict
Настраивает индекс txtai, используемый для поиска тем. Дополнительную информацию см. в настройке txtai.
Настраивает интерфейс с поддержкой FastAPI для получения индексированных данных.
path : string
Путь к индексу модели.
Приложение по умолчанию работает на базе Streamlit и управляется файлом конфигурации YAML. В файле конфигурации задается имя приложения, конечная точка API для получения контента и конфигурация компонента. Вместо этого можно использовать собственное приложение Streamlit или любое другое приложение для непосредственного извлечения контента из конечной точки API.
name : string
Имя приложения
api : url
Конечная точка API для получения контента.
description : string
Строка Markdown, которая используется для создания описания боковой панели.
queries.name : Queries drop down header
queries.values : List of values to use for queries drop down
Настраивает раскрывающийся список запроса. Это должен быть список заранее подготовленных запросов для использования. Если присутствует значение «Последние», будут запрошены последние N статей. Если присутствует значение «--Search--», появится другое текстовое поле, позволяющее вводить пользовательские запросы.
filters : list
Список фильтров слайдера. Это должно соответствовать меткам нулевого выстрела, настроенным в разделе индексирования.
chart.name : Chart name
chart.x : Chart x-axis column
chart.y : Chart y-axis column
chart.scale : Color scale for list of colors
chart.colors : List of colors
Позволяет настроить диаграмму рассеяния, отображающую две точки надписей. Эту диаграмму можно использовать для построения графиков и применения цвета к нанесенным меткам.
" column name " : dynamic range of coloring
Таблица данных, показывающая подробности результатов. Помимо столбцов по умолчанию, этот раздел позволяет добавлять дополнительные столбцы на основе примененных меток нулевого выстрела. По умолчанию отображается числовое значение метки, но можно также применить диапазон текстовых меток.
Например:
Приведенное выше выведет текст «Ярлык 1» красным цветом для значений от 0 до 5. Значения от 5 до 10 выведут текст «Ярлык 2» зеленым цветом.