пятница, 24 июля 2026 г.

Анализируем данные в файле с помощью ИИ

Тестирую задачу на поиск дубликатов. Дубликаты определяются по конкретным правилам, и коэффициент соответствия зависит от того, попадает ли фамилия / имя / отчество в соответствующий справочник, или нет.

А еще в компонентах ФИО бывают опечатки, и это тоже влияет на коэффициент. А длина компонента на это влиять, наоборот, НЕ должна…


В общем, для тестирования мне нужно проанализировать справочник фамилий и набрать себе оттуда тестовых данных под разные сценарии — короткая фамилия, длинная, и так далее.


Раньше мне нужно было бы изучать это все на глаз или размышлять, как самой написать код. Но сейчас эту работу можно отдать ИИ! Причем я пошла к обычному текстовому чату с моими вопросами (а не к Курсору), и его вполне хватило.




Сначала я решила поискать самое длинное значение в справочнике. Справочник фамилий очень большой (вы себе даже не представляете, насколько они разнообразны!), так что я решила подсветить ИИ его вес, вдруг это важно:


У меня есть файл на 17 мб, в нем данные вида (структура справочника изменена для статьи, но смысл отражает):


НАЗИН;М;

НАЗИНА;Ж;


Как табличка в несколько колонок. Как мне найти самое длинное значение в первое колонке?


У меня винда, греп не установлен, через winget есть аналоги нынче? или надо поставить цигвин?


Ну да, раньше я анализировала файлы с помощью регулярных выражений и Cygwin, ещё до ИИ новомодных! Правда, файлики были поменьше размером, что тоже влияло. В общем, Cygwin чатик высмеял и предложил другие решения (ответ сокращен):



Ставить Cygwin в 2026 году точно не нужно — это тяжелое и устаревшее решение.


Поскольку у вас 17 МБ (это очень маленький объем для современных ПК) и уже открыта Giga IDE, а на Windows есть встроенный PowerShell, решить эту задачу можно моментально и без установки лишнего софта.


Вот 3 простых и быстрых способа на выбор:


——————————


Способ 1. Написать 4 строчки кода прямо в IDE (Самый быстрый и удобный)



——————————


Способ 2. Через встроенный Windows PowerShell (Без установки программ)


В Windows есть мощная консоль PowerShell, которая справится с этим в одну строчку.


1. Откройте поиск Windows, введите PowerShell и запустите его.


2. Скопируйте и выполните следующую команду (замените путь к файлу):


Get-Content "C:\path\to\your\file.txt" | ForEach-Object { $_.Split(';')[0] } | Sort-Object Length -Descending | Select-Object -First 5



Что делает эта команда:


Она читает файл, разбивает каждую строчку по ;, берет первый элемент, сортирует всё по длине от большего к меньшему и выводит топ-5 самых длинных значений (на случай, если будет несколько одинаковых по длине). Для файла 17 МБ это займет около 3–5 секунд.


——————————


Способ 3. Через Git Bash (Если вы ставили Git)



Меня, конечно, заинтересовал первый способ, создать Scratch File в IDE и запустить его. Вот только он у меня не завелся, ошибку отдала чату, он вроде переписал, и снова не сработало…


Я решила не тратить на это время и попробовала вариант с PowerShell. И ведь сработало же! Тогда я пошла искать нижнюю границу:


(цитирую способ 2, общалась с телеграм-ботом) 

хороший способ! а самую короткую запись как найти?


Чатик и такой вариант написал, и разжевал все изменения:


Вариант для PowerShell (Топ-5 самых коротких, без пустых)


Скопируйте и вставьте эту команду в синее окно PowerShell:


Get-Content "C:\path\to\your\file.txt" | ForEach-Object { $_.Split(';')[0].Trim() } | Where-Object { $_ -ne "" } | Sort-Object Length | Select-Object -First 5



Что изменилось:


1. Добавилось .Trim() — убирает случайные пробелы по краям.


2. Добавился блок Where-Object { $_ -ne "" } — он выкидывает пустые значения, чтобы они не мешались в топе.


3. Из Sort-Object убрали -Descending — теперь первыми идут самые короткие слова.



Потом мне понадобилось немного усложнить логику:


А если я хочу самое длинное первое слово среди тех, у кого в 3 колонке было значение "1"?


И снова скрипт на PowerShell отлично сработал. Также для проверки граничных значений мне надо было найти данные ровно на 6 символов, и тут чат помог:


Напиши скрипт, который выведет 10 первых строк файла, у которого в 1 ячейке 6 символов. И как его исправить, чтобы было меньше 4 символов? (это я решила сразу другую границу проверить)


А потом мне надо было найти путаницу букв, анаграммы. И при этом чтобы оба значения были справочные. Сначала я сходила к Курсору:


Можешь открыть файл C:\tmp\test.csv и найти там все строки, в которых в первой ячейке ПОЧТИ одинаковые данные, но буквы перепутаны местами? 


Например ШУМИЛИНА и ШУЛИМИНА обе есть в этом файле, расстояние - 1 буква. Я хочу видеть все такие строки и столько у каждой расстояние перепутанных букв (включая расстояние 0)


Посмотрела, что он там пишет, а он написал:


Думаю, как сделать… Тут нужен скрипт на питоне! Пишу скрипт… Ой, питона нету, хм хм, тогда сделаю через PowerShell…


Сделал, но немного не так, как мне бы хотелось. А токенов при этом выжрал ой-ей-ей! Поэтому я попробовала запросить скрипт у обычного чатика и вернулась к телеграм-боту.


Но для начала я установила питон, ведь ИИ сказал, что на нем будет лучше всего выполнить задачу. Потом уже пошла к боту:


Как мне найти все анаграммы в файле C:\tmp\fname.csv?


Структура айла:

ГАДАВИЯ;Ж;

ГАДАД;М;


То есть чтобы значение во второй ячейке (М/Ж) совпадало и слово в первой ячейке тоже совпадало, но у него 2 буквы перепутаны местами. Но чтобы оба слова при этом были из файла!


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

Через питон или павершелл


И ведь не зря питон поставила! Вот что сказал чат:


Для решения этой задачи Python подходит идеально. Написать такой алгоритм на PowerShell можно, но он будет работать значительно медленнее и код получится очень громоздким. На Python мы можем применить хитрую оптимизацию, благодаря которой скрипт найдет все пары за долю секунды.


Python-скрипт


Создайте на компьютере файл, например find_anagrams.py, и вставьте в него следующий код:


Как запустить этот скрипт на Windows:


Что вы получите на выходе?


Скрипт отработал на ура, столько данных мне собрал, сколько я бы никогда не наскребла вручную! А уж сколько нового я узнала о фамилиях и именах )))


Потом я пошла тестировать дальше. И мне понадобились новые кейсы — когда оба значения справочные, но есть опечатка или пропуск буквы. И снова поиск таких данных вручную занял бы кучу времени, так что я пошла к ИИ, начать решила с пропуска:





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


И вот уже он выдает мне скрипт на питоне! А потом дошли до опечаток:


Напиши скрипт (питон или павершелл), который найдет в файле такие строки, где в первой ячейке одно и то же слово, и ровно 1 символ у них отличается. Результат отсортировать по длине строки.


ИИ и тут помог, выдав очередной скрипт на питоне. Вот только этот скрипт работал подозрительно долго, искал и искал данные, я уже чай попила, другие задачки поделала… Так и написала боту:


Этот скрипт ищет пары уже полчаса


И бот выдал мне оптимизированную версию!


Ваш скрипт «завис», потому что даже с группировкой по длине, если в файле много слов одной длины (например, 100 000 имен длиной 7 символов), количество сравнений внутри этой группы всё равно остается огромным (N^2).


Чтобы ускорить поиск пар с расстоянием Левенштейна = 1 для 3 миллионов строк, нужно отказаться от «честного» сравнения каждого с каждым. Используйте хеширование (метод «удаления одного символа»):


Идея алгоритма:


Оптимизированный скрипт:


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


Напиши скрипт (питон или павершелл), который найдет в файле такие строки, где в первой ячейке одно и то же слово, и ровно 2 символа у них отличаются. Результат отсортировать по длине строки, но чтобы работал не полчаса. В файле много строк, оптимизируй скрипт под это условие


И снова результат готов меньше, чем за минуту!



Итого


ИИ — просто незаменимый помощник в работе! Я с его то помощью пару дней анализировала данные и составляла тест-кейсы, а сколько бы времени потратила без него?


Мне все равно бы понадобилась автоматизация, чтобы найти граничные значения или тестовые данные “надо, чтобы она значения были в файле, но…”. Вот только сама бы я писала бы эти скрипты не пару минут, а пару часов каждый. И это в лучшем случае!


По крайней мере те громоздкие питон-скрипты, с павершеллом и гуглом я бы справилась быстрее. Но в языке программирования помощь ИИ была просто спасением!


PS — эта статья написана в помощь студентам моего курса «Применение ChatGPT в тестировании»

Комментариев нет:

Отправить комментарий