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

Я пытаюсь разработать приложение PHP, где оно принимает комментарии от пользователей, а затем сопоставляет строку, чтобы проверить, является ли комментарий положительным или отрицательным. У меня есть список отрицательных слов в файле absolute.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';
}
}
?>

Ссылка пробовала: Проверить строку на плохие слова?

2

Решение

Я добавил 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;
}
1

Другие решения

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;
}
1

По вопросам рекламы [email protected]