Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 5.27 Функция распознавания текста.

Страниц (30): В начало « ... 22 23 24 25 26 27 28 [29] 30 »
 

281. Zireael - 08 Июня, 2022 - 17:37:43 - перейти к сообщению
 Цитата:
как сделать клик на найденном слове?

CODE:
string Text;
loadsymbolbase ("D:\Kibor\basetext.sib");
readtext (EN, #Text, 8, 1, -1, -1, -1, -1, -1, 0, -1, 155, 514, 192, 528, -1);
mouse(LEFT, 155 + symbolxpos(0), 514 + symbolypos(0));
282. Alex5757 - 10 Сентября, 2022 - 09:34:57 - перейти к сообщению
Kibor, или знающие люди, )) а как сделать, чтобы текст распознавался и записывался в файл блокнота *.txt или в файл таблицы *.xls ?
283. Zireael - 10 Сентября, 2022 - 09:59:47 - перейти к сообщению
 Цитата:
как сделать, чтобы текст распознавался и записывался в файл блокнота

CODE:
string Text = "qwerty"; // допустим это распознанный текст
string Path = "D:\MyFile.txt"; // путь к файлу

if(fopen(Path, "w")) // открыть файл для записи
{
fwrite(Text); // записать текст
fclose(); // закрыть файл
start(Path); // запустить файл
}

Если нужно чтобы текст дописывался, то вместо "w", "a".
284. Alex5757 - 11 Сентября, 2022 - 00:41:56 - перейти к сообщению
 Zireael пишет:
 Цитата:
как сделать, чтобы текст распознавался и записывался в файл блокнота

CODE:
string Text = "qwerty"; // допустим это распознанный текст
string Path = "D:\MyFile.txt"; // путь к файлу

if(fopen(Path, "w")) // открыть файл для записи
{
fwrite(Text); // записать текст
fclose(); // закрыть файл
start(Path); // запустить файл
}

Если нужно чтобы текст дописывался, то вместо "w", "a".


Спасибо! буду пробовать.
285. Kibor - 30 Апреля, 2023 - 10:44:27 - перейти к сообщению
Пример как исправить текст если вместо букв вставляются цифры, к примеру 0 или 3 вместо о или з
Или наоборот. Вместо цифр похожие буквы.

Имеем такую картинку которую надо распознать
1
---------

Настраиваем распознавание
2
---------

Получаем такой текст
3
---------

С помощью кода (код для примера. Можно составить более умный код)
CODE:
string Text;
loadsymbolbase ("C:\Program Files (x86)\Kibor\basetext.sib");
readtext (NUM | RU | MARK, #Text, 4, 1, -1, 15, -1, -1, -1, 0, 50, 1403, 345, 1669, 374, -1);
messagebox (Text);//тест

//Буквы в составе числа на цифры
loop(5)
{
while(regexreplace(-1, #Text, Text, "(?<=\d)о", "0", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "о(?=\d)", "0", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "(?<=\d)з", "3", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "з(?=\d)", "3", MULTILINE)){}
}

//Цифры в составе слова на буквы
loop(5)
{
while(regexreplace(-1, #Text, Text, "(?<=[а-я|А-Я])0", "о", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "0(?=[а-я|А-Я])", "о", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "(?<=[а-я|А-Я])3", "з", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "3(?=[а-я|А-Я])", "з", MULTILINE)){}
}

messagebox (Text);//тест

Исправляем
4
286. Zireael - 30 Апреля, 2023 - 10:54:31 - перейти к сообщению
 Цитата:
while(regexreplace(-1, #Text, Text, "(?<=\d)о", "0", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "о(?=\d)", "0", MULTILINE)){}

Можно одной строкой:
CODE:
while(regexreplace(-1, #Text, Text, "(?<=\d)о|о(?=\d)", "0", MULTILINE)){}

Т. к. могут бы англ. и рус. буквы, то можно и так:
CODE:
while(regexreplace(-1, #Text, Text, "(?<=\d)(o|о)|(o|о)(?=\d)", "0", MULTILINE)){}

o|о тут одна буква англ., другая рус.
287. Kibor - 30 Апреля, 2023 - 10:58:40 - перейти к сообщению
Хорошо бы составить "умную" регулярку.
Можно было бы реализовать кибор функцию для корректировки текста распознанного. Типа
CODE:
string Text="о2-15 эт0 числ0";
Text=textcorrect(Text);
288. Zireael - 30 Апреля, 2023 - 11:24:14 - перейти к сообщению
В некоторых языках есть функция замены, которая принимает массив, в котором записано что на что менять.
Что-то вроде:
CODE:
string replace[3][2];

replace[0][0]="o"; replace[0][1]="0"; // букву о меняем на 0
replace[1][0]="з"; replace[1][1]="3"; // з меняем на 3
replace[2][0]="i|l"; replace[2][1]="1"; // i или l меняем на 1

string Text="о2-15 эт0 числ0";
Text=textcorrect(Text, replace);

Но, учитывая что не реализована инициализация многомерных массивов при объявлении, то выглядит всё равно не очень.
Так было бы лучше:
CODE:
string replace[3][2] = { {"o", "0"}, {"з", "3"}, {"i|l", "1"} };

string Text="о2-15 эт0 числ0";
Text=textcorrect(Text, replace);


Одной регуляркой не обойтись, придётся несколько раз прогонять текст. Просто внутри функции будет быстрее.
289. Kibor - 30 Апреля, 2023 - 11:37:25 - перейти к сообщению
Надо реализовать не просто регулярку, а нечто которое будет сначала заменять Явные ошибки, потом на их основание менее явные (которые станут явными) и т.д.
Понятно, что без ошибок не обойтись, но что то более менее можно придумать.
Естественно рекурсия. Но это вообще не проблема в плане быстродействия. Задачи то мелкие. Малый текст. И реализован внутренней функцией. Можно любой алгоритм придумать не заботясь о быстродействие.
290. Zireael - 30 Апреля, 2023 - 12:21:15 - перейти к сообщению
Какие-то явные ошибки можно убрать. Тут сложно сделать что-то универсальное, т. к. нужно понимать контекст.
Да, если знаем что в тексте дата в числовом формате или время, то можно смело менять буквы на числа.
Но, вот для примера:
 Цитата:
Я заработал 0 центов. Сегодня поговорим о погоде.

В одном случае "0 центов", в другом "о погоде", а распознаваться может наоборот, "о центов" и "0 погоде".

Powered by ExBB FM 1.0 Final