在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')  

问题是,如果我使用字符串"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(" "):

删除标点符号有点复杂,但这应该有助于您实现这一点。

你可能需要考虑更多的边缘案例,所以我想了两个快速的案例。

相关内容

  • 没有找到相关文章

最新更新