Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Разбить текст на слова используя в виде разделителей пробелы и всевозможные знаки препинания.

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

1. Kibor - 12 Февраля, 2021 - 03:17:35 - перейти к сообщению
Кто может составить регулярку что бы разбить текст на слова?

Что бы было выполнено такое условие:
Такой код:
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]="!";
2. Zireael - 12 Февраля, 2021 - 03:40:45 - перейти к сообщению
CODE:
string Text="мама мыла раму, рама-мыла маму!";
string P[10];
int r=regexsearch(10, #P[0], Text, "[а-я]+|[,\-\!]");

for (int n=0; n<r; n++)messagebox(P[n]);
3. Kibor - 12 Февраля, 2021 - 03:45:30 - перейти к сообщению
Спасибо
4. Zireael - 12 Февраля, 2021 - 03:50:35 - перейти к сообщению
Ещё так можно: "[а-я]+|[:punct:]"
5. Kibor - 12 Февраля, 2021 - 03:56:46 - перейти к сообщению
 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:]");
6. Zireael - 12 Февраля, 2021 - 04:23:24 - перейти к сообщению
 Цитата:
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]);
7. Kibor - 12 Февраля, 2021 - 04:29:43 - перейти к сообщению
 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]);
8. stasrus - 12 Февраля, 2021 - 04:47:18 - перейти к сообщению
Никого гениальнее Zireael в жизни не видел.
9. Kibor - 12 Февраля, 2021 - 04:55:36 - перейти к сообщению
Код к теме:

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


Для исправления непредсказуемого текста нужен словарь побольше.. Ну и учитывать различные нюансы словосочетаний.. Но Кибор для этого не предназначен.

Powered by ExBB FM 1.0 Final