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

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

1. Kibor - 11 Февраля, 2021 - 17:51:12 - перейти к сообщению
comparestr Позволяет сравнить между собой 2 строки и выдать оценку схожести по содержимому. По результату выполнения схожа с функцией SequenceMatcher Python, но немного отличается оценка. Однако результат работы может с не меньшим успехом быть использован для тех же целей.
используется алгоритм Расстояние Дамерау — Левенштейна

Первое применение - возвращает оценку сравнения

Второе применение дает возможность вести проверку и выбор наиболее близкой строки с массива string

=================================================

Первое применение - возвращает оценку сравнения

Синтаксис:
CODE:
double t=comparestr("машина", "мякиш");
messagebox (t);

В виде параметров принимает сравниваемые строки.
Возвращает положительное дробное число до 1.
1 возвращается при полном совпадение.
Чем число меньше - тем меньше совпадений.

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

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

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


=============================

Второе применение дает возможность вести проверку и выбор наиболее близкой строки с массива string

Синтаксис:
CODE:
comparestr("viot", 0.5, #all_string[0], 7);

Первый параметр - строка которую сравнивает
Второй - Оценка от 0 до 1 включительно, менее или равно которой слово заменено не будет.
Третий параметр - указатель на массив string в котором записаны строки с которыми будем сравнивать
Четвертый параметр - количество элементов массива с которыми будем сравнивать начиная с указателя

Возвращает наиболее близкую строку с массива.

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

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


Выведет violet

=========================

Можно использовать двойной массив данных.

Пример
CODE:
string all_string[2][3];
all_string[0][0]="junior";
all_string[0][1]="valet";
all_string[0][2]="recognition";

all_string[1][0]="with";
all_string[1][1]="violet";
all_string[1][2]="interest";

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


============================

Последним, не обязательным параметром можно указать Указатель на int, в который запишется индекс совпавшего слова в массиве. Или -1 если оценка менее указанной и ничего не совпало.
Пример
CODE:
string all_string[7]={"junior", "working", "recognition", "with", "violet", "interest", "renewal"}
int n;
messagebox (comparestr("viot", 0.5, #all_string[0], sizearray(all_string), #n));
messagebox (n);
2. Kibor - 11 Февраля, 2021 - 18:58:44 - перейти к сообщению
Переделал возвращаемую оценку, поскольку прошлая оценка была зависима от длины текста.

Возвращает положительное дробное число до 1.
1 возвращается при полном совпадение.
Чем число меньше - тем меньше совпадений.
3. Kibor - 12 Февраля, 2021 - 00:35:17 - перейти к сообщению
Доработка comparestr
Появилась возможность вести проверку и выбор наиболее близкой строки с массива string

Синтаксис:
CODE:
comparestr("viot", 0.5, #all_string[0], 7);

Первый параметр - строка которую сравнивает
Второй - Оценка от 0 до 1 включительно, менее или равно которой слово заменено не будет.
Третий параметр - указатель на массив string в котором записаны строки с которыми будем сравнивать
Четвертый параметр - количество элементов массива с которыми будем сравнивать начиная с указателя

Возвращает наиболее близкую строку с массива.

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

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


Выведет violet
4. ivantu - 12 Февраля, 2021 - 02:44:18 - перейти к сообщению
Очень крутая и полезная функция! Спасибо Владимир за доработку!
5. Kibor - 12 Февраля, 2021 - 04:52:35 - перейти к сообщению
ivantu , Пользуйтесь)

Пример как с помощью словаря корректировать исковерканный текст:
 Цитата:
Кибарг 5.81, мосчний и удёбний инстрьюуменьть для саздания праграм атамамзации любим дейстий на кампютире.




CODE:
string slovar[5000];
int k=0;

if (fopen ("C:\словарь.txt", "r")!=0)
{
while(freadline(slovar[k])) k++;//чтение строки
fclose();
}

string Text="Кибарг 5.81, мосчний и удёбний инстрьюуменьть для саздания праграм атамамзации любим дейстий на кампютире.";

string slovo[100000];
int ks=regexsearch(100000, #slovo[0], Text, "[\wа-яА-ЯёЁ]+|[:punct:]");

string Res="";
for (int n=0; n<ks; n++)
{
Res=Res+comparestr(slovo[n], 0.4, #slovar[0], k)+" ";
}
messagebox(Text+"^r^n^r^n==========^r^n^r^n"+Res);


Нам нужен словарь в котором находятся все нужные нам слова. При распознавание текста в играх и программах мы как правило знаем весь ограниченный используемый лексикон.
В данном случае 5.81 в словаре не находится, поэтому функция comparestr не подставила вместо него ничего, так как оценка его сравнения была ниже или равна указанной 0.4.

Словарь C:\словарь.txt:
 Цитата:
кибор
мощный
и
удобный
инструмент
для
создания
программ
автоматизации
любых
действий
на
компьютере


Для исправления непредсказуемого текста нужен словарь побольше.. Ну и учитывать различные нюансы словосочетаний.. Но Кибор для этого не предназначен.
6. Skycrew - 16 Февраля, 2021 - 02:26:10 - перейти к сообщению
Круто! Спасибо!
7. Kibor - 15 Ноября, 2023 - 04:17:22 - перейти к сообщению
Доработал comparestr

Можно использовать двойной массив данных.

Пример
CODE:
string all_string[2][3];
all_string[0][0]="junior";
all_string[0][1]="valet";
all_string[0][2]="recognition";

all_string[1][0]="with";
all_string[1][1]="violet";
all_string[1][2]="interest";

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


============================

Последним, не обязательным параметром можно указать Указатель на int, в который запишется индекс совпавшего слова в массиве. Или -1 если оценка менее указанной и ничего не совпало.
Пример
CODE:
string all_string[7]={"junior", "working", "recognition", "with", "violet", "interest", "renewal"}
int n;
messagebox (comparestr("viot", 0.5, #all_string[0], sizearray(all_string), #n));
messagebox (n);
8. Kibor - 23 Ноября, 2023 - 12:43:07 - перейти к сообщению
Демонстрация сортировки по названиям команд с помощью comparestr

Нажмите для увеличения

Powered by ExBB FM 1.0 Final