recs-searcher


Namerecs-searcher JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://github.com/sheriff1max/recs-searcher
SummarySearch engine and registry error corrector
upload_time2024-05-12 15:21:30
maintainerNone
docs_urlNone
authorsheriff1max
requires_python>=3.10
licenseNone
keywords python searcher corrector faiss chroma-bd embeddings
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div align="center">

[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/sheriff1max/recs-searcher/.github/workflows/python-app.yml)](https://github.com/sheriff1max/recs-searcher/actions/workflows/python-app.yaml)
[![Read the docs](https://img.shields.io/readthedocs/recs-searcher)](https://recs-searcher.readthedocs.io/ru/latest/)

[![PyPI](https://img.shields.io/pypi/v/recs-searcher?color=blue&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/recs-searcher/) 
[![PyPI - Downloads](https://img.shields.io/pypi/dm/recs-searcher?style=for-the-badge&color=blue)](https://pepy.tech/project/recs-searcher) 
<br>
</div>

# recs-searcher — библиотека для поиска похожих текстов
Библиотека позволяет находить похожие на пользовательский ввод тексты из датасета.

### Содержание
 1. [Проблематика](#problems)
 2. [Особенности библиотеки](#features)
 3. [Установка](#install)
 4. [Примеры применения](#examples) 

### Проблематика <a name="problems"></a>
Пользовательский ввод может содержать как орфографические, так и реестровые ошибки.

Рассмотрим самые частые ошибки:
- используются сокращения или полные формы слова: `«Литературный институт имени А.М. Горького»` || `«Литературный институт им. А.М. Горького»`;
- пропущены либо добавлены слова: `«Литературный институт имени А.М. Горького»` || `«Институт имени А.М.Горького»`;
- пропущены либо добавлены дополнительные символы: `«Сибирский федеральный университет»` || `«Сибрский федерааальный универ»`;
- слова могут быть в не правильном порядке: `Институт космических и информационных технологий` || `Институт информационных и космических технологий`.

Данные проблемы помогает решить разработанный модуль `recs-searcher (registry error correction system - searcher)`, основанный на известных NLP-алгоритмах.

### Особенности библиотеки: <a name="features"></a>
 - модуль универсален для любого датасета;
 - содержит API для использования библиотеки;
 - содержит множество подмодулей алгоритмов для оптимизации задачи, из которых строится pipeline (предобработка текста, модели для создания эмбеддингов, алгоритмы для эффективного сравнения эмбеддингов, аугментация текста для оценки обученного pipeline);
 - возможность интерпретировать результаты обученных pipeline;
 - масштабирование библиотеки благодаря имеющимся абстрактным классам.

### Установка <a name="install"></a>

```commandline
pip install recs-searcher
```

### Примеры применения <a name="examples"></a>

1. Соберём pipeline:
```python
from recs_searcher import (
    dataset,  # учебные датасеты
    preprocessing,  # предобработка текста
    embeddings,  # преобразование текста в эмбеддинги
    similarity_search,  # быстрые поисковики в пространстве эмбеддингов
    augmentation,  # аугментация текста для валидации пайплайнов
    explain,  # интерпретация сходства двух текстов
    api,  # Пайплайн
)

model_embedding = embeddings.CountVectorizerWrapperEmbedding(
    analyzer='char',
    ngram_range=(1, 2),
)

pipeline = api.Pipeline(
    dataset=['Красноярск', 'Москва', 'Владивосток'],
    preprocessing=[preprocessing.TextLower()],
    model=model_embedding,
    searcher=similarity_search.FaissSearch,
    verbose=True,
)
# Pipeline ready!
```

2. Найдём 3 схожих текстов в базе данных на пользовательский ввод "Красный ярск":
```python
pipeline.search('Красный ярск', 3, ascending=True)
# return: pandas.DataFrame
```

[Документация](https://recs-searcher.readthedocs.io/ru/latest/).

Более подробные примеры кода [API](https://github.com/sheriff1max/recs-searcher/blob/master/notebooks/tutorial_rus.ipynb).

Пример [WEB-интерфейса](https://github.com/sheriff1max/web-recs-searcher), в который внедрена данная библиотека.

### Автор
- [Кобелев Максим](https://github.com/sheriff1max) — автор и единственный разработчик.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/sheriff1max/recs-searcher",
    "name": "recs-searcher",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "python searcher corrector faiss chroma-bd embeddings",
    "author": "sheriff1max",
    "author_email": "kobelevmaxim48@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/6a/fb/300d578631f375d1517ddc39209c20b83466dd3ad1109feb972820ea5dc5/recs-searcher-0.1.1.tar.gz",
    "platform": null,
    "description": "<div align=\"center\">\r\n\r\n[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/sheriff1max/recs-searcher/.github/workflows/python-app.yml)](https://github.com/sheriff1max/recs-searcher/actions/workflows/python-app.yaml)\r\n[![Read the docs](https://img.shields.io/readthedocs/recs-searcher)](https://recs-searcher.readthedocs.io/ru/latest/)\r\n\r\n[![PyPI](https://img.shields.io/pypi/v/recs-searcher?color=blue&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/recs-searcher/) \r\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/recs-searcher?style=for-the-badge&color=blue)](https://pepy.tech/project/recs-searcher) \r\n<br>\r\n</div>\r\n\r\n# recs-searcher \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\r\n\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u044b \u0438\u0437 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.\r\n\r\n### \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\r\n 1. [\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430](#problems)\r\n 2. [\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438](#features)\r\n 3. [\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430](#install)\r\n 4. [\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f](#examples) \r\n\r\n### \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 <a name=\"problems\"></a>\r\n\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0432\u0432\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435, \u0442\u0430\u043a \u0438 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438.\r\n\r\n\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0430\u043c\u044b\u0435 \u0447\u0430\u0441\u0442\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438:\r\n- \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0441\u043b\u043e\u0432\u0430: `\u00ab\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0438\u043c\u0435\u043d\u0438 \u0410.\u041c. \u0413\u043e\u0440\u044c\u043a\u043e\u0433\u043e\u00bb` || `\u00ab\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0438\u043c. \u0410.\u041c. \u0413\u043e\u0440\u044c\u043a\u043e\u0433\u043e\u00bb`;\r\n- \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u043b\u0438\u0431\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u043b\u043e\u0432\u0430: `\u00ab\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0438\u043c\u0435\u043d\u0438 \u0410.\u041c. \u0413\u043e\u0440\u044c\u043a\u043e\u0433\u043e\u00bb` || `\u00ab\u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0438\u043c\u0435\u043d\u0438 \u0410.\u041c.\u0413\u043e\u0440\u044c\u043a\u043e\u0433\u043e\u00bb`;\r\n- \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u043b\u0438\u0431\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b: `\u00ab\u0421\u0438\u0431\u0438\u0440\u0441\u043a\u0438\u0439 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u00bb` || `\u00ab\u0421\u0438\u0431\u0440\u0441\u043a\u0438\u0439 \u0444\u0435\u0434\u0435\u0440\u0430\u0430\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u00bb`;\r\n- \u0441\u043b\u043e\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432 \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435: `\u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439` || `\u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0438 \u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439`.\r\n\r\n\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c `recs-searcher (registry error correction system - searcher)`, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 NLP-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445.\r\n\r\n### \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: <a name=\"features\"></a>\r\n - \u043c\u043e\u0434\u0443\u043b\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430;\r\n - \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 API \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438;\r\n - \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f pipeline (\u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430, \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432, \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e pipeline);\r\n - \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0445 pipeline;\r\n - \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u0430\u043c.\r\n\r\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 <a name=\"install\"></a>\r\n\r\n```commandline\r\npip install recs-searcher\r\n```\r\n\r\n### \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f <a name=\"examples\"></a>\r\n\r\n1. \u0421\u043e\u0431\u0435\u0440\u0451\u043c pipeline:\r\n```python\r\nfrom recs_searcher import (\r\n    dataset,  # \u0443\u0447\u0435\u0431\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b\r\n    preprocessing,  # \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430\r\n    embeddings,  # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438\r\n    similarity_search,  # \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a\u0438 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432\r\n    augmentation,  # \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432\r\n    explain,  # \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 \u0434\u0432\u0443\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\r\n    api,  # \u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\r\n)\r\n\r\nmodel_embedding = embeddings.CountVectorizerWrapperEmbedding(\r\n    analyzer='char',\r\n    ngram_range=(1, 2),\r\n)\r\n\r\npipeline = api.Pipeline(\r\n    dataset=['\u041a\u0440\u0430\u0441\u043d\u043e\u044f\u0440\u0441\u043a', '\u041c\u043e\u0441\u043a\u0432\u0430', '\u0412\u043b\u0430\u0434\u0438\u0432\u043e\u0441\u0442\u043e\u043a'],\r\n    preprocessing=[preprocessing.TextLower()],\r\n    model=model_embedding,\r\n    searcher=similarity_search.FaissSearch,\r\n    verbose=True,\r\n)\r\n# Pipeline ready!\r\n```\r\n\r\n2. \u041d\u0430\u0439\u0434\u0451\u043c 3 \u0441\u0445\u043e\u0436\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0432\u0432\u043e\u0434 \"\u041a\u0440\u0430\u0441\u043d\u044b\u0439 \u044f\u0440\u0441\u043a\":\r\n```python\r\npipeline.search('\u041a\u0440\u0430\u0441\u043d\u044b\u0439 \u044f\u0440\u0441\u043a', 3, ascending=True)\r\n# return: pandas.DataFrame\r\n```\r\n\r\n[\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](https://recs-searcher.readthedocs.io/ru/latest/).\r\n\r\n\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 [API](https://github.com/sheriff1max/recs-searcher/blob/master/notebooks/tutorial_rus.ipynb).\r\n\r\n\u041f\u0440\u0438\u043c\u0435\u0440 [WEB-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430](https://github.com/sheriff1max/web-recs-searcher), \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.\r\n\r\n### \u0410\u0432\u0442\u043e\u0440\r\n- [\u041a\u043e\u0431\u0435\u043b\u0435\u0432 \u041c\u0430\u043a\u0441\u0438\u043c](https://github.com/sheriff1max) \u2014 \u0430\u0432\u0442\u043e\u0440 \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Search engine and registry error corrector",
    "version": "0.1.1",
    "project_urls": {
        "Bug tracker": "https://github.com/sheriff1max/recs-searcher/issues",
        "Homepage": "https://github.com/sheriff1max/recs-searcher"
    },
    "split_keywords": [
        "python",
        "searcher",
        "corrector",
        "faiss",
        "chroma-bd",
        "embeddings"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "28e85df32b18b42a113015af0c7b87c5551bce81bdd3d82544d7597432f40ad4",
                "md5": "7f8d525659ae5e96b3eb8e2210401029",
                "sha256": "1967a5efdae9215ae672a789b426e0d0e24d76e2d5a707592635e653badb9396"
            },
            "downloads": -1,
            "filename": "recs_searcher-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7f8d525659ae5e96b3eb8e2210401029",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 733704,
            "upload_time": "2024-05-12T15:21:28",
            "upload_time_iso_8601": "2024-05-12T15:21:28.638143Z",
            "url": "https://files.pythonhosted.org/packages/28/e8/5df32b18b42a113015af0c7b87c5551bce81bdd3d82544d7597432f40ad4/recs_searcher-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6afb300d578631f375d1517ddc39209c20b83466dd3ad1109feb972820ea5dc5",
                "md5": "9f6ef071ba51b2d5f546a8dcef2367ce",
                "sha256": "d0d54bcc1a5c17b9acb952f5f2a054f050535bab99c2ff17ee6b18ccdcb2b03c"
            },
            "downloads": -1,
            "filename": "recs-searcher-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "9f6ef071ba51b2d5f546a8dcef2367ce",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 683515,
            "upload_time": "2024-05-12T15:21:30",
            "upload_time_iso_8601": "2024-05-12T15:21:30.859074Z",
            "url": "https://files.pythonhosted.org/packages/6a/fb/300d578631f375d1517ddc39209c20b83466dd3ad1109feb972820ea5dc5/recs-searcher-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-12 15:21:30",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "sheriff1max",
    "github_project": "recs-searcher",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "recs-searcher"
}
        
Elapsed time: 0.42275s