PHP-код для создания словаря с отрицательным словарем и поиска, если сообщение имеет отрицательные слова

70
5

Я пытаюсь разработать приложение PHP, где он принимает комментарии от пользователей, а затем сопоставляет строку, чтобы проверить, является ли комментарий положительным или отрицательным. У меня есть список отрицательных слов в файле negative.txt. Если слово соответствует списку слов, то я хочу, чтобы простой целочисленный счетчик увеличивался на 1. Я пробовал некоторые ссылки и создал код для проверки отрицательного или положительного комментария, но он соответствует только последнему слову файла. Вот код, который я сделал.

    <?php 
function teststringforbadwords($comment)
{
$file="BadWords.txt";
$fopen = fopen($file, "r");
$fread = fread($fopen,filesize("$file"));
fclose($fopen);
$newline_ele = "\n";
$data_split = explode($newline_ele, $fread);
$new_tab = "\t";
$outoutArr = array();
//process uploaded file data and push in output array
foreach ($data_split as $string)
{
$row = explode($new_tab, $string);
if(isset($row['0']) && $row['0'] != ""){
$outoutArr[] = trim($row['0']," ");
}
}
//---------------------------------------------------------------
foreach($outoutArr as $word) {

if(stristr($comment,$word)){
return false;
}
}
return true;
}

if(isset($_REQUEST["submit"]))
{
$comments = $_REQUEST["comments"];
if (teststringforbadwords($comments))
{
echo 'string is clean';
}
else
{
echo 'string contains banned words';
}
}
?>

Link Tried: Проверьте строку для плохих слов?

спросил(а) 2017-03-15T06:45:00+03:00 3 года, 7 месяцев назад
1
Решение
59

Я добавил функцию strtolower как для ваших $comments и для вашего ввода из файла. Таким образом, если кто-то произнесет STUPID, а не stupid, код все равно обнаружит плохое слово.

Я также добавил trim чтобы удалить ненужные и разрушительные пробелы (например, новую строку).

Наконец, я изменил способ проверки слов. Я использовал preg_match для разделения всех пробелов, поэтому мы проверяем только полные слова и не произвольно запрещаем неправильные строки.

<?php 
function teststringforbadwords($comment)
{
$comment = strtolower($comment);
$file="BadWords.txt";
$fopen = fopen($file, "r");
$fread = strtolower(fread($fopen,filesize("$file")));
fclose($fopen);
$newline_ele = "\n";
$data_split = explode($newline_ele, $fread);
$new_tab = "\t";
$outoutArr = array();
//process uploaded file data and push in output array
foreach ($data_split as $bannedWord)
{
foreach (preg_split('/\s+/',$comment) as $commentWord) {
if (trim($bannedWord) === trim($commentWord)) {
return false;
}
}
}
return true;
}

ответил(а) 2017-03-15T07:04:00+03:00 3 года, 7 месяцев назад
58

1) Сохранение $row['0'] только в том случае, если другие не индексируют слова. Поэтому проблема заключается в том, что вы игнорируете некоторые слова в текстовом файле.

Some suggestion

1) Вставляйте текст в текстовый файл one by one т.е. новую строку, подобную этой, чтобы вы могли легко получить доступ к новой строке, чтобы избежать множественных взрывов и циклов.

 Example: sss.txt
...
bad
stupid
...
...

2) Примените функцию триммера и строчной буквы как к комментариям, так и к плохой строке.

Надеюсь, что он будет работать так, как ожидалось

function teststringforbadwords($comment) 
{
$file="sss.txt";
$fopen = fopen($file, "r");
$fread = fread($fopen,filesize("$file"));
fclose($fopen);

foreach(explode("\n",$fread) as $word)
{

if(stristr(strtolower(trim($comment)),strtolower(trim($word))))
{
return false;
}
}
return true;
}

ответил(а) 2017-03-15T07:58:00+03:00 3 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема