1. Vasser - 01 Марта, 2008 - 19:08:26 - перейти к сообщению
Доброе время, может кто поможет с сабжем? Стоит задача - выделить из текста предложения, как наиболее грамотно это сделать? Учитывая, что предложения могут кнчаться символами .?!, в предложении могут быть сюрпризы типа "бла-бла-бла .net блаб-бла-бла" или "бла-бла бла т.е. не совсем бла-бла" или "версия 5.2 выйдет..." Вроде бы задача обычная, но готового решения найти не могу...
2. valenok - 01 Марта, 2008 - 21:37:32 - перейти к сообщению
А как вы хотите чтоб скрипт понимал где конец предложения?
(Добавление)
Есть второй подход к решению вашей задачи:
2. А на кой чёрт это вообще нужно..
(Добавление)
Есть второй подход к решению вашей задачи:
2. А на кой чёрт это вообще нужно..
3. Vasser - 01 Марта, 2008 - 23:11:21 - перейти к сообщению
Где-то когда-то видел здоровенное регулярное выражение для определения имэйла в тексте, кто-то ж его написал, думал мож у кого и для предложений есть
это не второй, это первый , к сожалению он чуток не катит
Конец предлжения для скрипта - .?![пробельный символ][БОЛЬШАЯ БУКВА или числительное], в регулярных пока вообще 0... Посимвольно проходить по тексту - можно, но некрасиво.
Вот такие вот у меня житейские проблемы.
Цитата:
Есть второй подход к решению вашей задачи:
2. А на кой чёрт это вообще нужно..
2. А на кой чёрт это вообще нужно..
это не второй, это первый , к сожалению он чуток не катит
Конец предлжения для скрипта - .?![пробельный символ][БОЛЬШАЯ БУКВА или числительное], в регулярных пока вообще 0... Посимвольно проходить по тексту - можно, но некрасиво.
Вот такие вот у меня житейские проблемы.
4. valenok - 02 Марта, 2008 - 06:29:42 - перейти к сообщению
У имейла вид постоянный всегда, а у ваших предложений с сюрпризом может быть что угодно.
Во вторых вы не ответили зачем и действительно ли вам нужно выделять предложения.
Во вторых вы не ответили зачем и действительно ли вам нужно выделять предложения.
5. Vasser - 03 Марта, 2008 - 01:43:40 - перейти к сообщению
Цитата:
У имейла вид постоянный всегда, а у ваших предложений с сюрпризом может быть что угодно.
вообще, предложение оно как бы тоже соответствует определенным требованиям, думал, может это классическая задача (выделить предложения) - оказалось нет...
Цитата:
Во вторых вы не ответили зачем и действительно ли вам нужно выделять предложения.
да, извините, не ответил: действительно нужно, задачу задали - выделить из текста предложения. Под предложениями я понимаю конструкции, удовлетворяющие обычным орфографичесим\синтаксическим (человеческим ) требованиям к предложениям: начинается с большой буквы, заканчивается знаком препинания+[пробел или конец строки], может содержать "сюрпризы" типа .net, моб. или ул. и т п. Вот.
Сорри, у вас длина ссобщения 2кб максимум, сейчас 3 мессага сделаю
(Добавление)
Пока сделал так:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- $text = '
- Это нормальный текст
- Регулярные выражения пришли к нам из Unix и Perl. В PHP существует два различных механизма для обработки регулярных выражений: POSIX-совместимые и Perl-совместимые. Их синтаксис во многом похож, однако Perl-совместимые регулярные выражения более мощные и, к тому же, работают намного быстрее (в некоторых случаях до 10 раз быстрее).
- Круто, не правда ли!?
- А дальше идут куски текста с сюрпризами
- Бла-бла-бла .net блаб-бла-бла .
- Бла-бла бла т.е. не совсем бла-бла.
- Версия 5.2 выйдет! Куда она денется!
- Адрес: ул. Цурюпы, д. 12, кв.15, Нижний Тагил, моб. +1231234567.
- Всё.
- ';
- // это чтобы выделить заголовки в тексте как предложения (чтобы заголовки
- // попадали под мой рег.выр. надо поставить точку с пробелом после них)
- // omg! кодирую текст, чтобы исключить сокращения с точками, чтобы позже работало рег.выр.
- "т.к.",
- "т. к.",
- "т.е.",
- "т. е.",
- "г.",
- "ул.",
- "кв.",
- "д.",
- "тел.",
- "моб.",
- "дом."
- );
- "{[$%#tk1]}",
- "{[$%#tk2]}",
- "{[$%#te1]}",
- "{[$%#te2]}",
- "{[$%#g]}",
- "{[$%#ul]}",
- "{[$%#kv]}",
- "{[$%#d]}",
- "{[$%#tel]}",
- "{[$%#mob]}",
- "{[$%#dom]}"
- );
- // чтобы рег.выр.-у соответстовали первое и последнее предложение в тексте
- $text = ' '.$text.' ';
- // сам рег.выр.
- $reg = '/([A-ZА-Я]+.+)[.!?]+[\s]+/sU';
- // это массив с предложениями, без знака препинания вконце, но ниче
- $strings = $strings[1];
- // декодируем предложения в нормальный вид
- ?>
(Добавление)
по-моему извращенски, плюс почему-то str_ireplace в моем php5 не работает , но ничего...
Единственное - предложения возвращаются без конечных символов, по условию не оговорено, нужны ли они, но...
В общем пока это - самое толковое, что я придумал.
Скрипт возвращает
Цитата:
array(12) {
[0]=>
string(20) "Это нормальный текст"
[1]=>
string(48) "Регулярные выражения пришли к нам из Unix и Perl"
[2]=>
string(113) "В PHP существует два различных механизма для обработки регулярных выражений: POSIX-совместимые и Perl-совместимые"
[3]=>
string(166) "Их синтаксис во многом похож, однако Perl-совместимые регулярные выражения более мощные и, к тому же, работают намного быстрее (в некоторых случаях до 10 раз быстрее)"
[4]=>
string(19) "Круто, не правда ли"
[5]=>
string(40) "А дальше идут куски текста с сюрпризами "
[6]=>
string(30) "Бла-бла-бла .net блаб-бла-бла "
[7]=>
string(34) "Бла-бла бла т.е. не совсем бла-бла"
[8]=>
string(17) "Версия 5.2 выйдет"
[9]=>
string(16) "Куда она денется"
[10]=>
string(63) "Адрес: ул. Цурюпы, д. 12, кв.15, Нижний Тагил, моб. +1231234567"
[11]=>
string(3) "Всё"
}
array(12) {
[0]=>
string(20) "Это нормальный текст"
[1]=>
string(48) "Регулярные выражения пришли к нам из Unix и Perl"
[2]=>
string(113) "В PHP существует два различных механизма для обработки регулярных выражений: POSIX-совместимые и Perl-совместимые"
[3]=>
string(166) "Их синтаксис во многом похож, однако Perl-совместимые регулярные выражения более мощные и, к тому же, работают намного быстрее (в некоторых случаях до 10 раз быстрее)"
[4]=>
string(19) "Круто, не правда ли"
[5]=>
string(40) "А дальше идут куски текста с сюрпризами "
[6]=>
string(30) "Бла-бла-бла .net блаб-бла-бла "
[7]=>
string(34) "Бла-бла бла т.е. не совсем бла-бла"
[8]=>
string(17) "Версия 5.2 выйдет"
[9]=>
string(16) "Куда она денется"
[10]=>
string(63) "Адрес: ул. Цурюпы, д. 12, кв.15, Нижний Тагил, моб. +1231234567"
[11]=>
string(3) "Всё"
}
Может что подскажете, чтоб лучше было ?
(Добавление)
мм, три мессага прикольно склеились в один - тогда извиняюсь за один большой мессаг