Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateityp ermitteln (https://www.delphipraxis.net/80823-dateityp-ermitteln.html)

Panthrax 16. Nov 2006 03:18

Re: Dateityp ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von sexy_betty
Der Ansatz ist interessant. Ein bischen stört mich da mein perfektionismus. weil nicht immer jede Textdatei dann auch als Textdatei gewertet werden würde. egal, welche kriterien eingeführt werden, normale texte würden leicht erkannt werden, aber extremfälle nicht. was ist zum beispiel mit ganz kurzen texten oder codeausschnitten?

Wenn du auch Extremfälle beachten möchtest, dann musst du dich schon mal hinsetzen und etwas Gehirnschmalz anstrengen. Ich würde auch sagen, du konzentrierst dich zu sehr auf den "angezeigten Text". Soll heißen, ist es denn wirklich interessant "wieviel" Text angezeigt wird? Die Analysen können unabhänig davon laufen. Wenn du es natürlich unbedingt als Kriterium haben willst...

In das von mir vorgestellte Verfahren kannst du es doch auch integrieren: Erstelle eine Zeichenmenge, welche die Zeichen enthält, bei denen die visuelle Darstellung im Memo, RichEdit oder was auch immer abgebrochen wird. Wenn diese Zeichen eine gewisse Häufigkeit haben, kannst du davon ausgehen, das es eine Datei mit Binärdaten ist.

Zitat:

Zitat von sexy_betty
ich ringe mich halt immer nur ungern zu ergebnissen durch, die nur die halbe wahrheit sind

Die ganze Wahrheit wirst du nicht herausfinden können. Es wäre ein Heidenaufwand sämtliche Prüfungen zu implementieren, die das menschliche Gehirn durchrührt, wenn man einen Text (oder eben eine Binärdatei) betrachtet - Formatierung, Sinnzusammenhang der Zeichen usw. Was du so schön als "Kästchen" bezeichnest deutet für dich auf Binärdaten hin? Was ist, wenn es eine japanische, chinesische oder koreanische "Textdatei" ist? Was ist es für eine Datei, wenn du eine Datei Namens "Data.dat" öffnest und "Maus" liest? Vielleicht ist es nur eine Integer-Zahl die darin abgespreicher ist... Das ließe sich durchaus weiter forführen, aber ich denke es ist klar geworden, das mehr dahinter steht.

Zitat:

Zitat von sexy_betty
Ein bischen stört mich da mein perfektionismus.
[...]
wie liest mann denn nun bytes und deren einzelne bits ein?
ratlosigkeit macht sich breit

Ich muss schon sagen: Du hegst eine ordentliche Portion Perfektionismus, dafür dass sich bei dieser Aufgabe so schnell Ratlosigkeit breit macht.

Im Anhang habe ich mein Verfahren einmal implementiert.
  • TCharset und abgeleitete Klassen definieren mir meine Zeichenmengen
  • TDataProcessor wendet meine Zeichenmengenklassen auf eine Datei, einen Stream oder einen Text (String) an; d.h. Es wird gezählt wieviel Zeichen im Text in die jeweiligen Klassen gehören.
  • Das Projekt darum ist nur zwecks Darstelung, was passiert
Zur erklärung der Oberfläche:
  • Die ComboBox oben enthält einen Dateinamen. Dort steht das Argument für ProcessFile(...)
  • Das Memo1, links, zeigt die Ausgabe.
  • Das Memo2, rechts, kann als Eingabe verwendet werden. Dort steht das Argument für ProcessText(...)
Die Buttons sind selbsterklärend. - Erstellt mit Delphi 7 Enterprise. Getestet und fehlerfrei! :zwinker: (Und es funktioniert mit ASCII-Zeichen und Nicht-ASCII-Zeichen. Man kann seine Zeichenmengen beliebig definieren, #0..#255) Viel Spaß beim ausprobieren!

Gruß,
Panthrax.

sexy_betty 16. Nov 2006 13:45

Re: Dateityp ermitteln
 
wow! viele lösungsansätze! danke danke danke!

ich persönlich werde mich da jetzt ein bischen hineinvertiefen, wie gesagt, das ist mir alles ein bischen fremd, aber ihr habt mich ja gut geleitet :), bzw. ja schon fertige lösungsansätze geliefert.
danke!

greetz
sexy_betty

negaH 16. Nov 2006 21:22

Re: Dateityp ermitteln
 
Frage:

betrachtest du WinWord DOC Dateien als Text Dateien ? Die meisten Anwender würden sagen JA, auch zu PDF oder Write Dateien. Ein Analyseprogram das aber mit ASCII Überprüfung arbeitet würde sie als Binärdateien identifizieren (da hilft auch kein Linux, denn das kann es nämlich auch nicht automatisch).

Oder eine EMail, oder HTML Dateien mit Steuerzeichen, oder im gegenteiligen eines als Text formatierte binäre Nachricht zb. in MIME Base64 codiert.

Dh. selbst mit den verrücktestet Codierungen die zb. nur ASCII Zeichen benutzen und sogar regelmäßige Satzzeichen verwenden wie Leerzeichen um Wörter zu simulieren, ist es möglich das sie denoch keinen Text enthalten sondern defakto umcodierte binäre Daten.

Ich selber hatte spaßenshalber ein kleineres Projekt umgesetzt das als Vorstufe eines selbstlerndenen SPAM Filter bei der G..gle Suche helfen sollte. Der Ansatz dabei war eine viel höher-mathematische Auswertung zu machen, also von der Komplexität weitaus höher als einfache Zeichenüberprüfungsverfahren. Dabei wurde die Datei erstmal per FFT = Fouriertransformation in ein kontinulieriches 2D Spektrum umgewandelt und diese vektorisierten Daten in ein vorher trainiertes Neuronales Netz eingespeist. Das NN war zweistufug aufgebaut. Erstmal ein Netz das allgmein nach Binär oder Text klassifizierte und dann verschiedene Netze die spezielle Formate identifizieren sollten.
Es hat gut funktioniert aber bei weitem nicht so gut das es wirklich sehenswert aus Sicht des Aufwandes zum Nutzens war.
Aber die Essenz ist folgende: wenn eine anerkannte Filtertechnologie (FFT) + annerkannte selbstlernende Verfahren (NNs) nicht in der Lage sind zufriedenstellende Muster zu erkennen so wird das auch niemals ein simpler Zeichenvergleich sinnvoll bewerkstelligern können. Das ist keine Arroganz oder sonstwas sondern einfache Logik. Das Problem ist eben das die Definition was wir als Text verstehen ein Prozess ist der eine Wissensdatenbank benötigt. Reine Syntax im Text reicht eben noch nicht aus um eine Text zu identifizieren. Erst wenn wir bekannt Wörter wiedererkennen (Sprache also) könnte es Text sein. Mein Ansatz mit FFT + NNs musste demzufolge unzufriedenstellend sein da die Wissensdatenbank die ein NN als Muster erlernen könnte viel zu gewaltig ist, bzw. die NNs viel zu groß wurden.

Was also geht ist das man bei bekannten Dateiformaten mit bekannten festen Headern nach diesen Identifiers sucht. Zb. bei ausführbaren Modulen also nach "MZ" bzw. genauergsagt nach einem gültigen PE Header. Das haben auch meine NNs gelernt. Aber wenn es darum geht zb. Dateien ohne Header zu unterscheiden wird es enorm schwierig. Zb. einen Unterschied zwischen Verschlüsselten Dateien und ZIP Dateien ist fast unmöglich. Meine NNs haben dann auch wie erwartet reagiert, bei Dateien die fast zufälig erscheinende Daten enthielten konnten sie keine aussagekräftige Entscheidung fällen. Das trifft auch auf Text formartierte Dateien zu, eben zb. auf HTLMs im Vergleich zu C Code oder XML. Aber gerade das war meine "Zielgruppe".


Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz