Кибор » Кибор - Интегрированная среда разработки ботов » Предложения по программе » Распознавание английского шрифта и сравнение строк: проблемы с I, i, l, j

Страниц (1): [1]
 

1. fun - 09 Августа, 2020 - 15:26:51 - перейти к сообщению
При работе с распознаванием текста я не могу обеспечить стабильное распознавание английских I, l, i, j. Понятно что задача не простая, может можно сделать костыль в виде функции сравнения с игнорированием отличия в этих буквах? Или добавить какой-нибудь спецсимвол типа '*' для игнорирования отличия в конкретном месте: "The *nst*tute for *ust*ce" == string
2. Zireael - 09 Августа, 2020 - 15:56:46 - перейти к сообщению
 Цитата:
в виде функции сравнения с игнорированием отличия в этих буквах?

CODE:
string Text = "The institute for Justice"; // с чем сравнить
string Text2 = "The lnstjtute for iustice"; // допустим это распознанный текст

int result = compare(Text, Text2);
messagebox(result); // вернёт 1 если строки одинаковые, иначе 0


function compare(string s, string s2)
{
regexreplace(-1, #s, s, "[iIjJl]", "*"); // в скобках символы, которые будут заменены
regexreplace(-1, #s2, s2, "[iIjJl]", "*");
messagebox(s+"^r^n"+s2);
if(s==s2)return 1;
return 0;
}
3. fun - 09 Августа, 2020 - 16:40:01 - перейти к сообщению
спасибо, попробую
4. Kibor - 09 Августа, 2020 - 23:11:29 - перейти к сообщению
Какая стоит задача?
Распечатка отсканированных документов?
Или просто надо проверить что в каком то месте экрана находится слово к примеру
junior
и проблема в том, что мы его можем распознать как
junlor
iunior

и тд..

Если стоит задача просто сравнить слово с шаблонным, то все просто. Обучайте все символы которые путает одному.
То есть
i l j обучите как l
В шаблоне с которым сравнивается тоже замените эти символы все на l
Тогда не будет проблем. будет сравнение
lunlor == lunlor
5. fun - 10 Августа, 2020 - 10:26:14 - перейти к сообщению
 Kibor пишет:
Какая стоит задача?

Задача проверить что выводится на экране из нескольких известных вариантов. Я перед тем как тему создавать пробовал обучить все совпадающие символы как l, но не очень получилось, наверное не хватает опыта, потом попробую еще раз. Вариант с заменой который предложил Zireael мне вполне подходит.
6. Kibor - 10 Августа, 2020 - 10:35:20 - перейти к сообщению
 fun пишет:
Задача проверить что выводится на экране из нескольких известных вариантов. Я перед тем как тему создавать пробовал обучить все совпадающие символы как l, но не очень получилось, наверное не хватает опыта, потом попробую еще раз. Вариант с заменой который предложил Zireael мне вполне подходит.

Вообще то результат один ожидается. Только тут замена символов идет с помощью регулярки После распознавания, а я говорю про замену Во время распознавания. Если у вас не получилось обучить что бы можно было сделать как говорю я, то метод Zireael не поможет.



А еще можете не париться по поводу точности распознавания так как ниже код))
Но этот код работает быстрее

CODE:


if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}//Запускаем интерпретатор Python
sendgetpython("import difflib");

//Массив верных слов
int kml=7;
string all_string[7]={"junior", "working", "recognition", "with", "violet", "interest", "renewal"}

messagebox ("корявое junlor = точое "+rez("junlor"));//Узнаем каккое слово близкое к корявому junlor
messagebox ("корявое worklng = точое "+rez("worklng"));//Узнаем каккое слово близкое к корявому worklng
messagebox ("корявое recognjtion = точое "+rez("recognjtion"));//Узнаем каккое слово близкое к корявому recognjtion
messagebox ("корявое recognllltjon точое = "+rez("recognllltjon"));//Узнаем каккое слово близкое к корявому recognllltjon
messagebox ("корявое lnterest = точое "+rez("lnterest"));//Узнаем каккое слово близкое к корявому lnterest
messagebox ("корявое vlolet = точое "+rez("vlolet"));//Узнаем каккое слово близкое к корявому vlolet
messagebox ("а на что похоже это? ietsert = точое "+rez("ietsert"));//Узнаем каккое слово близкое к корявому ietsert


closepython();//Завершаем работу с интерпретатором
er:;




function rez(string s)
{
double max=-1;
double t;
double i=0;
for (int n=0; n<kml; n++)
{
t=compare(s, all_string[n]);
if (t>max)
{
max=t;
i=n;
}
}
return all_string[i];
}



function compare(string s1, string s2)
{
sendgetpython("s1=^'"+s1+"^'");
sendgetpython("s2=^'"+s2+"^'");
__python
normalized1 = s1.lower()
normalized2 = s2.lower()
matcher = difflib.SequenceMatcher(None, normalized1, normalized2)
__end_python
return formatsn(sendgetpython("matcher.ratio()"));
}




Powered by ExBB FM 1.0 Final