我有一个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')
问题是,如果我使用字符串"pipeline",由于json文件中的单词"plug",它将无法通过检查。因为"plu"同时存在于两个术语中。有没有办法强制使用json文件中的整个单词而不是部分单词?运行后输出没有错误:
({ "validation_errors": { "job_title": " job_title has profanity" } })
HTTP PAYLOAD:
{
"job_title":"plumber",
}
您可以使用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(" "):
删除标点符号有点复杂,但这应该有助于您实现这一点。
你可能需要考虑更多的边缘案例,所以我想了两个快速的案例。