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

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

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

> Описание: Составить регулярное выражение для разбивки текста на слова
Kibor
Отправлено: 12 Февраля, 2021 - 11:17:35
Post Id



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


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




Кто может составить регулярку что бы разбить текст на слова?

Что бы было выполнено такое условие:
Такой код:
CODE:
string Text="мама мыла раму, рама-мыла маму!";
string P[10];
int r=regexsearch(10, #P[0], Text, "Регулярка?");

for (int n=0; n<r; n++)messagebox(P[n]);



Давал такой результат:
 Цитата:
P[0]="мама";
P[1]="мыла";
P[2]="раму";
P[3]=",";
P[4]="рама";
P[5]="-";
P[6]="мыла";
P[7]="маму";
P[8]="!";
 
 Top
Zireael
Отправлено: 12 Февраля, 2021 - 11:40:45
Post Id



Пользователь
Эксперт


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




CODE:
string Text="мама мыла раму, рама-мыла маму!";
string P[10];
int r=regexsearch(10, #P[0], Text, "[а-я]+|[,\-\!]");

for (int n=0; n<r; n++)messagebox(P[n]);
 
 Top
Kibor
Отправлено: 12 Февраля, 2021 - 11:45:30
Post Id



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


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




Спасибо
 
 Top
Zireael
Отправлено: 12 Февраля, 2021 - 11:50:35
Post Id



Пользователь
Эксперт


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




Ещё так можно: "[а-я]+|[:punct:]"
 
 Top
Kibor
Отправлено: 12 Февраля, 2021 - 11:56:46
Post Id



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


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




 Zireael пишет:
Ещё так можно: "[а-я]+|[:punct:]"

Это вообще круто..
А то я дополнил так))
CODE:
"[à-ÿ]+|[*\d]+|[,\.\!\?\<\>\+\-\=]"

Но "[а-я]+|[:punct:]" видать для этого заточено..

CODE:
string Text="мама? мыла>25+2-ю раму, рама-мыла. <ма=му!";
string P[100];
//int r=regexsearch(100, #P[0], Text, "[а-я]+|[*\d]+|[,\.\!\?\<\>\+\-\=]");
int r=regexsearch(100, #P[0], Text, "[а-я]+|[:punct:]");
for (int n=0; n<r; n++)messagebox(P[n]);

(Добавление)
Короче получилось так
CODE:
string Text="мама? wWe Мыла>25+";
string P[100];
int r=regexsearch(100, #P[0], Text, "[a-z\A-Z\а-я\А-Я\d]+|[:punct:]");
for (int n=0; n<r; n++)messagebox(P[n]);

(Добавление)
Короче так. С ёЁ

CODE:
int r=regexsearch(100, #P[0], Text, "[0-9A-Za-zА-ЯЁа-яё]+|[:punct:]");
 
 Top
Zireael
Отправлено: 12 Февраля, 2021 - 12:23:24
Post Id



Пользователь
Эксперт


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




 Цитата:
a-z\A-Z\а-я\А-Я

Слеш не нужен. Буква ё не входит в диапазон а-я.
CODE:
string Text="мама? wWe Мыла>25+";
string P[100];
int r=regexsearch(100, #P[0], Text, "[a-zA-Zа-яА-ЯёЁ\d]+|[:punct:]");
for (int n=0; n<r; n++)messagebox(P[n]);

Можно вместо a-zA-Z\d использовать \w.
CODE:
string Text="мама? wWe Мыла>25+";
string P[100];
int r=regexsearch(100, #P[0], Text, "[\wа-яА-ЯёЁ]+|[:punct:]");
for (int n=0; n<r; n++)messagebox(P[n]);
 
 Top
Kibor
Отправлено: 12 Февраля, 2021 - 12:29:43
Post Id



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


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




 Zireael пишет:
Можно вместо a-zA-Z\d использовать \w.

Да. То что надо
CODE:
string Text="Ёлки мама? wWR Мыла>25+2-ю раму, рама-мыла. <ма=му!";
string P[100];
int r=regexsearch(100, #P[0], Text, "[\wа-яА-ЯёЁ]+|[:punct:]");
for (int n=0; n<r; n++)messagebox(P[n]);
 
 Top
stasrus
Отправлено: 12 Февраля, 2021 - 12:47:18
Post Id



Пользователь
Участник


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




Никого гениальнее Zireael в жизни не видел.
 
 Top
Kibor
Отправлено: 12 Февраля, 2021 - 12:55:36
Post Id



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


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




Код к теме:

Пример как с помощью словаря корректировать исковерканный текст:
 Цитата:
Кибарг 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:
 Цитата:
кибор
мощный
и
удобный
инструмент
для
создания
программ
автоматизации
любых
действий
на
компьютере


Для исправления непредсказуемого текста нужен словарь побольше.. Ну и учитывать различные нюансы словосочетаний.. Но Кибор для этого не предназначен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by