Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Переносы слов знаком "-". Регулярные выражения., Помогите составить регулярку, которая должна ПРОПУСКАТЬ
Denis Tar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 15
Пользователь №: 43358
На форуме: 2 месяца, 27 дней
Карма:




Помогите составить регулярку, которая должна искать (и ПРОПУСКАТЬ) в тексте знаки переноса слов "-" (обычная "черточка"/"минус"). Никак не могу придумать конструкцию для слов, которые требуется пропускать из поиска.
Интересует комбинация из выражений, содержащих цифры, например "1980-х", "2-этажный", "50-процентный" и т. п.
Требуется пропускать именно слова, где перед "-" стоит цифра, а не буква.
Выражение вида (\d-) или ([^0-9]-) пропускает числительные, однако не может быть использовано для слов, вроде "какоЙ-нибудь", "чтО-либо", "гдЕ-то", поскольку захватывает предшествующую знаку "-" букву, а этого мне не нужно.
- Для таких случаев составлена своя регулярка, ищущая частицы слов "нибудь", "либо", "то" и др., следующих после знака "-".
Как для этого можно использовать "Отрицательное назад смотрящее" (?!=), если вообще можно - и с какой стороны от "-" его ставить?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5909
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 27 дней
Карма: 125

Не пью :
22 года, 2 месяца, 29 дней


Цитата (Denis Tar @ 12.10.2016 - 11:37)
искать (и ПРОПУСКАТЬ) в тексте знаки переноса слов "-" (обычная "черточка"/"минус").

Команда исключения из поиска - не символ "минус", а пара символов "пробел-минус".
Чтобы работало и для первого слова, добавить пробел перед строкой запроса.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Denis Tar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 15
Пользователь №: 43358
На форуме: 2 месяца, 27 дней
Карма:




Цитата (FatCat @ 12.10.2016 - 12:43)
Команда исключения из поиска - не символ "минус", а пара символов "пробел-минус".

Считаем, что текст на предмет "пробелов" нормализован.
речь идет именно о дефисах-переносах слов.

ВСЯ ЗАДАЧА ЦЕЛИКОМ (для понимания практического применения).
Имеется
текст со знаками переносов слов "-" (дефис/минус, не тире; уже заранее лишенный окружения пробелами).
В тексте есть множество слов, каждое из которых требуется привести к виду без переносов - там, где это требуется по правилам языка; соответственно, сохранив написание составных слов, пишущихся через "дефис".
Для этого в редакторе открываем "Заменить" - и осуществляем поиск не всех "-" (поверьте, в 50 МБ чистого неформатированного текста, их встречается ОООЧЕНЬ много) с заменой на "" (пустую строку), а лишь тех, которые не попадают под прописанные Правила (т. е. требуют оценки заменять/пропускать уже вручную).
Обязательные к удалению знака "-" слова: "го-род, вен-тиляция, так-же, коллек-ционер" и т. д.
(в таких "дефис" находим - и удаляем заменой на "пустышку").
Правила, при которых пропускаем слова с переносами:
1. Букво-содержащие частицы, вроде: "как-то, какой-нибудь, что-либо" и др. (здесь регулярку я написал - и она работает);
2. Числительные: 1980-й, 11-классник, 9-е, 16-этажный; 8-495-123-4567, т. е. те, в которых перед "-" содержится цифра.
Конструкции вида (\d-\d) не имеют смысла, поскольку будут выделять цифры слева и справа от "-", т. е. лишают затею логики вовсе
(т. к. вместо замены "-" на "пустышку" придется обработать еще и цифры слева, справа: 8-495-123-4567).
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5909
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 27 дней
Карма: 125

Не пью :
22 года, 2 месяца, 29 дней


Цитата (Denis Tar @ 12.10.2016 - 13:05)
1. Букво-содержащие частицы, вроде: "как-то, какой-нибудь, что-либо" и др. (здесь регулярку я написал - и она работает);

"вагон-ресторан" и "кресло-качалка" тоже обработает правильно?


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Denis Tar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 15
Пользователь №: 43358
На форуме: 2 месяца, 27 дней
Карма:




Цитата (FatCat @ 12.10.2016 - 13:21)
"вагон-ресторан" и "кресло-качалка" тоже обработает правильно?

- Это как-раз-таки к исключениям, исправляемым собственноручно относим.
А вообще словарь часто входящих слов - я сам пополняю по мере встречаемости слов.
Вы болтать будете или советом поможете?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5909
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 27 дней
Карма: 125

Не пью :
22 года, 2 месяца, 29 дней


Я не пользуюсь регулярками там, где мне удобней циклами и строковыми функциями, поэтому буду болтать.

Я бы разбил по пробелу на массив слов и работал со словами. Первым делом, отрезать падежные окончания, и проверить по словарю. Вторым делом проверить слева от дефиса на число.
Обрезка падежных окончаний, мои наработки.
	function clean_y_value($v){
$v = strtolower($v);
if( strlen($v)>8 and in_array(substr($v,-6),array("овская","евская")) )$v = substr($v,0,-6);
elseif( strlen($v)>7 and in_array(substr($v,-5),array("аться","яться","иться","ается","яется","енный","енная","енное")) )$v = substr($v,0,-5);
elseif( strlen($v)>6 and in_array(substr($v,-4),array("ться","аюсь","яюсь","евый","ёвый","овый","овой","евая","ёвая","овая","евое","ёвое","овое","евые","ёвые","овые","ость","есть","йный","йная","ящий","ящая","ящие","вный","вная")) )$v = substr($v,0,-4);
elseif( strlen($v)>5 and in_array(substr($v,-3),array("ать","ять","ить","ого","оем","ому","ает","яет")) )$v = substr($v,0,-3);
elseif( strlen($v)>4 and in_array(substr($v,-2),array("ів","ам","ая","ее","ей","ий","ие","их","ию","ия","ми","ов","ое","ой","ок","ом","оя","ую","ые","ый","ых","ья","ям","ях","яя")) )$v = substr($v,0,-2);
elseif( strlen($v)>3 and in_array(substr($v,-1),array("a","e","i","а","е","и","й","о","у","ы","ь","ю","я","э")) )$v = substr($v,0,-1);
return $v;
}


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Denis Tar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 15
Пользователь №: 43358
На форуме: 2 месяца, 27 дней
Карма:




Цитата (FatCat @ 13.10.2016 - 00:59)
Я не пользуюсь регулярками там, где мне удобней циклами и строковыми функциями...
Я бы разбил по пробелу на массив слов и работал со словами.

- Идея, конечно, неплохая.
Почему я не пишу "хорошая"?
- Лишь потому, что понадобится заморочиться и написать программу-модуль для обработки - и, кажется, овчинка выделки не будет стоить; особенно не будет из-за того, что наш русский язык всё больше захламляется новыми словами (о написании которых сами лингвисты зачастую не успевают договориться в однозначном варианте), поэтому считаю, что есть смысл ручной обработки. НО: при этой же ручной обработке выявляются сочетания, которые действительно с 99%-ной уверенностью можно доверить автоматике.
Задача вообще сведена к простейшей: в текстовом редакторе выполнять Поиск-Замену.
В первом приближении ищем простые "-" и заменяем на "" (пустую строку).
- В этом случае весь файл обрабатывается вручную полностью.
Однако зачем обращать внимание на слова, о которых заведомо понятно, что пишутся они через "дефис"?
"Какой-нибудь", "что-либо", "кто-то", "11-й", "20-этажный", "8-495-123-4567" и др. - тут словарный запас целесообразно самостоятельно пополнять, соответственно направленности своих текстов. - Я к тому, что нет смысла ВЕСЬ Богатый Могучий (..) загонять в словарь, а пользоваться преимущественно своей направленностью; даже в нашем журнале (а журналистика - сама-по-себе направленность обширная) есть свои выделенные темы, под которые словарь "затачивается" по мере вхождения тех или иных слов.
- И как раз для этого проще использовать в Поиске-Замене уже готовой программы-редактора (вместо изобретения собственного велосипеда) Регулярные Выражения, распознающие символы вокруг "-", и, следуя, прописанным в одной длинной строке, правилам, предлагать Заменить/Пропустить или вообще проходить словосочетание мимо заведомо, - тем самым сокращая "принятия решений" на каждом очередном "-" в длинных текстах.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 3 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 12 дней


Цитата (Denis Tar @ 13.10.2016 - 05:51)
для этого проще использовать в Поиске-Замене уже готовой программы-редактора (вместо изобретения собственного велосипеда)

Другими словами регулярка нужна именно под этот редактор? А что за редактор, можно полюбопытствовать?


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Denis Tar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 15
Пользователь №: 43358
На форуме: 2 месяца, 27 дней
Карма:




Цитата (twin @ 13.10.2016 - 10:26)
Другими словами регулярка нужна именно под этот редактор? А что за редактор, можно полюбопытствовать?

Да я полагаю, что любой редактор, который может работать с большими текстами - Notepad++, сам вообще на Dreamweaver'e исправляю.
Запрос-то не предполагает каких-то нестандартных элементов - во всяком случае, как мне кажется, всё там по-простому должно быть.
=====
Только что опробовал в Notepad++ (от безысходности), до чего сам дошел,
что и на другом форуме подсказали:
(?<=\D)-(?!то[\s.,!?]|либо|нибудь)
- Работает... в Notepad++, а Dreamweaver и http://regexr.com никак не хотят понимать "назад смотрящее"... sad.gif
Может, у этих редакторов просто другой синтакс - ведь не может же быть, чтобы "вперед смотрящее" (?! / ?=) было, а "назад" (?<= / ?!= или ?) не было... huh.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 3 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 12 дней


Опс...
Я думал, что есть готовый редактор, который нужно заставить понимать синтаксис регулярки (их несколько, еслив чё)

Теперь понятно, что нужен не скрипт, а результат.

Тогда, на мой взгляд, не нужно искать универсальное решение, а нужно пройтись несколькими рабочими.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Denis Tar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 15
Пользователь №: 43358
На форуме: 2 месяца, 27 дней
Карма:




Цитата (twin @ 14.10.2016 - 23:43)
не нужно искать универсальное решение, а нужно пройтись несколькими рабочими

Всё бы ничего, да файлы огроменные - от 500 до 800 кБ сплошных текстовых знаков, т.е. неформатированного, а, считай, txt-формат.
Программа, которая готовит из pdf такой txt-шник (вернее, это xml даже, но суть одна, тем более тегов там немного - они всего лишь номера страниц означают) уже многое делает, и все же остается много того, что итак в несколько этапов перед запуском регулярки подчищаю.
Тут же и лишние пробелы, и табуляция, и знаки, не входящие в ASCII, коверкающие самые обычные знаки пунктуации на "абра-кадабру", и масса "стандартных" окончаний и суффиксов, которые тоже хочется к каким-то правилам автозамены привлечь.
Здесь: наиболее стандартно - с числительными и набором часто употребляемых однозначно пишущихся "-нибудь", "-либо" и ряд других. И то на практике даже с такими пропусканиями получается обрабатывать за 1 день по 1 файлу.
Глазки, конечно, в кучку сбегаются, но никакой программе доверить полную автоматизацию исправлений с нашим могучим русским - попросту нельзя. Половину слов современного лексикона сами лингвисты-то между собой не договорились как правильно писать.
Так что желание минимум проходок по файлу иметь - вполне оправдано.
-(?!то[\s.,!?]|либо|нибудь) эта регулярка (в хвосте - на самом деле целый словарь слов уже образовался) очень помогает,
к ней хочется еще цифры впереди "дефиса" добавить, чтобы еще и слова, вроде "15-этажный" пропускала.
Кстати, а вот слово "этаж" в "хвост" я не стал ставить. Потому как может встретиться однокоренное "поэтажный", например.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5909
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 27 дней
Карма: 125

Не пью :
22 года, 2 месяца, 29 дней


Цитата (Denis Tar @ 15.10.2016 - 01:08)
Программа, которая готовит из pdf такой txt-шник

Была похожая проблема. Писал вордовый макрос, отсекающий перенос строк по сочетанию дефиса с переводом строки.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса