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

Поиск:

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


Шустрый
*


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

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



Здравствуйте!

Нужен скрипт кторый позволит фильтровать тест по конкретным словам.

Есть текстовый файл в котором находятся русские фразы по одной на строку input.txt,

Есть текстовый файл с русскими словами фильтрами filter.txt,

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

Если есть возможность, необходимо чтобы фильтрация не зависила от языка(рус, англ и тд)

Буду очень признателен.  smile 





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


Опытный
**


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

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



Код

$filter = explode(" ", file_get_contents("filter.txt"));
$pattern = "#^.*(?:".implode("|", $filter).").*$#mu";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.

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


Шустрый
*


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

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



Цитата(enof @ 14.4.2009,  18:26)
Код

<?
$filter = explode(" ", file_get_contents("filter.txt"));
$pattern = "#^.*(?:".implode("|", $filter).").*$#mu";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.
?>

выдает ошибку

Compilation failed: invalid UTF-8 string at offset 24 in Z:\home\localhost\www\rusfilter\index.php on line 5


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


Опытный
**


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

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



Модификатор u уберите.
PM MAIL ICQ Skype   Вверх
viperson
Дата 14.4.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я не знаю как это сделать так как не знаю что это такое
PM   Вверх
enof
Дата 14.4.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тогда может быть вам надо в центр помощи?
Выведите на экран получившийся шаблон и скиньте.
Код

echo $pattern;


Добавлено через 59 секунд
И еще, подразумевается, что слова в filter.txt разделены пробелом.
PM MAIL ICQ Skype   Вверх
viperson
Дата 14.4.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Слова в filter.txt одиночные, то есть не разделены пробелом.

Warning: preg_replace() [function.preg-replace]: Compilation failed: invalid UTF-8 string at offset 24 in Z:\home\localhost\www\rusfilter\index.php on line 5
#^.*(?:url guest asp интернет магазин смс sms доска comment blog blogs phpbb send bbs message journal yabb клуб ipb товар topic регистрац регестрац безплатно бисплатно rapidshare files letitbit vipfiles www сайт site forum форум http : . + - / \ _ send thread чат рассказ расказ coment тема бесплатн купит что где игр комикс русск таганрог москв питер петер беларус россия самара омск челябинск киев уфа символик красноярск шоп дети зоо zoo саранск животн posting post владивосток новосибирск атрибут создать сообщение wap набережные челны перм новгород заказ телефон мебел истор обои отель ростов знакомств краснодар студи техник термин клан 3d сценари сесси ру com анекдот замок каталог стать тюмен стиль украина тула открыт казань гипс парсинг берлин аватар tube ссылк воронеж услуг стервятник вечеринк пылесос харьков школа пони тольят литератур отчет расшифровк свитч девайс волгоград снег рисован нижний тагил генеколог электр манг встреч практик читат юмор гипс берлин крым free станк досуг минск пони торрент torrent торент torent екатеринбург белгород промыван желуд для флэш flash ).*$#mu

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


Опытный
**


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

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



viperson, Какие еще одиночные? Чем разделены друг от друга?
PM MAIL ICQ Skype   Вверх
viperson
Дата 14.4.2009, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



одно слово на строку, поэтому без пробелов. Я расположил слова через пробел, тоже нет ни какого результата.

Я

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


Опытный
**


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

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



Код

$pattern = "#^.*(?:";
$f = fopen("filter.txt", "r");
$i = 0;
while(!feof($f))
{
    $a = preg_replace("#\r?\n#", "",preg_quote(fgets($f)));
    if($i++ == 0) $pattern .= "$a"; else $pattern .= "|$a";
}
$pattern .= ").*$#mx";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.

вот.

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

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


Шустрый
*


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

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



Цитата(enof @ 14.4.2009,  19:32)
Код

$pattern = "#^.*(?:";
$f = fopen("filter.txt", "r");
$i = 0;
while(!feof($f))
{
    $a = preg_replace("#\r?\n#", "",preg_quote(fgets($f)));
    if($i++ == 0) $pattern .= "$a"; else $pattern .= "|$a";
}
$pattern .= ").*$#mx";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.

вот.

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

ошибок не выдает, но и фильтрации не происходит
PM   Вверх
enof
Дата 14.4.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всмысле не происходит? Вы в файл пишите, или выводите куда потом?
PM MAIL ICQ Skype   Вверх
viperson
Дата 14.4.2009, 19:43 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



та никуда я не пишу. Я не понимаю в пхп. Дайте код, например чтобы писало в out.txt плиз 
PM   Вверх
skyboy
Дата 14.4.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM MAIL   Вверх
enof
Дата 14.4.2009, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



viperson,  ###.  smile  Комментарий прочитайте на последней строке.
http://php.net/file_put_contents
PM MAIL ICQ Skype   Вверх
viperson
Дата 14.4.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что так трудно дописать в скрипт пару строк? Я же говорю что не понимаю в пхп и прошу дописать то что надо, чтобы результат сложило в out.txt
PM   Вверх
bars80080
Дата 14.4.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



что, так трудно прочитать пару строк? или все здесь неимоверным усилием воли сами в себе генерируют документацию?
тогда да, это недоступная простым смертным магия
PM MAIL WWW   Вверх
viperson
Дата 14.4.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bars80080 @ 14.4.2009,  22:16)
что, так трудно прочитать пару строк? или все здесь неимоверным усилием воли сами в себе генерируют документацию?
тогда да, это недоступная простым смертным магия

что, так трудно написать пару строк? я же сказал не понимаю я в пхп. Подруга попросила помочь, моей целью не является изучать пхп, а просто прошу помочь в решении вопроса. Почему все такие умные?! Помогли бы и дело с концом. Прошу ведь не денег в займы.
PM   Вверх
MoLeX
Дата 15.4.2009, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



Цитата(viperson @  14.4.2009,  22:48 Найти цитируемый пост)
что, так трудно написать пару строк?

тебе их и так написали!


Цитата(viperson @  14.4.2009,  22:48 Найти цитируемый пост)
Подруга попросила помочь, моей целью не является изучать пхп, а просто прошу помочь в решении вопроса.

Сам не разбираешься в вопросе, а еще берешься разобраться и помочь человеку! И всю работу перелаживаешь со своих плеч, на плечи незнакомым тебе людей при чем умудряешься им же и хамить.



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
viperson
Дата 15.4.2009, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(MoLeX @  15.4.2009,  05:45 Найти цитируемый пост)
Сам не разбираешься в вопросе, а еще берешься разобраться и помочь человеку! И всю работу перелаживаешь со своих плеч, на плечи незнакомым тебе людей при чем умудряешься им же и хамить.



Ну а как бы ты поступил? Отказал бы в помощи? И я никому не хомил. Все то время, что мы тут общаемся всем знактокам пхп не составило бы труда написать пару строк для завершения скрипта, но нет же надо поиздеваться, хотя я сразу написал что я не знаток и прошу помощи.

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


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



Цитата(viperson @  15.4.2009,  07:38 Найти цитируемый пост)
Отказал бы в помощи?

конечно, если я не в теме то сорри. или же попытался вникнуть в тему


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
viperson
Дата 15.4.2009, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Так все таки кто-то поможет домучать скрипт? Необходимо чтобы результат записывался в out.txt

Код

$pattern = "#^.*(?:";
$f = fopen("filter.txt", "r");
$i = 0;
while(!feof($f))
{
    $a = preg_replace("#\r?\n#", "",preg_quote(fgets($f)));
    if($i++ == 0) $pattern .= "$a"; else $pattern .= "|$a";
}
$pattern .= ").*$#mx";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.


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


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140





--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
viperson
Дата 15.4.2009, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мне понятен код

Код

$filename = 'test.txt';
$somecontent = "Добавить это к файлу\n";

// Вначале давайте убедимся, что файл существует и доступен для записи.
if (is_writable($filename)) {

    // В нашем примере мы открываем $filename в режиме "дописать в конец".
    // Таким образом, смещение установлено в конец файла и
    // наш $somecontent допишется в конец при использовании fwrite().
    if (!$handle = fopen($filename, 'a')) {
         echo "Не могу открыть файл ($filename)";
         exit;
    }

    // Записываем $somecontent в наш открытый файл.
    if (fwrite($handle, $somecontent) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }
    
    echo "Ура! Записали ($somecontent) в файл ($filename)";
    
    fclose($handle);

} else {
    echo "Файл $filename недоступен для записи";
}


но как мне увязать его с моим кодом?
PM   Вверх
MoLeX
Дата 15.4.2009, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



как я понял в переменной $subj у тебя то что тебе надо сохранить?
Код

$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.


вот бери эту переменную и сохраняй


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
viperson
Дата 15.4.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



что-то не так со скриптом. Сохраняет пустой файл.
Код

<?
$pattern = "#^.*(?:";
$f = fopen("filter.txt", "r");
$i = 0;
while(!feof($f))
{
    $a = preg_replace("#\r?\n#", "",preg_quote(fgets($f)));
    if($i++ == 0) $pattern .= "$a"; else $pattern .= "|$a";
}
$pattern .= ").*$#m";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.

// начало записи в файл

$filename = 'out.txt';
$somecontent = "$subj\n";

// Вначале давайте убедимся, что файл существует и доступен для записи.
if (is_writable($filename)) {

    // В нашем примере мы открываем $filename в режиме "дописать в конец".
    // Таким образом, смещение установлено в конец файла и
    // наш $somecontent допишется в конец при использовании fwrite().
    if (!$handle = fopen($filename, 'a')) {
         echo "Не могу открыть файл ($filename)";
         exit;
    }

    // Записываем $somecontent в наш открытый файл.
    if (fwrite($handle, $somecontent) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }
    
    echo "Ура! Записали ($somecontent) в файл ($filename)";
    
    fclose($handle);

} else {
    echo "Файл $filename недоступен для записи";
}


?>


не могу понять что не так. Отработка скрипта происходит без ошибок.

Я так понимаю что может скрипт не понимает что такое "электр". Имеется ввиду и электон и элетонный  и электрический. То есть надо как-то показать скрипту, что необходимо удалить все строки содержащие этот кусок слова. 

Может причина в другом, пока мне понятно.
PM   Вверх
bars80080
Дата 15.4.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Код

$pattern = "#^.*(?:";
$f = fopen("filter.txt", "r");
$i = 0;
while(!feof($f))
{
    $a = preg_replace("#\r?\n#", "",preg_quote(fgets($f)));
    if($i++ == 0) $pattern .= "$a"; else $pattern .= "|$a";
}
$pattern .= ").*$#mx";
$subj = file_get_contents("input.txt");
$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.

// единственное, что забыл автор - закрыть файл
fclose($f);


// а здесь добавляем второй пример
$filename = 'input.txt';
$somecontent = $subj;

// Вначале давайте убедимся, что файл существует и доступен для записи.
if (is_writable($filename)) {

    // В нашем примере мы открываем $filename в режиме "дописать в конец".
    // Таким образом, смещение установлено в конец файла и
    // наш $somecontent допишется в конец при использовании fwrite().
    if (!$handle = fopen($filename, 'a')) {
         echo "Не могу открыть файл ($filename)";
         exit;
    }

    // Записываем $somecontent в наш открытый файл.
    if (fwrite($handle, $somecontent) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }
    
    echo "Ура! Записали ($somecontent) в файл ($filename)";
    
    fclose($handle);

} else {
    echo "Файл $filename недоступен для записи";
}

и что, много изменений?

если нужно не дописать в конец файла, а полностью перезаписать, то вместо 'a' надо поставить 'w' в строчке 
if (!$handle = fopen($filename, 'a')) { 
, что написано в описании к fopen по-русски
PM MAIL WWW   Вверх
viperson
Дата 15.4.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bars80080 @  15.4.2009,  10:05 Найти цитируемый пост)
и что, много изменений?

если нужно не дописать в конец файла, а полностью перезаписать, то вместо 'a' надо поставить 'w' в строчке 
if (!$handle = fopen($filename, 'a')) { 
, что написано в описании к fopen по-русски


Да не много, но по прежнему файл записывается пустой. То есть записыввается, но пустые строки.


я заменил

Код

// а здесь добавляем второй пример
$filename = 'input.txt';


на 

Код

// а здесь добавляем второй пример
$filename = 'out.txt';


для записи результата в отдельный файл.

Может быть для Denwer 3 не подходит такая реализация?

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


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



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

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



не, проверь вначале, что у тебя в $subj:

Код

$subj = preg_replace($pattern, "", $subj); // В $subj очищенный текст.

var_dump($subj);

// начало записи в файл


что напишет, скопируй сюда

Добавлено через 32 секунды
напишет - в смысле, выдаст в браузер
PM MAIL WWW   Вверх
viperson
Дата 15.4.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bars80080 @  15.4.2009,  13:58 Найти цитируемый пост)
что напишет, скопируй сюда

Добавлено через 32 секунды
напишет - в смысле, выдаст в браузер



string(1768) " " Ура! Записали ( ) в файл (out.txt)


количество записей в файле input.txt = 1769, в файле out.txt такое же количество пустых строк


почему-то указывает на на предыдущую строку

Это сообщение отредактировал(а) viperson - 15.4.2009, 15:24
PM   Вверх
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

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


 




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


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

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