Обновить

Вайбкодинг – не для гуманитариев? Юрист сделал кривой поиск по PDF и просит помощи…

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели6.2K
Всего голосов 7: ↑6 и ↓1+5
Комментарии21

Комментарии 21

Уже не первый раз наблюдаю, что восторг от использования ИИ возникает у пользователей на ровном месте от того, что они не в курсе возможностей, которые давно существуют без всякого ИИ.

Открыл справку Acrobat - прекрасно он ищет по нескольким файлам одновременно, решая Вашу задачу (у меня не Acrobat, а PDF-XChange, там такое тоже, само собой, есть) Единственное в Вашем случае надо посмотреть, будет ли он гласные с ударениями искать по запросу, в котором эти же гласные без ударений (если нет - самым простым решением кажется создать копии словарей для поиска, в которых простым поиском-заменой все ударения убрать).

Ну а если уж кодить своё - PDFки там с текстовым слоем, загнать всё в одну БД элементарно, искать будет как угодно гибко и быстро. Но учитывая Ваши вопросы... лучше попросите кого-то помочь. ИИ нынче замечательно умел, но навык постановки корректного ТЗ никто не отменял.

Сразу скажу: ваш сын-подросток был прав лишь отчасти. Вы не «не программист», вы просто столкнулись с классической проблемой: браузерный JavaScript не предназначен для тяжелой работы с большими PDF-файлами «на лету».

То, что вы пытаетесь сделать (парсить 5 огромных словарей прямо в браузере при каждой загрузке страницы) — это как пытаться перемолоть зерно кофемолкой прямо в чашке, вместо того чтобы сделать муку заранее на кухне. Отсюда и минута загрузки, и глючный поиск по ударениям.

Вот вам дельный совет, как решить задачу быстро, бесплатно и без глубокого знания Python, используя силу сообщества и правильные инструменты.

Решение проблемы №1: Скорость (Не парсить в браузере!)

ИИ был абсолютно прав насчет Python, но вам не обязательно быть программистом, чтобы это реализовать. Суть: Вам нужно один раз превратить эти 5 PDF в один легкий текстовый файл (JSON), где каждое слово связано со страницей и названием словаря. Этот файл будет весить пару мегабайт и загружаться мгновенно.

Как это сделать (инструкция для «гуманитария»):

  1. Найдите любого знакомого питониста (или напишите в чаты Хабра/Telegram-чаты по Python с просьбой: «Нужен скрипт на 20 строк, чтобы выгрузить текст из 5 PDF в JSON с номерами страниц»). Это задача на 15 минут для новичка.

  2. Если совсем нет контактов, используйте бесплатные онлайн-конвертеры PDF в TXT/JSON (но они могут потерять нумерацию страниц, поэтому скрипт надежнее).

  3. Полученный файл dictionaries.json залейте на свой сайт рядом с HTML-страницей.

Результат: Ваш сайт будет искать по тысячам слов за 0.1 секунды, потому что он будет искать по готовому тексту, а не читать тяжелые PDF каждый раз.

Решение проблемы №2: Ударения (Ё и знаки ударения)

Проблема в том, что компьютер видит о и ó как разные символы. Решение: Нужно добавить в код поиска функцию нормализации. Попросите ИИ (или того же подростка) добавить в код вот такую логику перед поиском:

«Заменяй все буквы с ударением на обычные буквы без ударения и в запросе пользователя, и в базе данных перед сравнением».

Пример логики (псевдокод):

function normalize(text) {
    return text.toLowerCase()
        .replace(/́|̀|̂|/g, '') // убираем знаки ударения
        .replace(/ё/g, 'е');    // заменяем ё на е (опционально)
}

Тогда поиск по ОВЕРСАЙЗ найдет и Оверса́йз, и оверсайз.

Готовое решение «под ключ» (без программирования)

Если возиться с кодом совсем не хочется, есть альтернативный путь, который используют библиотеки:

  1. Используйте готовый виджет поиска по документам. Сервисы вроде Algolia DocSearch (бесплатно для открытых проектов) или даже обычный Google Custom Search можно настроить так, чтобы они индексировали ваши PDF-файлы, лежащие на сайте.

    • Плюс: Не надо писать код, поиск умный (понимает опечатки, ударения).

    • Минус: Нужно, чтобы файлы были доступны роботам индексации.

  2. Сделайте простую таблицу в Google Sheets / Excel. Да, серьезно.

    • Скопируйте данные из PDF в одну большую таблицу (Колонка А: Слово, Колонка Б: Словарь, Колонка В: Страница).

    • Опубликуйте таблицу в вебе или используйте форму поиска по ней.

    • Поиск в Excel работает мгновенно и игнорирует форматирование. Для доказательства проверяющим этого часто достаточно.

Что ответить сыну и как продолжить?

Скажите сыну: «Ты прав, в браузере это делать тяжело. Но мы сделаем хитрее: подготовим данные заранее».

Мой вердикт: Не бросайте затею! Задача очень полезная и актуальная (особенно с новыми законами о языке).

  1. Остановите «вайбкодинг» в браузере. Текущий путь тупиковый из-за производительности.

  2. Найдите исполнителя на этап конвертации PDF -> JSON. Это единственное узкое место. Напишите пост на Хабре с заголовком: «Нужна помощь: скрипт на Python для конвертации 5 лингвистических PDF в JSON для быстрого поиска». Вам помогут за час.

  3. Вернитесь к своему HTML-коду. Подключите готовый JSON-файл и добавьте функцию удаления ударений.

Это будет работать быстро, четко и позволит вам легко доказывать правомерность использования слов вроде «кэш» или «оверсайз». Удачи, проект стоящий!

Это задача на 15 минут для новичка.

Ну точно не на 15 минут. Словари толком не структурированы, кроме собственно словарной части ещё всякие введения/сокращения/пр., которые надо отбрасывать, причём в 4 разных словарях эта структура разная. Разбиение на словарные статьи делать придётся только по форматированию (PDF же), тоже 4 разных алгоритма. Есть статьи, где несколько вариантов слова в одной статье (в словаре "выставля́ть(ся)", надо чтобы находил по поисковой строке "выставляться", наверняка ещё и другие подобные нюансы найдутся) Ударения не проверял, но их обычно в кириллице делают двумя способами - правильным (два юникодных символа) и простым (один символ из латиницы, пишущийся аналогично), надо учитывать обе возможности. А ещё бы по всем словоформам потом искать... и обновлять как-то это всё, если словари на оф. сайте обновятся.

P.S. Повеселило в официально (!) опубликованном словаре 32 вхождения фразы "Error! Bookmark not defined". Делали в Ворде, публиковали не приходя в сознание... мда.

Спасибо за ваше участие.

По этому решению - да, сделано, но работает криво. И видимо по тем причинам, как описано в статье и комментариях выше.

Попробуем найти слово «кэшбэк»

Скриншот с Грамота.ру
Скриншот с Грамота.ру

А слово есть в словаре

Орфоэпический словарь
Орфоэпический словарь

Видимо из-за используемых в файле символов скобок и ударений ищет только вариант кЕшбэк через Е, хотя в словаре есть два варианта слова - через Е и Э.

А вопрос в юридической плоскости означает - оштрафуют юрлицо на полмиллиона или нет? Переделывать вывески или оставить?

Хочется найти решение, чтобы поиск работал корректно.

В моем временном решении кэшбэк нашелся

Конкретно с кэшбэком я вижу ошибку в словаре. В именительном падеже Е, в родительном почему-то Э (второе Э после \\ относится в произношению, а не написанию, с ним всё ОК). Хотя во введении к словарю прямо написано, что через запятую до \\ указываются только словоформы, в которых ударение может падать по-разному, но никак не разные варианты написания.

Если бы я делал свой поиск - у меня бы кэшбэк через Э тоже не нашёлся by design.

P.S. Я особо не погружался в эту тему, но, насколько я понимаю, ответственность наступает за использование слов, отсутствующих в словарях, а не за написание имеющихся в словарях слов с орфографическими ошибками. Поэтому, даже если бы в словаре был везде только кешбэк через Е - за написание кэшбэк через Э ответственности нет. А отсюда вытекает ещё одно требование к ТЗ для поиска - неплохо бы находить не только буквальные вхождения искомых слов, но и все похожие слова...

а негуманитариям (технарям то есть) зачем вайбкодинг если они могут научится программировать? ну кроме каких то набросок кусков кода чтобы в стековерфлов не искать - типа примера поиска по pdf

Скажите, стоит мне дальше мучать ИИ и продолжать описывать свои мучения (подозреваю, что для специалистов может выглядеть смешно) или подросток, не верящий в силу интеллекта родителя и искусственных интеллектов был прав?

То что вы написали, это вовсе не смешно, а в некоторой степени даже грустно. К сожалению, это весьма распространённое сейчас заблуждение, то есть типичный современный пользователь думает так: "Это второй мозг, он даст мне экспертные ответы на мои вопросы" и т.п. Сейчас я работаю над книгой по теме продуктивного использования нейросетей, и в процессе сбора материала и интервью с пользователями, постоянно сталкиваюсь с таким крайне порочным и ошибочным мышлением. В реальности, продуктивное использование моделей сводится приблизительно к следующему: оператор-эксперт делает работу, модель помогает решать рутинные задачи, например быстро набрать материал для исследования, предложить структуру, черновик, версии... Эксперт анализирует полученную информацию и на основании своего (ключевое слово "своего") опыта и уровня, делает выводы и итоговое заключение. Если проще, то могу вам дать что-то типа "аксиомы", которую всегда стоит помнить при общении с любой моделью нейросети: "Мусор на входе=мусор на выходе". В профессиональной среде, это выражение используется несколько в другом контексте, но в этом ответе я использую его в самом широком смысле. Просто помните это и любая сессия работы с моделью будет проходить продуктивней. Конкретный ответ на Ваш вопрос: "ИИ имело бы смысл помучать в том случае, если бы у вас был технический бэкграунд для того, чтобы решить эту задачу вручную". Желаю Вам достигнуть своей цели. Лучший вариант для вас это привлечь специалиста (быстро), или самому "учить матчасть", как некоторые любят говорить (долго). По поводу того, что вы гуманитарий, можете нисколько не расстраиваться, из среды гуманитариев есть много прекрасных программистов и ИТ-инженеров. Вопрос только в желании.

Заинтриговали книгой. Где следить за релизом? Может черновик уже есть в доступе?

Честно говоря даже не знаю, как ответить на ваш вопрос. Думаю к лету закончить вычитку, "вылежку" и редактуру, а вот где и в каком виде выпускать - будет зависеть от того, что будет происходить в этой стране к тому времени. Думаю, вы понимаете о чём я. Изначально планировалась "цифра" для Amazon, а вот что будет теперь....вопрос даже для меня пока открытый.

Можно попробовать загрузить pdf прямо в чат или в "базу знаний" (может, придётся кусочками) и попросить 1) написать парсер pdf , распознающий ударения 2) протестировать на фактическом pdf 3) спрарсить pdf в json 4) выдать json

Например, cash - можно использовать на русском как кэш, а не переводить как тайник или склад, поскольку в Словарь иностранных слов это слово уже включено.

Есть два слова в английском с одинаковым звучанием, но разным написанием и смыслом.
У Вас в этом абзаце и на последующем скриншоте РАЗНЫЕ слова.

cash - наличные деньги, больше сленговый термин в русском языке, но достаточно распространен
cache - вот тот самый "склад" и распространённый компьютерный термин о котором шла речь.

Спасибо большое. Внес исправление в текст.

О! Ага!

Я недавно решал задачу парсинга одного из этих pdf -- Орфографического словаря -- выбирал термины для обучения microgpt (и уже начал писать статью на Хабре на эту тему -- название "Чудим по-русски: как я c нуля обучал microgpt придумывать «русские слова»").

Код для парсинга писали Qwen и DeepSeek, в т.ч. сделать список с ударениями и без ударений. Написал код в несколько заходов, однако, как протестировать на то, все ли слова корректно выбрались, пока не придумал (но мне и не нужны были абсолютно все слова, спарсил около 140 тысяч, по количеству листов и слов на листе, прикинул, что очень близко к реальному количеству). Единственное, я ограничивал все слова и сочетания слов 16 символами, а то там есть очень длинные...

Я вброшу не совсем по теме, но как из того, что понял, проблема в изначально не верном подходе.

Не имея экспертизы, вы принялись решать "что-то", "каким-то" способом, который вам первый пришел на ум. Это стандарт ная проблема начинающих и людей со стороны. И это то, от чего я пытаюсь уже с пол года отучить подконтрольного мне джуна.

Нейронка же с радостью взялась реализовывать ваши задачи.

Подход должен быть с максимальной высоты - вниз, не наоборот и не с середины. Какая проблема? Когда она считается решенной? Что я имею из ресурсов? Какие есть подходы к решению? Их плюсы минусы? Вот только где то тут начинается выбор технологий для решения.

Можно загрузить в какую-нить базу данных и работать уже с индексированным текстом. В Postgres (скорее всего в MySQL тоже) можно настроить collation таким образом, чтобы он при поиске считал буквы с ударениями и без ударений одинаковыми. Тут даже замены никакой при вставке в базу делать не нужно. Ну и с базой работать можно будет уже удобными инструментами.

Не поде́литесь, как можно несколько гигантских PDF с разным (в общем случае) форматированием — загрузить в базу? Где эта база будет физически размещена?

Если это реально нужно - должно быть готовое, просто поищите.

Если готового нету - надо пилить и как-то монетизировать потом. Задача для упорного школьника вполне посильная. Яб когда был школьником смог бы.

Но, боюсь, чатботы лучше вообще не использовать на текущем этапе. Они с большим энтузиазмом изготавливают какой-то адский треш.

И да, вариант тут только один: единожды всё распарсить в свою базу и потом уже по ней искать.

Серьезный вопрос тут только один: как будете проверять, что спарсили всё верно...

Если на кону пол миллиона, может проще всё-таки пять раз поискать :)?

Смотрите, можно было обойтись вообще без этого, объединить 5 пдф в один через конвектор, и спокойно пользоваться запрограммированым задолго до вас встроеным поиском (сайты конвекторов, бесплатны и лежат в открытом доступе). По поводу кодинга, лучше если есть тяга, его осваивать. Тем более вам, как юристу возможно придётся сталкиваться со смарт контрактами и т.д. Держитесь вообщем ❤️

у меня из коробки макоси ищет по контенту пдф в файле в папке. Еще и подставляет поиск из папки в открытый пдф превью. И по фоткам документов даже.

В посте изобретение уровня приложение поиска авто на парковке - блокнот

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации