Что нового

[Данные, строки] Как грамотно из текста удалить другие фрагменты текста ?

vaf

Новичок
Сообщения
186
Репутация
2
Всем доброго часа. Устал биться над следующей проблемой.
Есть текст (файл text.txt во вложении)
и есть текст со словами не несущими смысловой нагрузки: предлоги, союзы, местоимения и т.д. (файл stop_slowa.txt во вложении)
суть в следующем. нужно из текста (text.txt) убрать слова (stop_slowa.txt) они там через запятую.
В чем вся проблема казалось бы столь простой задачи.
например попадается слово "без" его нужно удалить из файла, но если в файле есть слово "безопасный", он так же удалит, т.к. он будет иметь в него вхождение. Ладно, ставлю спереди и сзади по пробелу, чтобы было точное вхождение, но тогда если встретится слово
"без," он его уже не удалит (а надо бы), т.к. оно содержит запятую. Таким образом остаются все слова с кавычками, с запятыми и прочими знаками препинания.
Подскажите как бы решить данную задачу ?
Файлы text.txt и stop_slowa.txt во вложении
Заранее спасибо.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
vaf
А зачем специально заботится о запятых и других знаках препинания?
Их можно удалить все разом регулярным выражением, вроде:
Код:
$text=StringRegExpReplace($text, '[[:punct:]]', '')


Ну, а для удаления слова вместе со знаком препинания "без,":
Код:
$pattern='без'
$text=StringRegExpReplace($text, '(' & $pattern & ')' & '[[:punct:]]', '')


OffTopic:
Это все только для примера, я не так силен в регулярных выражениях... :'(
 
Автор
V

vaf

Новичок
Сообщения
186
Репутация
2
ну в принципе ты прав, попробую.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Код:
$sText = 'без безZXC wewqr 123без321 sfsdf ZVRбез  без. ,без .без ,без'
ConsoleWrite($sText & @CRLF)
$sText = StringRegExpReplace($sText, '([^\wА-Яа-я]|^)без([^\wА-Яа-я]|$)', '$1$2')
ConsoleWrite($sText & @CRLF)

Но есть проблема с повторение искомого слова, если оно повторяется с одним разделителем типа "без без без.без", в таком случае кое-что останется на месте, но можно прогнать выражение повторно для исключения такого эффекта.
 
Автор
V

vaf

Новичок
Сообщения
186
Репутация
2
Вопрос в догонку.
А как с помощью регулярных выражений удалить 2 или более подряд идущих пробелов ?


Добавлено:
Сообщение автоматически объединено:

Извиняюсь, я с регулярными выражениями уже забыл про существование StringStripWS


Добавлено:
Сообщение автоматически объединено:

Посмотрите пожалуйста, все ли учел. В общем на входе любой текст, а на выходе слова без повторений. через запятую, но без тех, что указаны в переменных $p1 .... $p8
Код:
Func  Tag ($text)
   $p1 = "в зависимости от,в соответствии с,по направлению к,применительно к,за исключением,лицом к лицу с,по отношению к,по сравнению с,с точки зрения,в продолжение,независимо от,поблизости от,в отличие от,в преддверии,в результате,в интересах,в отношении,на глазах у,невзирая на,недалеко от,несмотря на,без ведома,в качестве,за вычетом,на предмет,по причине,под эгидой,при помощи,близко от,в связи с,в течение,впредь до,исходя из,на виду у,начиная с,не считая,по поводу,по случаю,под видом,с помощью,следом за,смотря по,в пользу,в случае,вдоль по,вслед за,на благо,наряду с,от имени,по линии,с ведома,в целях,за счёт,от лица,по мере,рядом с,с целью,судя по,в виде,в роли,в силу,в лице,во имя,не без,не за,не в," ; Предлоги с пробелами
   $p2 = "вследствие того что,по причине того что,благодаря тому что,в связи с тем что,по мере того как,после того как и,подобно тому как,до тех пор пока,в силу того что,после того как,ввиду того что,из-за того что,с тех пор как,лишь только,как если бы,как только,прежде чем,потому что,оттого что,как будто,пока не,так как," ; Союзы с пробелами
   $p3 = "произвольное количество,техническое испытание,коммутационная доска,ширина полосы частот,обеспечение качества,в соответствии с чем,строительное стекло,технические условия,в отличие от этого,время по Гринвичу,звуковая частота,вследствие этого,по большей части,во всяком случае,добро пожаловать,посредством чего,исключая ошибки,главным образом,член парламента,в другом месте,Новая Зеландия,в то время как,так или иначе,условная цена,после полудня,таким образом,вслед за этим,зона действий,расход дутья,больше всего,меньше всего,вместо этого,тем временем,тем не менее,после этого,то же самое,кроме того,после того,всякий раз,после чего,в пределах,в будущем,тем самым,не сделал,не делает,не делать,в течение,она будет,это будет,не должен,с тех пор,они будут,они имеют,где после,тогда как,кто будет,кто бы ни,кто бы ни,Вы будете,Вы имеете,не может,не имеет,не иметь,он будет,а именно,кто - то,мы будем,мы имеем,не будет,ни один,то есть,ни один,в целом,все еще,вряд ли,не были,мог бы,не мог,я буду,я имею,не был,все же,и т.д,в чем," ; Слова из Интернета (в пробелами)
   $p4 = "без,безо,благодаря,близ,в,вблизи,ввиду,вглубь,вдоль,взамен,включая,вместо,вне,внизу,внутри,внутрь,во,возле,вокруг,вопреки,впереди,вразрез,вроде,вслед,вследствие,для,до,за,заместо,из,изнутри,изо,к,ко,кроме,кругом,меж,между,мимо,на,наверху,навстречу,над,надо,назад,накануне,наперекор,наперерез,наподобие,напротив,насупротив,насчёт,ниже,о,об,обо,обок,около,окромя,округ,опосля,от,относительно,ото,перед,передо,по,поверх,под,подле,подо,подобно,позади,помимо,поперёк,порядка,посередине,посередь,после,посреди,посредине,посредством,пред,предо,прежде,при,про,против,путём,ради,с,сверх,свыше,сзади,сквозь,скрозь,снизу,со,согласно,спустя,среди,средь,сродни,супротив,через,чрез," ; Предлоги
   $p5 = "что,чтобы,как,когда,едва,только,лишь,пока,ибо,если,коли,раз,ежели,кабы,как,словно,будто,точно,чем,нежели," ; Союзы
   $p6 = "я,что,он,как,этот,они,мы,весь,который,она,так,свой,вы,ты,такой,его,себя,ее,когда,вот,другой,наш,самый,мой,кто,сам,там,какой,их,потом,ничто,каждый,потому,тогда,здесь,всегда,ваш,никто,почему,поэтому,свое,никогда,никакой,некоторый,твой,куда,зачем,сей,туда,всего,откуда,сюда,столь,некий,чего,отсюда,чей,нечто,вон,оттуда,таков,никуда,каков,таковой,кой,оттого,некогда,отчего,нигде,всюду,ничуть,сколь,этакий,ихний,некто,каковой,эдакий,нибудь,почем,отовсюду,ничей,доселе,оный,ниоткуда,экий,сям,никой," ; Местоимения
   $p7 = "и,не,в,что,он,я,на,с,она,как,но,его,это,к,а,все,ее,было,так,же,то,сказал,за,ты,о,у,ему,мне,только,по,меня,бы,да,вы,от,был,когда,из,для,еще,теперь,они,сказала,уже,него,нет,была,ей,быть,ну,ни,если,очень,ничего,вот,себя,чтобы,себе,этого,может,того,до,мы,их,ли,были,есть,чем,или,ней," ; Высокочастотные слова
   $p8 = "отличается,высокой,имеют,высокие,большие,a,второй,о,выше,соответственно,поперек,фактически,объявление,прил,один,после,впоследствии,аг,снова,против,ай,ал,все,почти,один,вперед,уже,также,хотя,всегда,среди,среди,и,другой,любой,любой,площадь,и,не,вокруг,как,в,ау,ай,азимут,быть,стал,становившийся,становится,становление,прежде,заранее,начать,начало,позади,быть,ниже,около,между,вне,миллиард,филиал,оба,ответвление,купленный,но,купить,приблизительно,может,заголовок,надпись,сравни,сантиграмм,замкнутый,нажать,см,компания,компания,com,копия,мог,кай,сделал,сделать,делает,Дон,вниз,дюжина,её,каждый,например,а,восемь,восемьдесят,также,еще,конец,окончание,достаточно,и,даже,каждый,каждый,все,всюду,кроме,немногие,пятьдесят,найти,сначала,пять,для,прежний,прежде,сорок,найденный,четыре,франк,бесплатный,от,далее,гигабит,доберитесь,глоссарий,грамм,пойти,имел,имеет,иметь,приют,он,он,он,справка,следовательно,ее,здесь,вот,здесь,ее,непосредственно,его,непосредственно,его,гм,дом,как,однако,час,сотня,я,если,в,inc,компания.,действительно,информация,в,не,это,это,непосредственно,Джо,соединение,объединение,кг,км,киловатт,последний,позже,последний,фунт,меньше,позволить,давайте,литий,как,вероятно,лютеций,м.,сделанный,сделать,делает,многие,возможно,мегагерц,я,мг,миллигенри,microsoft,мил,миллион,мисс,знак,мл,мм,МС,мо,больше,госпожа,госпожа,мю,очень,должен,милливольт,мВт,мой,самостоятельно,сеть,никогда,однако,новый,затем,нанограмм,никель,девять,девяносто,суш,нет,никто,никто,ни,нет,ничто,теперь,нигде,пар,номер,ню,о,из,прочь,часто,Om,на,однажды,один,только,на,или,org,другой,другие,иначе,наш,наш,самостоятельно,повсюду,собственный,страница,в,возможно,мН,запятая,кегель,скорее,ре,недавний,недавно,сохраненный,кольцо,рутений,сурьма,кажетесь,казавшийся,кажущийся,кажется,семь,семьдесят,несколько,она,она,она,если,Сицзян,сайт,шесть,шестьдесят,см,так,некоторые,иногда,сэр,остановитесь,такой,взятие,десять,текст,тест,испытание,чем,это,это,их,их,непосредственно,тогда,отсюда,там,есть,поэтому,там,они,они,они,они,тридцать,это,те,хотя,тысяча,три,через,повсюду,через,телеметрирование,к,вместе,также,к,концерн,триллион,телевидение,ТВ,двадцать,два,Великобритания,гм,под,если,до,на,нас,использование,используемый,использование,очень,через,был,мы,мы,мы,сеть,вебсайт,хорошо,были,что,безотносительно,когда,откуда,когда,где,везде,где,ли,который,куда,кто,целое,кого,чей,почему,будет,с,без,выигранный,не,Вы,да,Вы,Вы,Вы,ваш,ваши,самостоятельно,самостоятельно,цирконий,во,по,всех," ; слова из интернета
   $p_all = $p1 & $p2 & $p3 & $p4 & $p5 & $p6 & $p7 & $p8
   $pArray_ = StringSplit ($p_all, ",")
   $pArray = _ArrayUnique($pArray_)
   $text = StringRegExpReplace($text, '[[:punct:]«»]', '')
   $text = StringLower (StringStripWS ($text, 4))
   For $z = 2 To UBound($pArray)-2
	  $text = StringReplace ($text, " " & $pArray[$z] & " "," ")
   Next
   
   $tag0 = StringRegExp('aaaaaa ' & $text, '([а-яА-ЯёЁ]{4,})', 3)
   $tag1 = _ArrayUnique($tag0)
   For $x1 = 1 To UBound($tag1)-1
	  FileWrite ("keyword.key", $tag1[$x1] & ",")
   Next
   Return
EndFunc
 
Верх