Ähnlichkeit von Zeichenketten

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
Benutzeravatar
martin.koeditz
Beiträge: 446
Registriert: Sa 31. Mär 2018, 14:35

Hallo zusammen,

heute habe ich mal ein Problem zu lösen.

Szenario:
In der DB werden diverse Zeichnungen (Pläne) vorgehalten. Zu den Zeichnungen gibt es je einen Index, der den Fortschritt der Planung skizziert. Wir reden also vom gleichen Plan, aber in unterschiedlichen Versionen, also einer Plankette.

Eine Plankette könnte z.B. so aussehen:
STA1-AB-GX.pdf
STA1-AC-GX.pdf
STA1-AD-GX.pdf

Nun lädt ein Benutzer einen neuen Plan hoch und das System soll anhand des Dateinamens erkennen zu welcher Plankette der neue Plan gehört.

Der neue Dateiname könnte z.B. so lauten:
STA1-AE-GX.pdf

Ich muss also irgendwie herausfinden, welcher Dateiname dem neuen am nächsten kommt. Hat hier irgendwie eine Idee, wie sowas umgesetzt werden könnte?

Dank und Gruß
Martin
Martin Köditz
it & synergy GmbH
bfuerchau
Beiträge: 490
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

SQL-technisch kannst du den Begriff mit like oder similar ermitteln.
Per like kann man das z.B. den Begriff Stelle für Stelle mit % ersetzen, also
%TA1-AE-GX
S%A1-AE-GX
ST%1-AE-GX
:
STA1-AE-G%
Dazu muss man dann aufwändig den SQL zusammenstricken mit

Name like '%TA1-AE-GX' or Name like 'S%A1-AE-GX'.

Mit Simalar kann man regex-ähnliche Ausdrücke in der FB angeben.
https://firebirdsql.org/refdocs/langref ... ar-to.html
Da sind die Begriffe einfacher zu generieren.

Name similar to '%TA1--AE--GX|S%A1--AE--GX|....' escape '-'.

Als Muster sind dann auch komplexere Ausdrücke denkbar, was aber nur funktioniert, wenn die Regelen bekannt sind. Wenn also die Versionsnummer immer an dersleben Stelle steht:

Name similar to 'STA1\-A[A-Z]\-GX' escape '\'
Benutzeravatar
martin.koeditz
Beiträge: 446
Registriert: Sa 31. Mär 2018, 14:35

Danke. Leider sind die Dateinamen nicht genormt. Das heißt, die Änderungen können an jeder beliebigen Stelle vorkommen. Vermutlich werde ich sowas wie einen Levenshtein-Distanz-Algorithmus benötigen. Aber wahrscheinlich wird dann die Performance leiden.
Martin Köditz
it & synergy GmbH
bfuerchau
Beiträge: 490
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Gibts das schon fertig?
Wenn ich so meine bekannten ERP-Systeme so sehe, so gibt es in den Stammdaten meist Pflegeprogramme, in denen der Anwender den Link / Namen des neuen Dokuments selber pflegt.
Dazu noch ein Gültigkeitsdatum, ab und/oder bis wann das Dokument gültig ist.
Denn eins ist auch klar, nur über den Namen kannst du nicht entscheiden ob auch der Inhalt passt :).
Woher kommt so eine Anforderung?
Benutzeravatar
martin.koeditz
Beiträge: 446
Registriert: Sa 31. Mär 2018, 14:35

Soweit ich weiß, arbeitet Lucene z.B. mit diesen Algorithmen.
Denn eins ist auch klar, nur über den Namen kannst du nicht entscheiden ob auch der Inhalt passt :).
Das ist klar, wird jedoch zu 98% passen.
Woher kommt so eine Anforderung?
Vom Kunden. :D

Und tatsächlich könnten wir sowas auch bei uns gebrauchen. Du hast das Stichwort ERP-System ja schon gebracht. Wie oft gibt es da doppelte Einträge, weil der eine "Kai Uwe" schreibt, und der nächste "Kai-Uwe". Ruckzuck hat man doppelte Stammdateneinträge. Oder bei der Suche nach Kontaktdaten. Wird "Meyer-Schmidt" mit ohne Bindestrich geschrieben? Da könnte das dem Anwender durchaus helfen. Ich glaube Outlook nutzt ebenfalls Ähnlichkeitssuchen in den Kontakten.

Ich werde das mal austesten. Auch was die Geschwindigkeit angeht. Wenn alles klappt, mache ich ein FB-Package daraus.

Gruß
Martin
Martin Köditz
it & synergy GmbH
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo Martin,

da dieses Problem schon 6 Wochen her ist, gehe ich mal davon aus,
dass Du inzwischen eine gute Lösung gefunden hast.

Da es sich aber bei den Plänen um PDFs handelt, möchte ich gern
noch eine Anregung in den Raum geben.

Ich mache viel mit PDFs und die kommen aus den unterschiedlichsten
Quellen, teils auch Pläne im Facility-Bereich.

Mein erster Ansatz ist immer zuerst ein PDF auf seine OCR-Eigenschaften
zu prüfen.

Wenn kein OCR gegeben ist, dann muss man halt andere Lösungen finden,
aber mit OCR sind sehr komfortable und stabile Lösungen möglich.

Viele Grüße
Bernd
bfuerchau
Beiträge: 490
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Guter Tipp, auch ohne OCR.
Da die meisten PDF-Ersteller Schriften und Texte inzwischen einbetten und Bilder/Zeichnungen z.B. als SVG speichern, ist eine OCR-Interpretation seltener erforderlich.
Somit können Daten direkt ausgelsen werden um den Inhalt zu identifizieren und so Rückschlüsse auf das Speicherziel zu erhalten.
Es gibt auch einige kostenlose Libs um dies bewerkstelligen zu können.
Z.B.: https://www.nuget.org/packages/PdfPig/
Hamburgo
Beiträge: 125
Registriert: Di 28. Mai 2019, 17:28

Hallo bfuerchau,

das liest sich ja spannend.

Wenn ich das richtig verstehe, dann scheint das ja eine .NET-Lib zu sein.

Kann man diese Lib auch unter PHP einbinden ?


OCR ist insofern spannend, weil die meisten Scanner das unterstützen
und somit simples Papier sehr gut auswertbar wird, vorausgesetzt die
Druck-Qualität ist gut.
vr2
Beiträge: 219
Registriert: Fr 13. Apr 2018, 00:13

Hallo Bernd,
Hamburgo hat geschrieben: Mi 11. Okt 2023, 11:36 Kann man diese Lib auch unter PHP einbinden ?
Für php kannst Du pdftotext https://www.xpdfreader.com/pdftotext-man.html einsetzen. Aufruf dann zb so:

Code: Alles auswählen

exec(sprintf('pdftotext -enc UTF-8 %s %s.txt', $tmpname, $tmpname));
Falls das exec in Frage kommt.

Grüße Volker
Benutzeravatar
martin.koeditz
Beiträge: 446
Registriert: Sa 31. Mär 2018, 14:35

Hamburgo hat geschrieben: Mi 11. Okt 2023, 09:07 Hallo Martin,

da dieses Problem schon 6 Wochen her ist, gehe ich mal davon aus,
dass Du inzwischen eine gute Lösung gefunden hast.

...
Guten Morgen Bernd,

hier ging es tatsächlich nur um die Ähnlichkeit der Dateinamen. Dafür habe ich den Levenshtein-Algorithmus als UDR umgesetzt.
Siehe auch: viewtopic.php?f=12&t=283

Gruß
Martin
Martin Köditz
it & synergy GmbH
Antworten