Benutzereingabebereich (Tippfehler entfernen: Wenn sie keine Speicherplatz (en) habenPython

Python-Programme
Anonymous
 Benutzereingabebereich (Tippfehler entfernen: Wenn sie keine Speicherplatz (en) haben

Post by Anonymous »

Ich erstelle eine Grafikabfrage an Cypher und versuche, Benutzereingaben mit Fuzzy -Matching zu verarbeiten und dann mit Lavenshtein -Distanz zu filtern. Dies funktioniert für die meisten Fälle für mich sehr gut, aber ich kämpfe mit Tippfehlern, wenn der Benutzer einen Typ macht, der keinen Platz dort gibt, wo es sein sollte. Grund ist, warum es fehlschlägt, weil ich nicht die vollständige Zeichenfolge mit einer vollständigen Zeichenfolge vergleiche, sondern dafür das Schiebebefenster. Und wenn ich ein einziges Wort habe, wenn es 2 Wörter sein soll, findet es so viele falsch positive Ergebnisse und trifft selten das Ziel. Das Hauptproblem ist, dass ich kurze Zeichenfolge wie Bangna mit wirklich langen Adressen vergleiche, aber es ist nicht nur mit Adressen zusammenhängen und viele verschiedene domänenspezifische Filter sind vorhanden und können das gleiche Problem haben. 10260 < /p>
und Adressen, die Bang Kapi enthält, das Bang -Chak wird zurückgegeben. fulltext_index = f"{node_label}_fulltext"
modified_value = " ".join(word + "~" for word in value.split())
tokens = value.lower().split()
word_count = len(tokens)

# Split input into words and number positions
word_indices = [i for i, tok in enumerate(tokens) if not tok.isdigit()]
number_indices = [(i, tok) for i, tok in enumerate(tokens) if tok.isdigit()]

# Dynamic Levenshtein distance
if any(char.isspace() for char in value):
dist_dynamic = math.ceil(len(value.replace(" ", "")) / 3)
else:
dist_dynamic = len(value.replace(" ", "")) // 3

fulltext_query = (
f'CALL db.index.fulltext.queryNodes("{fulltext_index}", "{modified_value}") YIELD node, score '
f'WITH node, score, '
f'split(apoc.text.replace(toLower(node.value), "[.,/()]", " "), " ") AS node_tokens, '
f'split(toLower("{value}"), " ") AS input_tokens '
f'WITH node, score, node_tokens, input_tokens, '
f'size(node_tokens) AS node_len, '
f'size(input_tokens) AS input_len '
f'WITH node, score, node_tokens, input_tokens, node_len, input_len, '
f'range(0, node_len - {word_count}) AS node_indices '
f'UNWIND node_indices AS n_idx '
f'WITH node, score, '
f'node_tokens[n_idx..n_idx+{word_count}] AS node_phrase_tokens, '
f'split(toLower("{value}"), " ") AS input_phrase_tokens '
)

# Levenshtein only on non-number tokens
fulltext_query += (
f'WITH node, score, node_phrase_tokens, input_phrase_tokens, '
f'apoc.text.levenshteinDistance('
f'apoc.text.join([i IN range(0, size(input_phrase_tokens)-1) WHERE NOT input_phrase_tokens =~ "\\\\d+" | input_phrase_tokens], " "), '
f'apoc.text.join([i IN range(0, size(node_phrase_tokens)-1) WHERE NOT node_phrase_tokens =~ "\\\\d+" | node_phrase_tokens], " ")'
f') AS dist '
)

# Build WHERE clause
where_conditions = [f'dist

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post