Разбор целых терминов в фильтре ненормативной лексики Python/json
У меня есть файл JSON, содержащий условия для проверки на ненормативную лексику.
["bad", "word", "plug"]
И я использую это (найденный в другой статье) для анализа json и поиска в любом объекте данных по заданным словам.
def word_filter(self, *field_names):
import json
from pprint import pprint
with open('/var/www/groupclique/website/swearWords.json') as data_file:
data = json.load(data_file)
for field_name in field_names:
for term in data:
if term in field_name:
self.add_validation_error(
field_name,
"%s has profanity" % field_name)
class JobListing(BaseProtectedModel):
id = db.Column(db.Integer, primary_key=True)
category = db.Column(db.String(255))
job_title = db.Column(db.String(255))
@before_flush
def clean(self):
self.word_filter('job_title')
Проблема в том, что если я использую строку "сантехник", она не проходит проверку из-за слова "plug" в файле json. Потому что "плю" существо в обоих терминах. Есть ли способ заставить все слово в файле JSON использоваться вместо частичного? Вывод после запуска не является ошибочным:
({ "validation_errors": { "job_title": " job_title has profanity" } })
HTTP PAYLOAD:
{
"job_title":"plumber",
}
1 ответ
Вы можете использовать string.split() как способ выделения целых слов из field_name. Когда вы разделяете, он возвращает список каждой части строки, разделенной указанным разделителем. Используя это, вы можете проверить, присутствует ли профанный термин в разделенном списке:
import json
with open('terms.json') as data_file:
data = json.load(data_file)
for field_name in field_names:
for term in data:
if term in field_name.split(" "):
self.add_validation_error(
field_name,
"%s has profanity" % field_name)
Это может быть рискованным, если есть пунктуация или что-то в этом роде. Например, предложение: "Вот идет солнце". не будет соответствовать плохому слову "солнце" и не будет соответствовать "здесь". Чтобы решить проблему с капиталом, вам нужно изменить весь ввод на строчные:
if term in field_name.lower().split(" "):
Удаление пунктуации немного сложнее, но это должно помочь вам реализовать это.
Вполне возможно, что вам придется рассмотреть еще несколько крайних случаев, так что просто подумайте о двух быстрых случаях, о которых я подумал.