Замена слов в файле с использованием другого файла в PHP - PullRequest
0 голосов
/ 05 октября 2018

У меня есть файл с отрывком (Assignment2inputfile.txt).Я могу открыть этот файл просто отлично.У меня есть другой файл (стоп-слова), в котором есть список слов, которые, если они найдены в Assignment2inputfile, должны быть заменены словом «стоп» (я поместил его во все заглавные буквы кода, чтобы сразу видеть, когда он работает).Я чувствую, что я на грани того, что мне нужно, но замены не происходит.Это упражнение, поэтому мои переменные называются очень широко или с тем, что они делают (chng -> change -> изменение исходного файла; $ new -> результат изменений)

$x = file_get_contents('Assignment2inputfile.txt');
$chng = str_replace("stopwords",'STOP', $x); 
$new = file_put_contents('Assignment2inputfile.txt', $chng);
echo $new; 

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Здесь я сделаю вам твердое тело (не проверено)

$x = file_get_contents('Assignment2inputfile.txt');

//if file returns false we cant use a boolean as an array, so this is more sensable
if(false === ($stopwords = file('stopwords.txt', FILE_SKIP_EMPTY_LINES))) throw new Exception('Could not load stop words from file');

$stopwords = array_map(function($item){
    return preg_quote(trim($item),'/');
}, $product);
$pattern = '/\b('.implode('|', $stopwords).')\b/';

$chng = preg_replace($pattern, 'STOP', $x); 
$new = file_put_contents('Assignment2inputfile.txt', $chng);

По существу, после фильтрации стоп-слов (массива) вы получите шаблон, подобный этому

/\b(the|and|for)\b/

Шаблон в основном

  • \b граница слова
  • ( ... | ... ) - это ИЛИ

Но вы хотите обрезать их и заключить их в кавычки, как это делает карта массива,

Если вы просто заменяете, используя 'STOP' для всех слов, это будет хорошо.

http://php.net/manual/en/function.file.php

http://php.net/manual/en/function.preg-quote.php

Oh и'stopwords.txt' должно быть именем вашего файла стоп-слов.

0 голосов
/ 05 октября 2018

str_replace может принять массив строк в качестве первого параметра, и он найдет и заменит каждую из них в целевой строке.Итак, здесь

$chng = str_replace("stopwords", 'STOP', $x);

"stopwords" должен быть массивом $stopwords, содержащим список слов из этого файла.

Вероятно, самый простой способ получить этот массив - использовать file, функция, которая считывает файл в массив.

$stopwords = file('stopwords.txt', FILE_IGNORE_NEW_LINES);
$chng = str_replace($stopwords, 'STOP', $x);

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


Сортировка sidenote, но file_put_contents не возвращает новое содержимое, возвращает количество байтов, записанных в файл .Так что если вы хотите увидеть измененный текст, просто echo $chng; вместо $new.

...