Показать полную графическую версию : Обработка текстового файла
У меня такой вопрос, есть ли возможность сделать скрипт, который бы из большого объема текста выбирал бы только целые полноценные предложения, начинающиеся с заглавной буквы и заканчивающиеся точкой. При этом чтобы слова типа г. Москва и знаки препинания (троеточие на пример - ... ) за таковые не считались, т.е. есть некий список стоп слов, наличие которых в предложении исключает их. Скажите в каком направлении копать?
Foreigner
17-01-2015, 17:39
XXXp, Приблизительно так на повершелл:
$a = @"
Test? Test! У меня такой вопрос, есть ли возможность сделать скрипт, который бы из большого объема текста выбирал бы только целые полноценные предложения, начинающиеся с заглавной буквы и заканчивающиеся точкой. При этом чтобы слова типа г. Москва и знаки препинания (троеточие на пример - ... ) за таковые не считались, т.е. есть некий список стоп слов, наличие которых в предложении исключает их. Скажите в каком направлении копать?
"@
$a = $a -replace '([^\.\s]{2,})(\.|\?|!)(\s|$)?','$1$2<split>' -split '<split>'
$a | foreach { $_; '-' * 5 }
Подскажите пожалуйста еще, как с помощью регулярок regexp находить троеточие?
Вы не можете ввести троеточие?
Foreigner
19-01-2015, 15:15
Подскажите пожалуйста еще, как с помощью регулярок regexp находить троеточие? »
"\.\.\." или "\.{3,}"
Вот и верь после этого людям ;). Это ж три точки получается, а не троеточие…
Foreigner, а зачем запятая после «3»? Чтобы пропускать возможные последующие точки? Это ведь тогда уже будет не «троеточие», а «четверо-», «пяти-» и прочее «многоточие».
Foreigner
19-01-2015, 17:24
Iska, Это ж три точки получается, а не троеточие… »
Не подумал, что есть такой символ. Regex, как темная книга. Все на ощупь. Наверное там должны быть дополнительные ограничители, пробел или конец строки или еще что-то. Например (posh):
'...' -match '\.{3}' # true
'....' -match '\.{3}' # true
'...' -match '^\.{3}$' # true
'....' -match '^\.{3}$' #' false
Да, походу запятая не нужна, но это не решает проблему точек 3+ (если троеточие не одним символом)
В том то и дело, не находит, нотпад++ находит по регулярке \.\.\., а программа regexfilter нет, она разбивает текст на предложения и удаляет все, которые подходят под ругулярку. Все работает нормально, а с троеточием засада
Foreigner
19-01-2015, 17:40
XXXp, Это бывает. Регулярные выражения не стандартизированы и разные воплощения их не всегда понимаются одинаково. Например sed не поймет "\d" (цифра), ему подавай [0-9]. Или:
echo 'abc' | sed 's/.*/\U&/' # ABC, строка заглавными
'abc' -replace '(.*)','\U$1' # \Uabc\U -- powershell
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC