Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: Как сравнить string a="_qweAty" с string b="qwerty"
neba2101
Отправлено: 07 Августа, 2020 - 18:54:45
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017  
Репутация: 4




Скрипт распознает текст из игры и сравнивает его с имеющемся массивом string. Распознает не всегда корректно из-за шума в игре и тд. Как найти наиболее похожее слово из массива?

Наверно примерно так для понимания задачи:
CODE:

int result;//результат сравнения

string a="_qweAty";//эту строку сравниваем с массивом b для поиска наиболее похожего
string b[200];
b[0]="qwerty";//---result 5+?(5 символов совпали. qwe+ty)
b[1]="ytaewq";//---result 0 или 1(т.к. 1 символ совпадет, но нет последовательности как в string a)
b[2]=".qver.ty";//-result 4+?(т.к.q+e+ty есть в string a)
b[3]="qwsdfth";//--result 3+?(qw и t)
b[4]="qwezsdf";//--result 3+?(три последовательно идущих символа должны быть в приоритете над просто совпадением с 3 символами)
b[5]="tyqwer";//---result ? ty и qwer не в такой же последовательности как в string a и дожен учитываться только 1 из них(с самым большим количеством последовательно идущих символов)

/*еще одна проблема:
string a=".QW";//----3 символа например
b[0]="sdfgdQWsef";//-строка длинная и есть, например, совпадение 2 символов
b[1]="QW";//---------b[1] должен быть в приоритете над b[0]
b[2]="oW";//---------b[2] тоже должен быть в приоритете над b[0] т.к. длина более подходит
*/

char char_a[20];
char char_b[20];
strcpy(#char_a[0], a);
int arr_size_char_a=size(#char_a[0]);
r_mass_b=sizearray(b);

for(int n=0; n<r_mass_b; n++)
{
strcpy(#char_b[0], b[n]);
int arr_size_char_b=size(#char_b[0]);
for(int n1=0; n1<arr_size_char_a; n1++)
{
for(int n2=0; n2<arr_size_char_b; n2++)
{
if(char_a[n1]==char_b[n2])//???...
{
/*
сравнивать и потом хз...
*/
}

}
}
}

messagebox(result);


Подскажите как это реализовать? Может есть еще какие-нибудь решения?
 
 Top
Kibor
Отправлено: 07 Августа, 2020 - 19:17:46
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Функция Кибор comparestr - Оценка похожести строк по содержимому. Тема

Пример:'
CODE:
string all_string[7]={"junior", "working", "recognition", "with", "violet", "interest", "renewal"}

messagebox (comparestr("viot", 0.5, #all_string[0], sizearray(all_string)));




Или с помощью функционала Питона.

Скрипт Кибор
CODE:
if (runpython())//Запустили интерпретатор
{
sendpython("import difflib^n");
sendpython("def similarity(s1, s2):");
sendpython(" normalized1 = s1.lower()");
sendpython(" normalized2 = s2.lower()");
sendpython(" matcher = difflib.SequenceMatcher(None, normalized1, normalized2)");
sendpython(" return matcher.ratio()^n");

messagebox (sendgetpython("similarity('мыло', 'мало')"));//0.75
messagebox (sendgetpython("similarity('шило', 'мыло')"));//0.5
messagebox (sendgetpython("similarity('совсем не похоже', 'на это')"));//0.090909090

closepython();//Завершили работу с интерпретатором
}
 
 Top
neba2101
Отправлено: 07 Августа, 2020 - 19:22:47
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017  
Репутация: 4




 Kibor пишет:
С помощью функционала Питона.

Скрипт Кибор
CODE:
if (runpython())//Запустили интерпретатор
{
sendpython("import difflib^n");
sendpython("def similarity(s1, s2):");
sendpython(" normalized1 = s1.lower()");
sendpython(" normalized2 = s2.lower()");
sendpython(" matcher = difflib.SequenceMatcher(None, normalized1, normalized2)");
sendpython(" return matcher.ratio()^n");

messagebox (sendgetpython("similarity('мыло', 'мало')"));//0.75
messagebox (sendgetpython("similarity('шило', 'мыло')"));//0.5
messagebox (sendgetpython("similarity('совсем не похоже', 'на это')"));//0.090909090

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


Спасибо! Отлично подходит для этой задачи.
(Добавление)
 Kibor пишет:
С помощью функционала Питона.


А как предать значение string в similarity?
Так не работает ::blink.gif::
CODE:
string a="df-34";
string b="dy-30";


if (runpython())//Запустили интерпретатор
{
sendpython("import difflib^n");
sendpython("def similarity(s1, s2):");
sendpython(" normalized1 = s1.lower()");
sendpython(" normalized2 = s2.lower()");
sendpython(" matcher = difflib.SequenceMatcher(None, normalized1, normalized2)");
sendpython(" return matcher.ratio()^n");

messagebox (sendgetpython("similarity('"+a+"', '"+b+"')"));

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

(Добавление)
messagebox (sendgetpython("similarity(^'"+a+"^', ^'"+b+"^')")); вот так наверно
 
 Top
Kibor
Отправлено: 07 Августа, 2020 - 21:25:34
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




CODE:

double t;


if (runpython()==0){messagebox ("Установите питон"); goto er;}
pyt();



if (сравнение("это вот", "вот это", #t)>0.5)
{
messagebox ("норм "+format(t));
}
else
{
messagebox ("так себе "+format(t));
}





er:;

function сравнение(string ss1, string ss2, double #e)
{
string r= sendgetpython("similarity(^'"+ss1+"^', ^'"+ss2+"^')");
e=formatsn(r);
return e;
}


function pyt()
{
sendpython("import difflib^n");
sendpython("def similarity(s1, s2):");
sendpython(" normalized1 = s1.lower()");
sendpython(" normalized2 = s2.lower()");
sendpython(" matcher = difflib.SequenceMatcher(None, normalized1, normalized2)");
sendpython(" return matcher.ratio()^n");
}


CODE:

double t;


if (runpython()==0){messagebox ("Установите питон"); goto er;}
pyt();


t=сравнение("вот", "это");
if (t>0.5)
{
messagebox ("норм "+format(t));
}
else
{
messagebox ("так себе "+format(t));
}





er:;

function сравнение(string ss1, string ss2)
{
string r= sendgetpython("similarity(^'"+ss1+"^', ^'"+ss2+"^')");
return formatsn(r);
}


function pyt()
{
sendpython("import difflib^n");
sendpython("def similarity(s1, s2):");
sendpython(" normalized1 = s1.lower()");
sendpython(" normalized2 = s2.lower()");
sendpython(" matcher = difflib.SequenceMatcher(None, normalized1, normalized2)");
sendpython(" return matcher.ratio()^n");
}




(Добавление)
 neba2101 пишет:
messagebox (sendgetpython("similarity(^'"+a+"^', ^'"+b+"^')")); вот так наверно
наверно..
 
 Top
neba2101
Отправлено: 07 Августа, 2020 - 21:34:43
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017  
Репутация: 4




Спасибо еще раз! Заработало
 
 Top
Kibor
Отправлено: 07 Августа, 2020 - 21:55:19
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




CODE:
if (runpython()==0){messagebox ("Установите питон"); goto er;}
pyt();

string c=input("Введите 2 слова через пробел для сравнения");
string s[2];
if (regexsearch(2, #s[0], c, "[\S]+")!=2){messagebox ("минимум 2 слова через пробел.........."); goto er;}


messagebox (s[0]+" - "+s[1]+" = "+format(сравнение(s[0], s[1])));





er:;

function сравнение(string ss1, string ss2)
{
string r= sendgetpython("similarity(^'"+ss1+"^', ^'"+ss2+"^')");
return formatsn(r);
}


function pyt()
{
sendpython("import difflib^n");
sendpython("def similarity(s1, s2):");
sendpython(" normalized1 = s1.lower()");
sendpython(" normalized2 = s2.lower()");
sendpython(" matcher = difflib.SequenceMatcher(None, normalized1, normalized2)");
sendpython(" return matcher.ratio()^n");
}
 
 Top
Kibor
Отправлено: 10 Августа, 2020 - 19:40:20
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Использование Питона для корректировка неточно распознанных слов при распознавание текста:

Но этот код работает быстрее

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()"));
}


 
 Top
Kibor
Отправлено: 08 Апреля, 2021 - 13:16:34
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Функция Кибор comparestr - Оценка похожести строк по содержимому. Тема

Пример:'
CODE:
string all_string[7]={"junior", "working", "recognition", "with", "violet", "interest", "renewal"}

messagebox (comparestr("viot", 0.5, #all_string[0], sizearray(all_string)));
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 4 (гостей: 4, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by