фикс
This commit is contained in:
parent
340fe8993c
commit
630a415aff
@ -1,5 +1,4 @@
|
||||
// Утилита для фильтрации нежелательного контента
|
||||
const Filter = require('bad-words');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
@ -40,28 +39,22 @@ function loadBadWordsFromFile(filePath) {
|
||||
|
||||
class ProfanityFilter {
|
||||
constructor() {
|
||||
// Создаем экземпляр фильтра с английскими словами по умолчанию
|
||||
this.filter = new Filter({ placeHolder: '*' });
|
||||
|
||||
// Загружаем слова из файлов
|
||||
const russianFileWords = loadBadWordsFromFile(path.join(__dirname, 'words.txt'));
|
||||
const englishFileWords = loadBadWordsFromFile(path.join(__dirname, 'en.txt'));
|
||||
|
||||
// Объединяем все источники запрещенных слов
|
||||
const allBadWords = [
|
||||
this.badWords = [
|
||||
...russianBadWords,
|
||||
...datingAppBadWords,
|
||||
...russianFileWords,
|
||||
...englishFileWords
|
||||
];
|
||||
|
||||
// Добавляем все слова в фильтр
|
||||
this.filter.addWords(...allBadWords);
|
||||
|
||||
// Создаем регулярные выражения для проверки производных слов
|
||||
this.generateWordPatterns(allBadWords);
|
||||
this.generateWordPatterns(this.badWords);
|
||||
|
||||
console.log(`Всего загружено ${allBadWords.length} запрещенных слов`);
|
||||
console.log(`Всего загружено ${this.badWords.length} запрещенных слов`);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -106,9 +99,11 @@ class ProfanityFilter {
|
||||
const normalizedText = text.toLowerCase()
|
||||
.replace(/[\s\._\-]+/g, ''); // Удаляем пробелы, точки, подчеркивания, дефисы
|
||||
|
||||
// Проверяем сначала стандартным методом библиотеки bad-words
|
||||
if (this.filter.isProfane(normalizedText) || this.filter.isProfane(text.toLowerCase())) {
|
||||
return true;
|
||||
// Проверяем на простое вхождение запрещенных слов
|
||||
for (const word of this.badWords) {
|
||||
if (normalizedText.includes(word.toLowerCase())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Дополнительная проверка на производные слова через регулярные выражения
|
||||
@ -138,8 +133,13 @@ class ProfanityFilter {
|
||||
clean(text) {
|
||||
if (!text) return '';
|
||||
|
||||
// Сначала используем стандартный метод библиотеки
|
||||
let cleanedText = this.filter.clean(text);
|
||||
let cleanedText = text;
|
||||
|
||||
// Проверяем и заменяем на звездочки каждое запрещенное слово
|
||||
this.badWords.forEach(word => {
|
||||
const regex = new RegExp(`\\b${word}\\b`, 'gi');
|
||||
cleanedText = cleanedText.replace(regex, match => '*'.repeat(match.length));
|
||||
});
|
||||
|
||||
// Затем проверяем на производные слова и заменяем их
|
||||
this.wordPatterns.forEach(pattern => {
|
||||
@ -154,17 +154,25 @@ class ProfanityFilter {
|
||||
* @param {string|Array<string>} words - Слово или массив слов для добавления
|
||||
*/
|
||||
addWords(words) {
|
||||
// Добавляем слова в стандартный фильтр
|
||||
this.filter.addWords(words);
|
||||
|
||||
// Если слова переданы как массив
|
||||
// Добавляем слова в список запрещенных слов
|
||||
if (Array.isArray(words)) {
|
||||
this.badWords.push(...words);
|
||||
this.generateWordPatterns(words);
|
||||
} else {
|
||||
// Если передано одно слово
|
||||
this.badWords.push(words);
|
||||
this.generateWordPatterns([words]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет является ли слово запрещенным
|
||||
* @param {string} word - Слово для проверки
|
||||
* @return {boolean} - true, если слово запрещено, иначе false
|
||||
*/
|
||||
isProfane(word) {
|
||||
return this.hasProfanity(word);
|
||||
}
|
||||
}
|
||||
|
||||
// Экспортируем экземпляр фильтра для использования в приложении
|
||||
|
Loading…
x
Reference in New Issue
Block a user