amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Wörter erkennen ! [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

31.12.2002, 17:38 Uhr

JensB
Posts: 193
Nutzer
Hallo ,

als erstes erstmal Danke für eure Antworten zu meiner anderen Frage .
Werde mir da ein paar gedanken machen (-> Beeblebrox).

Und jetzt zu meine anderen Frage. Kann man irgendwie die stelle im
speicher herausfinden wo ein anderese Programm seinen text hingeschrieben
hat, habe als anhaltspunkt nur den text oder das wort das man auf dem
bildschirm sieht. Sicherlich ne sehr schwere Frage aber gehöhrt zu
einer idee von mir. Oder geht es auch auf einen anderen weg ausser
über die adresse im speicher (das einzige was mir da noch einfält
wäre das wort bzw. den text in ein bild umwandeln und durch eine OCR
jagen aber das würde lange dauern)?

Mfg JensB

[ - Antworten - Zitieren - Direktlink - ]

31.12.2002, 20:11 Uhr

Kronos
Posts: 1168
Nutzer
Hi Jens

was willst du eigentlich genau ?

Hast du einen Text, oder doch nur den Ausdruck auf dem Bildschirm
als Bild ?

Wenn du den Text hast solltest du im Prinzip so vorgehen (gut das
wir kein Mem-Protection haben ;) ).

1. Task suchen der zu dem Zielprogramm gehöhrt.
2. Die Speicherliste dieses Tasks durchsuchen, eventuell auch Stack
und den Speicher in dem das Programm geladen wurde.
3. Mit strncmp() vergleichen.

Eventuell könntest du auch noch vor dem Start Funktionen wie
PrintIText() patchen, ist aber auch keine wirklich saubere Methode.

Wenn der Text in einem Gadget steht kannst du dich auch von der
Window-Structur aus durchhangeln.

MfG
Kronos
--

Only the good die young all the evil seem to live forever

[ - Antworten - Zitieren - Direktlink - ]

01.01.2003, 12:56 Uhr

JensB
Posts: 193
Nutzer
Hi ,


allen zusammen ain gesundes neues Jahr !

-> was willst du eigentlich genau ?

Kennste "Babylon" auf'n PC .

-> Hast du einen Text, oder doch nur den Ausdruck auf dem Bildschirm
als Bild ?


Nur den Bildschrim !!


-> Wenn du den Text hast solltest du im Prinzip so vorgehen (gut das
-> wir kein Mem-Protection haben ;) ).

-> 1. Task suchen der zu dem Zielprogramm gehöhrt.

-> 2. Die Speicherliste dieses Tasks durchsuchen, eventuell auch Stack
-> und den Speicher in dem das Programm geladen wurde.

-> 3. Mit strncmp() vergleichen.


-> Eventuell könntest du auch noch vor dem Start Funktionen wie
-> PrintIText() patchen, ist aber auch keine wirklich saubere Methode.



->Wenn der Text in einem Gadget steht kannst du dich auch von der
->Window-Structur aus durchhangeln.

Hätte ich bei structuren kein Problem mit ,aber z.b. der Text in Fenster
(Hinweistexte oder Fehlermeldungen).


Mfg JensB

[ - Antworten - Zitieren - Direktlink - ]

01.01.2003, 15:04 Uhr

Micha1701
Posts: 938
Nutzer
Hi!

Ich weiß es jetzt nicht genau, aber arbeitet Babylon nicht nur bei Wörtern die per Cut'n'Paste aus dem Text gezogen werden können?

Oder Versuch mal das Wörtchen "Start" in der Taskleiste nach Türkisch übersetzen zu lassen. Ich denke das wird nicht funktionieren, weil Windows da zuerst greifen wird....
--
:boing: Micha :boing:

Look at my HP: http://www.lanser-online.de.vu



[ - Antworten - Zitieren - Direktlink - ]

01.01.2003, 16:11 Uhr

mrbbc
Posts: 101
Nutzer
Wortähnliches in Daten finden ist eigentlich ganz einfach. Im westeuropäischen Sprachraum ist die beste Methode, Blöcke von vielleicht 256 Bytes hintereinander ab zu grasen.

Dabei dürfen z.B. höchstens 20 Zeichen unter Code 32 oder über Code 127 liegen. Vor dem ersten gefundenen Block sollten Bytes noch geholt werden, wenn sie ebenfalls noch in die Kriterien passen, und hinter dem letzten Block ebenfalls.

Je enger du die Grenzen setzt, desto weniger Müll bekommst du, allerdings übergehst du auch immer mehr Text.

Noch präziser, aber komplizierter und langsamer wäre, sicher zu stellen, dass 80% der Zeichen zwischen 0(0x30) und 9(0x39), A(0x41) und Z(0x5A) und a(0x61) und z(0x7A) liegen oder " "(0x20) sind.

Wenn du noch typische Zeichen für Return und Tab dazu nimmst... ist Return beim Amiga Code 0x0D0A wie bei DOS, 0x0A wie bei Unix, 0x0D wie bei MacOS ??? Ist Tab 0x09 nach ANSI oder 0x08 wie beim Atari ST ?

Mit zusätzlich all diesen "space characters" kannst du Daten enorm gut auf Textinhalte eingrenzen.

Noch Kompliziertes lässt sich leider nur an je eine Sprache sinnvoll anpassen. Dazu muss man eine Liste aller möglichen Silben vergleichen. Das ist zwar irrsinnig langsam, kann aber Sinn machen, wenn man gigantonomische Daten wälzen muss.

[ - Antworten - Zitieren - Direktlink - ]

01.01.2003, 16:53 Uhr

Georg
Posts: 107
Nutzer
Zitat:
Ich weiß es jetzt nicht genau, aber arbeitet Babylon nicht nur bei Wörtern die per Cut'n'Paste aus dem Text gezogen werden können?

Nein. Babylon analysiert die Bildschirm Grafik (~screen bitmap).
Läßt ne Art OCR Texterkennung Algorithmus drüber laufen. Halt
so ähnlich wie wenn man Texte per Scanner einliest.



[ - Antworten - Zitieren - Direktlink - ]

01.01.2003, 20:17 Uhr

JensB
Posts: 193
Nutzer
Hi!


-> Ich weiß es jetzt nicht genau, aber arbeitet Babylon nicht nur bei Wörtern die per Cut'n'Paste aus dem Text gezogen werden können?

?? Ich weiß das es früher so war ,da es kein source zu irgendeiner
OCR gab hatte ich nicht mehr weiter drüber nachgedacht. Jetzt habe ich
gleich mehrere. Babylon 3.2 scheint aber anders zu arbeiten (laut
gefühl) da man das wort nur noch an eine belibige stelle anklickt
(mit einer frei wählbaren maustaste z.b. die mittlere, so greift es auch
nicht beim start button). Die übersetzung erfolgt sofort .

Mfg JensB

[ - Antworten - Zitieren - Direktlink - ]

02.01.2003, 13:51 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von mrbbc:
Noch präziser, aber komplizierter und langsamer wäre, sicher zu stellen, dass 80% der Zeichen zwischen 0(0x30) und 9(0x39), A(0x41) und Z(0x5A) und a(0x61) und z(0x7A) liegen oder " "(0x20) sind.

Man kann auch ein komplettes Profil der Zeichenverteilung machen, ohne daß es langsamer wird, benötigt halt nur ein paar bytes mehr.
Oder man benutzt eine switch-ähnliche Konstruktion, bzw. Sprungtabelle in assembler und die Geschwindigkeit ist absolut unabhängig davon, wieviel verschiedene Zeichenbereiche man zählt.
Zitat:
Wenn du noch typische Zeichen für Return und Tab dazu nimmst... ist Return beim Amiga Code 0x0D0A wie bei DOS, 0x0A wie bei Unix, 0x0D wie bei MacOS ??? Ist Tab 0x09 nach ANSI oder 0x08 wie beim Atari ST ?
Zeilenwechsel sind 0x0a wie bei Unix, Tab ANSI-konform 0x09.

Allerdings sagt niemand, daß ein gefundener Text auch auf dem Bildschirm steht, oder überhaupt der Kommunikation mit dem Menschen dient. Somit ist mir der Sinn des Speicherdurchsuchens nicht ganz klar. Was soll dabei herauskommen?

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Wörter erkennen ! [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.