Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [PHP] Скрипт фильтрации по словам 
:(
    Опции темы
enof
Дата 15.4.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 35



Скинь примеры файлов.
PM MAIL ICQ Skype   Вверх
bars80080
Дата 15.4.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 8
Всего: 315



это результат работы всех этих preg_replace, 
тут два варианта, либо твои фильтры так хороши, что вообще всё вычищают,
либо автор кривовато написал (впрочем, если у него не было оригинальных файлов, то вполне можно было ожидать)

если понимаешь, что в регулярках /регулярные выражения - это не пхп/ (я лично нет), то можешь сам попытаться исправить, 
если нет, то придётся возвращаться в раздел пхп и делать тему: мол такой вот код, с такими файлами не корректно работает, отдаёт пустые строки

Добавлено через 1 минуту и 9 секунд
а может и здесь объяснят
PM MAIL WWW   Вверх
enof
Дата 15.4.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 35



input.txt
Код

Здравствуйте!
Нужен скрипт кторый позволит фильтровать тест по конкретным словам.
Есть текстовый файл в котором находятся русские фразы по одной на строку input.txt,
Есть текстовый файл с русскими словами фильтрами filter.txt,
Необходимо чтобы скрипт удалил все фразы в input.txt содержащих слова в filter.txt
Если есть возможность, необходимо чтобы фильтрация не зависила от языка(рус, англ и тд)

filter.txt
Код

текс
файл
!
англ

index.php
Код

<?php
$pattern = "#^.*(?:";
$filter = file_get_contents("filter.txt");
$arr_filter = explode("\n", $filter);   //Если винда, заменить \n на \r\n
array_pop($arr_filter);
foreach($arr_filter as &$v)
    $v = preg_quote($v, "#");
$pattern .= implode("|", $arr_filter). ").*$#m";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.
$subj = preg_replace("#(^|\r?\n)\r?\n#", "", $subj);
file_put_contents("out.txt", $subj);
?>

Получаем out.txt
Код

Нужен скрипт кторый позволит фильтровать тест по конкретным словам.
Необходимо чтобы скрипт удалил все фразы в input.txt содержащих слова в filter.txt

Все проверил, все работает.
PM MAIL ICQ Skype   Вверх
viperson
Дата 15.4.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 5.1.2009

Репутация: -1
Всего: -1



Цитата(enof @  15.4.2009,  16:38 Найти цитируемый пост)
<?php
$pattern = "#^.*(?:";
$filter = file_get_contents("filter.txt");
$arr_filter = explode("\n", $filter);   //Если винда, заменить \n на \r\n
array_pop($arr_filter);
foreach($arr_filter as &$v)
    $v = preg_quote($v, "#");
$pattern .= implode("|", $arr_filter). ").*$#m";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.
$subj = preg_replace("#(^|\r?\n)\r?\n#", "", $subj);
file_put_contents("out.txt", $subj);
?>


Походу пашет. Но будет ли он правильно фильтровать, если в фильтре слово "элек" подразумевает удаление слов электронный и электрический и тд?
PM   Вверх
enof
Дата 15.4.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 35



smile  Скрипту насрать на ваши слова. Он ищет последовательность символов в строке, если встречается, то удаляет.

Добавлено через 25 секунд
Это так сложно проверить?
PM MAIL ICQ Skype   Вверх
viperson
Дата 15.4.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 5.1.2009

Репутация: -1
Всего: -1



Цитата(enof @  15.4.2009,  16:38 Найти цитируемый пост)
<?php
$pattern = "#^.*(?:";
$filter = file_get_contents("filter.txt");
$arr_filter = explode("\n", $filter);   //Если винда, заменить \n на \r\n
array_pop($arr_filter);
foreach($arr_filter as &$v)
    $v = preg_quote($v, "#");
$pattern .= implode("|", $arr_filter). ").*$#m";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.
$subj = preg_replace("#(^|\r?\n)\r?\n#", "", $subj);
file_put_contents("out.txt", $subj);
?>


Походу пашет. Но будет ли он правильно фильтровать, если в фильтре слово "элек" подразумевает удаление слов электронный и электрический и тд?

Одна только проблемка - если слово-фильтр и слово слитно в тексте, то скрипт не понимает.

Это сообщение отредактировал(а) viperson - 15.4.2009, 17:30
PM   Вверх
enof
Дата 15.4.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 35



С вами все впорядке?
PM MAIL ICQ Skype   Вверх
viperson
Дата 15.4.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 5.1.2009

Репутация: -1
Всего: -1



Цитата(enof @  15.4.2009,  17:28 Найти цитируемый пост)
С вами все впорядке? 


Да со мной все OK! Спасибо что поинтересовались.

Одна только проблемка - если слово-фильтр и слово слитно в тексте, то скрипт не понимает, то есть не удаляет эти строки

PM   Вверх
enof
Дата 15.4.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 35



Скрипт не понимает предложений, фраз, слов и т.д. Он ищет в строке последовательность символов, если находит, то удаляет строку.
И если вы посмотрите на мой пост, то увидите в фильтре "текс", и также не увидите в out.txt строк, содержащих слов "текстовый".
Поэтому и интересовался.
PM MAIL ICQ Skype   Вверх
viperson
Дата 15.4.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 5.1.2009

Репутация: -1
Всего: -1



Еще один маленький нюанс - это то, что после удаления строк по фильтрам, он не переносит некоторые строки, то есть

изначально сроки выглядели так:

aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccccccccc
dddddddddddddddddddd

после удаления  по фильтру bbbbbbbbbbbbbbbbbbbb получается:

aaaaaaaaaaaaaaaaaaaa
cccccccccccccccccccccccccccdddddddddddddddddddd

в конечном файле

ну и фильтрация почему-то не на 100 процентов происходит, то есть присутсвуют не удаленые строки. Может нужна двойная фильтрация?



Это сообщение отредактировал(а) viperson - 15.4.2009, 19:03
PM   Вверх
enof
Дата 15.4.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 35



Цитата(viperson @  15.4.2009,  19:57 Найти цитируемый пост)
ну и фильтрация почему-то не на 100 процентов происходит, то есть присутсвуют не удаленые строки. Может нужна двойная фильтрация?

ага, она самая. приведите реальные файлы, на которых вы все это делаете.

Добавлено @ 19:11
Цитата(viperson @  15.4.2009,  19:57 Найти цитируемый пост)
Еще один маленький нюанс - это то, что после удаления строк по фильтрам, он не переносит некоторые строки, то есть

уберите 11 строчку.

Добавлено @ 19:14
А не, чет ступил, 
11 строка
Код

$subj = preg_replace("#(^|\r?\n)(\r?\n)+#", "$1", $subj);


Это сообщение отредактировал(а) enof - 15.4.2009, 19:15
PM MAIL ICQ Skype   Вверх
viperson
Дата 15.4.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 5.1.2009

Репутация: -1
Всего: -1



Цитата(enof @  15.4.2009,  19:09 Найти цитируемый пост)
ага, она самая. приведите реальные файлы, на которых вы все это делаете.


- Фильтрация проходит по всем буквам английской раскладки по некоторым ненужным русским словам и по знакам препинания типа ?/>< 



Это сообщение отредактировал(а) viperson - 15.4.2009, 22:13
PM   Вверх
enof
Дата 15.4.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 35



Киньте два файла, filter.txt и input.txt, на каких не работает фильтрация.
PM MAIL ICQ Skype   Вверх
viperson
Дата 15.4.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 5.1.2009

Репутация: -1
Всего: -1



сорри уже все заработало

Это сообщение отредактировал(а) viperson - 15.4.2009, 22:01
PM   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.