Ich habe eine JSON-Datei mit Begriffen für einen Profanitätsfilter gegen zu überprüfen.Parsen ganze Begriffe in Python/Json Profanity-Filter
Und ich verwende dies (aus einem anderen Artikel gefunden), um den JSON zu analysieren und jedes Datenobjekt nach gesetzten Wörtern zu durchsuchen.
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')
Das Problem ist, wenn ich die Zeichenfolge „Klempner“ verwenden, um die Kontrolle aufgrund des Wortes „Plug“ in der JSON-Datei fehlschlägt. Weil "plu" in beiden Begriffen ist. Gibt es eine Möglichkeit, das gesamte Wort in der JSON-Datei statt einer partiellen zu erzwingen? Ausgabe einmal lief fehlerhaft ist nicht:
({ "validation_errors": { "job_title": " job_title has profanity" } })
HTTP PAYLOAD:
{
"job_title":"plumber",
}
Können Sie die 'field_names' Definition zu Ihrem Codesegment hinzufügen (oder eine Teilmenge davon, wenn es sehr groß ist). Auch Ihre Ausgabe, wenn Sie den Code –
ausführen Ich glaube, ich fügte hinzu, was Sie gefragt haben. – draxous
Ich denke, dass die Daten, die Sie herumreichen, nicht von dem Typ sind, von dem Sie denken, dass er es ist. Wenn Sie 'word_filter ('job_title')' dann innerhalb der 'word_filter'-Methode aufrufen, hat 'field_names' die Inhalte' (' job_title ',) ', d. H. Ein Tupel mit einer Zeichenkette darin. Ihr 'if term in field_name' Test ist dann äquivalent zu' 'plug' in 'test_title'', was im Grunde bedeutet, dass' Does 'plug' als Teilstring in der Zeichenkette 'test_title' existiert? ". Ich glaube nicht, dass du das versuchst ... oder liege ich falsch? –