-
Inhaltlich verwandte Anmeldungen
-
Die
Erfindung kann allgemein in Verbindung mit Systemen und Verfahren
verwendet werden, die in den nachfolgend aufgeführten Patentanmeldungen offenbart
sind.
- (a) US-Patentanmeldung Nr. 10/143,865, eingereicht am
14. Mai 2002, mit dem Titel „Handwriting
Layout Analysis of Freeform Digital Ink Input", veröffentlicht als US-Patentanmeldung Nr. US2003215139
- (b) US-Patentanmeldung Nr. 10/143,864, eingereicht am 14. Mai
2002, mit dem Titel „Classification
Analysis of Freeform Digital Ink Input", veröffentlicht als US-Patentanmeldung Nr. US2003215145
- (c) US-Patentanmeldung Nr. 10/143,804, eingereicht am 14. Mai
2002, mit dem Titel „An
Incremental System for Real Time Digital Ink Analysis", veröffentlicht als
US-Patentanmeldung
Nr. US2003215138
- (d) US-Patentanmeldung Nr. 10/184,108, eingereicht am 28. Juni
2002, mit dem Titel „Interfacing
With Ink", veröffentlicht
als US-Patentanmeldung Nr. US2003215140
-
Gebiet der Erfindung
-
Aspekte
der vorliegenden Erfindung betreffen Systeme, Verfahren und computerlesbare
Medien, die die Kommunikation zwischen einem Anwendungsprogramm
und elektronischer Tinte (Federstrich) vereinfachen, darunter verschiedene
Tintenobjekte (ink objects) und Tintenteilerobjekte (ink divider
objects). Einige Beispiele für
derartige Systeme, Verfahren und computerlesbare Medien ermöglichen einem
Anwendungsprogramm oder einem Clientcode den Zugriff auf Tintenstrichgruppierungen
verschiedener Granularität
zur Verbesserung des Leistungsvermögens der Anwendungsprogramme
und zudem eine verbesserte Interaktion dieser Programme und ihres
zugeordneten Codes mit digitaler Tinte.
-
Hintergrund
-
Gängige Computersysteme,
insbesondere Computersysteme, die sich graphischer Anwenderschnittstellensysteme
(GUI-Systeme, graphical user interface GUI) bedienen, so beispielsweise
Microsoft WINDOWS, sind hinsichtlich der Annahme von Anwendereingaben
von einer oder mehreren diskreten Eingabevorrichtungen, so beispielsweise
einer Tastatur zum Eingeben von Text und einer Zeigevorrichtung
(beispielsweise eine Maus mit einer oder mehreren Tasten), optimiert,
um die Anwenderschnittstelle zu betreiben. Die allgegenwärtige Tastatur-
und Mausschnittstelle ermöglicht
ein schnelles Erstellen und Modifizieren von Dokumenten, Tabellenblättern, Datenbankfeldern,
Zeichnungen, Fotos und dergleichen. In mancherlei Hinsicht besteht
jedoch ein spürbarer
Mangel mit Blick auf die Flexibilität, die eine Tastatur- und Mausschnittstelle
im Vergleich zu einem nichtcomputerbasierten (das heißt herkömmlichen)
System aus Stift und Papier aufweist. Bei einem herkömmlichen
System aus Stift und Papier kann ein Anwender ein Dokument bearbeiten,
Notizen an den Rand schreiben, Bilder und andere Formen einzeichnen
und dergleichen mehr. In einigen Fällen bevorzugt der Anwender
gegebenenfalls die Verwendung eines Stiftes zum Markieren eines
Dokumentes, anstatt dass er das Dokument an einem Computerbildschirm
bearbeiten möchte,
da er dann in die Lage versetzt wird, Notizen außerhalb der Grenzen der Tastatur-
und Mausschnittstelle frei einzufügen.
-
Einige
Computersysteme ermöglichen
den Anwendern, am Schirm zu zeichnen. So ermöglicht beispielsweise die Anwendung
READER von MICROSOFT den Anwendern, elektronische Tinte (nachstehend
auch als „Tinte" oder „digitale
Tinte" bezeichnet)
einem Dokument hinzuzufügen.
Das System speichert die Tinte und stellt sie auf Anfrage einem Anwender
zur Verfügung.
Andere Anwendungen (so beispielsweise Zeichenanwendungen, die aus
dem Stand der Technik im Zusammenhang mit Palm 3.x und 4.x und Pocket-PC-Betriebssystemen
bekannt sind) ermöglichen
das Erfassen und Speichern von Zeichnungen. Darüber hinaus können verschiedene Zeichenanwendungen,
so beispielsweise Corel Draw, und Fotobearbeitungsanwendungen, so
beispielsweise Photoshop, mit schreibgerätbasierten Eingabewerkzeugen
verwendet werden, so beispielsweise das Tablettwerkzeug (Schreibflächenwerkzeug)
von Wacom. Derartige Zeichnungen enthalten andere Eigenschaften
im Zusammenhang mit den Tintenstrichen, die zur Erstellung der Zeichnungen
verwendet werden. So können
beispielsweise die Linienbreite und die Farbe mit der Tinte gespeichert
werden. Ein Ziel dieser Systeme ist die Nachahmung des Aussehens
und des Umgangs mit echter Tinte, die auf ein Stück Papier aufgebracht wird.
-
Der
Beitrag „Ink
Parsing in Tablet PC" von Sashi
Raghupathy, veröffentlicht
bei Microsoft Research Faculty Summit 2002, befasst sich mit dem Tintenparsen
bei Tablett-PCs (Schreibflächen-PCs). Ein
Tintenparser analysiert eine Tintenseite und entscheidet, welche
Tintenstriche zu Worten, Zeichnungen oder derselben Linie bzw. Zeile
von Worten gehören.
Während
der Layoutanalyse wird kollineare Tinte mit ähnlicher Größe und Ausrichtung identifiziert
und gruppiert. Die Layoutanalyseschritte enthalten eine zeitliche
Liniengruppierung, eine räumliche Blockgruppierung,
eine räumliche
Liniengruppierung, eine Listenerfassung und eine Wortgruppierung.
Die Tinte wird als schriftartig oder zeichnungsartig klassifiziert.
-
Die
Druckschrift
US 5,889,523
A betrifft die dynamische Clusterung zur Erschließung von
bedeutungstragenden Gruppen bei grafischen Objekten. Es wird eine
Hierarchie von grafischen Objektclustern, die Worten, Linien bzw.
Zeilen und Absätzen grob
entsprechen, erzeugt. Der Anwender wählt eine gewünschte Gruppierung
aus, um das Clusterniveau anzupassen. Da das dynamische Gruppierungsverfahren
keine Klassifikation der grafischen Objekte als Worte, Linien oder
Absätze
anstrebt, ist die Auswahltechnik auf Zeichnungen und andere nicht
textartige Notizen wie auch auf textartige Objekte, so beispielsweise
auf Striche, anwendbar.
-
Entsprechend
der Druckschrift
US
5,517,578 A wird eine Reihe von parallelen horizontalen
Linien auf einer Anzeige dargestellt. Diese Linien werden zum Bestimmen
der Art eines Tintenstriches, das heißt zeichnungsartig oder schriftartig,
wie auch zum Ausrichten der Anzeige der Worte verwendet. Vorgesehen
sind eine Zeichenschicht zum Verarbeiten und Speichern von Tintenstrichen,
von denen man herausgefunden hat, dass sie zeichnerischen Kritzeleien ähnlicher
sind, und eine Schreibschicht zum Verarbeiten und Speichern von
Tintenstrichen, von denen man herausgefunden hat, dass sie einer
kursiven Handschrift oder einem gedruckten Text ähnlicher sind.
-
Der
Beitrag „On
Handling Electronic Ink" von Walid
G. Aref, Ibrahim Kamel und Daniel P. Lopresti, veröffentlicht
bei ACM Computing Surveys, New York, NY, US, Band 27, Nr. 4, Dezember
1995, befasst sich mit elektronischer Tinte als Computerdaten erster
Klasse. Eine stiftbasierte Eingabe von einem Digitalisierungstablett
(Digitalisierungsschreibfläche) wird
in Striche segmentiert. Ein Standardsatz von Merkmalen wird extrahiert,
so beispielsweise die Strichlänge
und der insgesamt überstrichene
Winkel, woraufhin die sich ergebenden Vektoren zu einer kleinen
Anzahl von grundliegenden Strichtypen geclustert werden.
-
Der
Beitrag „The
Light Stuff" von
Scott Leibs, veröffentlicht
bei CFO Magazine, 1. Januar 2003, beschreibt ein Tablettbetriebssystem
(Schreibflächenbetriebssystem)
mit digitaler Tinte sowie ein Verfahren zum Erfassen und Aufbewahren
von handschriftlichen Notizen. Anstatt der Überführung des Handgeschriebenen
in herkömmlichen
Text speichert das System das Handgeschriebene als eigenen Datentyp.
-
Die
Druckschrift WO 01/67222 beschreibt einen Tintenmanager, der dafür ausgelegt
ist, Tintenstriche in Tintenphrasen zu organisieren und die Tintenphrasen
für Clientanwendungen
bereitzustellen. Der Tintenmanager bildet eine Schnittstelle zwischen einer
stiftbasierten Eingabeeinrichtung, einer oder mehreren Anwendungen
und einem oder mehreren Handschriftenerkennungsmechanismen. Wird
eine Anwendung erstmalig geöffnet,
so kann sie eine Registrierung bei dem Tintenmanager durch Abgeben eines
Systemaufrufes an den Tintenmanager über eine API-Schicht mit einem
eindeutigen Identifizierer als Argument zur Erklärung des Datentyps, den die Anwendung
von dem Tintenmanager empfangen will, vornehmen. Der Tintenmanager
nimmt periodisch eine Abfrage eines Stifttreibers vor, um gesammelte Tintenstriche
abzurufen, speichert die abgerufenen Tintenstriche und leitet jeden
Tintenstrich an einen Handschriftenerkennungsmanager weiter, der
eine bestimmte vor der Erkennung erfolgende Verarbeitung, so beispielsweise
mittels eines Primitivwortsegmentierungsmodells, vornimmt. Bestimmt
das Wortsegmentierungsmodell, dass ein neuer Tintenstrich ein neues
Wort bildet, so teilt der Handschriftenerkennungsmanager dies dem
Tintenmanager mit, der die Mitteilung als Tintenphrasenbeendigungsereignis behandelt.
Anschließend
teilt der Tintenmanager der Anwendung das Auftreten des Beendigungsereignisses
mit, woraufhin die Anwendung dem Tintenmanager erklärt, ob sie
die Tintenphrase nutzen will. Ist dem so, so veranlasst der Tintenmanager
den entsprechenden Erkenner, die jeweilige Tinteninformation auszusondern.
Andernfalls teilt der Tintenmanager dem Handschriftenerkennungsmanager
das Beendigungsereignis mit und weist ihn an, die Phrase zu erkennen.
-
Die
Druckschrift
US 5,784,504 betrifft
eine TAPI (tablet application program interface TAPI, Tablettanwendungsprogrammschnittstelle),
die Strichdaten empfängt,
die durch einen Strich erzeugt werden, den ein Anwender auf einem
Digitalisierertablett (Digitalisiererschreibfläche) gemacht hat. Die TAPI
fügt die
Strichdaten in eine Datenbank ein. Erwartet das Anwendungsprogramm
eine Texteingabe, so fährt die
TAPI mit dem Emp fangen von Strichdaten fort, bis sie ein Schlussereignis
erfasst, das ein vollständiges handgeschriebenes
Symbol vollendet. Die TAPI bildet anschließend einen Strichgruppeneintrag
in der Datenbank durch Gruppieren von sämtlichen nichtkritzeleiartigen
Strichdaten, die seit dem letzten Abschlussereignis empfangen worden
sind. Die TAPI nimmt ein Routing der Strichgruppendaten an einen Schriftzeichenerkenner
vor, der mögliche
Schriftzeichen ausgibt. Die TAPI fügt die möglichen Schriftzeichen in den
Strichgruppeneintrag ein und teilt dem Anwendungsprogramm jede Aktualisierung
der Datenbank mit.
-
Obwohl
Computersysteme, die elektronische Tinte akzeptieren, bekannt sind,
sind ihre Verfügbarkeit
und Nutzbarkeit zumindest in gewissen Hinsichten derzeit noch ein
wenig beschränkt.
Zur weiteren Steigerung der Verfügbarkeit
und Nutzbarkeit müssen
Anwendungsprogramme Code enthalten, der eine Interaktion und Schnittstellenbildung
mit der elektronischen Tinte ermöglicht.
Entsprechend ist eine Anwendungsprogrammierungsschnittstelle (application
programming interface API), die Codeschreiber in die Lage versetzt,
mit verschiedenen und unterschiedlichen Gruppierungen von Tinte
einfach, flexibel und konsistent umzugehen sowie eine Schnittstelle
zu diesen zu bilden, für
Personen von Nutzen, die Code für
Anwendungsprogramme schreiben wollen, die auf irgendeine Weise mit
elektronischer Tinte interagieren.
-
Zusammenfassung
-
Anwendungen,
die Freihandzeichenoberflächen
implementieren, an denen Anwender beispielsweise elektronische Tinte
auf einer Seite eingeben und mit dieser interagieren können, gehen
mit der Herausforderung des Bestimmens einher, in welchem Umfang
von dem Anwender bereitgestellte Striche gespeichert und manipuliert
werden sollen. Die einfachsten Lösungsansätze für einen
Anwendungsentwickler sind: (1) das einzeln erfolgende Behandeln
jedes Striches oder (2) das gemeinsam erfolgende Behandlung sämtlicher
Striche auf einer Seite oder in einer gegebenen Bearbeitungssitzung. Jeder
dieser Lösungsansätze weist
jedoch schwerwiegende praktische Beschränkungen hinsichtlich der Einfachheit
für den
Endanwender wie auch hinsichtlich der Kompatibilität zu bestehendem
Dokumentlayoutcode auf. Der ideale Lösungsansatz für eine Anwendung
ist die Behandlung der Striche in Gruppen, die Worte, Linien oder
Absätze
umfassen, obwohl dieser Lösungsansatz üblicherweise
sehr schwierig zu implementieren ist. Der Lösungsansatz weist große Vorteile
hinsichtlich der Einfachheit der Anwendung, hinsichtlich der Kompatibilität, hinsichtlich
der Möglichkeiten
einer verbesserten Handschrif tenerkennung und hinsichtlich vieler
anderer Merkmale und dergleichen mehr auf. Es besteht Bedarf an Anwendungsprogrammierungsschnittstellen
API, derer sich Anwendungsprogrammierer bedienen können, um
diese Vorteile auf einfache Weise nutzen zu können, ohne dass sie selbst
bestimmen müssten, wie
die Striche zu gruppieren sind. Hierdurch ist eine Hauptschwierigkeit
bei diesem Lösungsansatz
beseitigt.
-
Die
Aufgabe der vorliegenden Erfindung besteht darin, die Verfügbarkeit
und Nutzbarkeit von Computersystemen, die elektronische Tinte akzeptieren,
zu vergrößern.
-
Die
Aufgabe wird durch die Erfindung gemäß Definition in den unabhängigen Ansprüchen gelöst. Ausführungsbeispiele
sind in den abhängigen
Ansprüchen
aufgeführt.
-
Aspekte
der vorliegenden Erfindung betreffen Systeme und Verfahren zum Verfügbarmachen von
Information für
ein Anwendungsprogramm. Die Systeme und Verfahren können enthalten:
das Speichern einer Vielzahl von Tintenstrichen; das Abgeben oder
Empfangen einer Teilungsanforderung; das in Erwiderung auf eine
Teilungsanforderung erfolgende Gruppieren der gespeicherten Tintenstriche
in eine oder mehrere Gruppierungen von Strichen mit wenigstens einer
ersten vorbestimmten Granularität; und
das Verfügbarmachen
von Information betreffend die eine oder mehreren Gruppierungen
von Strichen für
das Anwendungsprogramm. Die „Information", die für das Anwendungsprogramm
verfügbar
gemacht worden ist, kann beispielsweise wenigstens eine oder mehrere
Gruppierungen von Strichen; Information, die die Anzahl von Gruppierungen
von Strichen mit der ersten vorbestimmten Granularität angibt;
und maschinengenerierten Text, der wenigstens einer von der einen
oder den mehreren Gruppierungen von Strichen entspricht, enthalten.
Die Striche können
in verschiedene unterschiedliche Granularitäten gruppiert werden, so beispielsweise
als Gruppen, die Worte, Linien, Absätze, Sätze, Zeichnungen und dergleichen
mehr, enthalten. Die Gruppierungsaktion kann die Striche zudem in
Gruppierungen mit mehr als einer unterschiedlichen Granularität gruppieren,
und es kann eine Wiederholung nach einer Änderung des Satzes von Tintenstrichen beispielsweise
durch Hinzufügen,
Löschen,
Bewegen, Ändern
der Größe oder
ein anderweitiges Modifizieren von einem oder mehreren Strichen,
erfolgen. Der Anwendungsprogrammcode kann ebenfalls während des
Ablaufs des vorbeschriebenen Verfahrens für den Parser verschiedene Typen
von Parsinginformation bereitstellen, so beispielsweise das Setzen
des Erkenners zur Verwendung während
des Parsings, das Setzen einer während
des Parsings zu verwendenden Sprache, das Setzen einer gewünschten
Gra nularität,
mit der die Striche geparst werden sollen, das Setzen von erwarteten
Linienhöhen
für Textlinien,
die in den Tintenstrichen enthalten sind, und dergleichen mehr.
-
Zusätzliche
Aspekte der vorliegenden Erfindung betreffen Systeme und Verfahren
zum Kommunizieren zwischen einer Anwendung und einem Tintenteilerobjekt,
das Trennstriche speichert, die in Gruppen unterteilt werden sollen.
Gemäß einigen Beispielen
beinhalten die Systeme und Verfahren: (a) das Abgeben einer Teilungsanforderung
an das Tintenteilerobjekt gegebenenfalls durch die Anwendung; (b)
das in Erwiderung auf die Teilungsanforderung erfolgende Aufrufen
eines Teilungsverfahrens, das die gespeicherten Tintenstriche in
eine oder mehrere Gruppierungen von Strichen mit wenigstens einer ersten
vorbestimmten Granularität
(beispielsweise Worte, Linien, Absätze, Sätze, Zeichnungen und dergleichen
mehr) gruppiert; und (c) das Verfügbarmachen von Information
betreffend die eine oder mehreren Gruppierungen von Strichen für die Anwendung. Die
Ergebnisse des Teilungsverfahrens können in einem Tintenteilungsergebnisobjekt
gespeichert werden. Bei einigen Beispielen kann das Tintenteilungsergebnisobjekt
die ursprünglich
unterteilten Tintenstriche enthalten (und dem Anwendungsprogramm einen
Zugriff hierauf ermöglichen)
und zudem ein Abfragen der Gruppierungen von Strichen mit verschiedenen
Granularitäten
erlauben. Bei zusätzlichen
Beispielen der Erfindung kann sich das Teilungsverfahren einer vorbestimmten
oder voreingestellten Sprache bedienen, die für die Tintenstriche charakteristisch
ist, um ein das Festlegen der Gruppierungen der Tintenstriche zu
fördern.
-
Zusätzliche
Aspekte der vorliegenden Erfindung betreffen computerlesbare Medien
mit darauf gespeicherten computerlesbaren Anweisungen zum Durchführen der
verschiedenen Verfahren gemäß vorstehender
allgemeiner Beschreibung. Weitere Aspekte der vorliegenden Erfindung
betreffen computerlesbare Medien mit darauf gespeicherten Datenstrukturen
für verschiedene
Tintenteilerobjekte (ink divider objects), Tintenteilungsergebnisobjekte
(ink division result objects), Tintenteilungseinheitenobjekte (ink
division units objects) und Tintenteilungseinheitsobjekte (ink division
unit objects).
-
Diese
und weitere Merkmale und Aspekte der vorliegenden Erfindung werden
durch eine Betrachtung der nachfolgenden Detailbeschreibung und der
Zeichnung deutlicher.
-
Kurzbeschreibung der Zeichnung
-
Die
vorstehende Zusammenfassung wie auch die nachfolgende Detailbeschreibung
erschließt sich
besser bei einer Betrachtung in Zusammenschau mit der begleitenden
Zeichnung, die beispielhalber und nicht im Sinne einer Beschränkung der beigefügten Ansprüche angegeben
ist.
-
1 ist
ein schematisches Diagramm einer digitalen Allzweckcomputerumgebung,
die zur Implementierung verschiedener Aspekte der Erfindung verwendet
werden kann.
-
2 ist
eine Skizzenansicht eines schreibgerätbasierten Computersystems,
das entsprechend verschiedener Aspekte der vorliegenden Erfindung eingesetzt
werden kann.
-
3 ist
eine allgemeine Übersicht
eines Beispieles für
ein Parsingsystem und/oder ein Verfahren, die im Zusammenhang mit
Beispielen der vorliegenden Erfindung verwendet werden können.
-
4 ist
ein Diagramm, das allgemein die inkrementelle Parsingverarbeitung
zeigt, die im Zusammenhang mit Beispielen der vorliegenden Erfindung
verwendet werden kann.
-
5 ist
ein Beispiel für
verschiedene Layoutanalyseschritte, die im Zusammenhang mit Beispielen
der vorliegenden Erfindung verwendet werden können.
-
6A und 6B zeigen
Beispiele für
Parsingbaumdatenstrukturen, die beispielsweise unter Verwendung
eines Layoutanalysemechanismus ermittelt werden können, der
die in 5 dargestellten Schritte ausführt.
-
7 zeigt
Komponenten und Merkmale eines InkDivider-Objektes (Tintenteilerobjektes),
das bei einigen Beispielen der vorliegenden Erfindung Verwendung
findet.
-
8 zeigt
Komponenten und Merkmale eines InkDivisionResult-Objektes (Tintenteilungsergebnisobjektes),
das bei einigen Beispielen der vorliegenden Erfindung Verwendung
findet.
-
9 zeigt
Komponenten und Merkmale eines InkDivisionUnits-Objektes (Tintenteilungseinheitenobjektes),
das bei einigen Beispielen der vorliegenden Erfindung Verwendung
findet.
-
10 zeigt
Komponenten und Merkmale eines InkDivisionUnit-Objektes (Tintenteilungseinheitsobjektes),
das bei einigen Beispielen der vorliegenden Erfindung Verwendung
findet.
-
11 zeigt
ein weiteres Beispiel eines InkDivider-Objektes (Tintenteilerobjektes),
das bei einigen Beispielen der vorliegenden Erfindung Verwendung
findet.
-
Detailbeschreibung
-
Die
nachfolgende Beschreibung ist in Unterabschnitte gegliedert, um
den Leser zu unterstützen. Diese
Unterabschnitte lauten „Begriffe", „Allzweckcomputer", „Allgemeiner
Hintergrund zur Tintenlayoutanalyse und Klassifikationsanalyse", „Das InkDivider-Objekt
und API", „Der Betriebsablauf
von InkDivider-Objekt und API", „Anwendungsprogrammschnittstellen", „Ein alternatives
InkDivider-Objekt" und „Schlussbetrachtung".
-
I. Begriffe
-
Der
Begriff „Tinte" (ink) bezeichnet
eine Abfolge oder eine Menge bzw. einen Satz von einem oder mehreren
Strichen, die gegebenenfalls mit Eigenschaften versehen sind. Eine
Abfolge von Strichen kann Striche in geordneter Form enthalten.
Die Abfolge kann gemäß der Zeit
der Erfassung oder gemäß dem Ort,
an dem die Striche auf einer Seite auftreten, geordnet sein. Andere
Ordnungen sind ebenfalls möglich.
Ein Satz bzw. eine Menge von Strichen kann Abfolgen von Strichen
oder ungeordnete Striche oder eine beliebige Kombination hieraus
enthalten. Der Begriff „Tinte" kann derart erweitert
werden, dass er zusätzliche
Eigenschaften, Verfahren, Auslöseereignisse
und dergleichen beinhaltet.
-
Der
Begriff „Tintenobjekt" beschreibt eine Datenstruktur,
die einen oder mehrere Tintenstriche mit Eigenschaften, Verfahren
und/oder Ereignissen oder auch ohne diese speichert.
-
Der
Begriff „Strich" bezeichnet eine
Abfolge oder eine Menge bzw. einen Satz von erfassten Punkten. Eine
Abfolge von Punkten kann beim Rendern beispielsweise mit Linien
verbunden werden. Alternativ kann ein Strich als Punkt und Vektor
in Richtung des nächsten
Punktes dargestellt werden. Kurzum, ein Strich soll eine beliebige
Darstellung von Punkten oder Segmenten im Zusammenhang mit der Tinte
beinhalten, und zwar unabhängig
von der zugrundeliegenden Darstellung der Punkte und/oder der Art
der Verbindung der Punkte.
-
Der
Begriff „Punkt" bezeichnet eine
Information, die einen Ort im Raum definiert. Punkte können beispielsweise
relativ zu einem Erfassungsraum (so beispielsweise Punkte auf einem
Digitalisierer), einem virtuellen Tintenraum (Koordinaten in einem Raum,
in dem die erfasste Tinte dargestellt oder gespeichert wird) und/oder
einem Anzeigeraum (Punkte oder Pixel einer Anzeigevorrichtung) definiert
werden.
-
Der
Begriff „Rendern" bezeichnet einen
Prozess des Bestimmens, wie Grafiken und/oder Tinte angezeigt werden
sollen, das heißt
entweder auf einem Schirm, im Druck oder mittels Ausgabe in einem beliebigen
anderen Datenformat.
-
Der
Begriff „Tintensitzung
(ink session)" bezeichnet
einen Zeitraum, ab dem eine Anwendung mit dem Erstellen oder Bearbeiten
von Tinte beginnt, bis ein Parser (das heißt ein InkDivider-Objekt) zum Zwecke
des Untersuchens der Tintenstriche und zur Ausgabe von geparsten
Tintenentitäten
aufgerufen wird. Der Parser kann während einer gegebenen Tintensitzung
mehrmals aufgerufen werden, und es können zwischen den Aufrufen
des Parsers Striche hinzugefügt,
gelöscht
oder auf andere Weise modifiziert werden.
-
II. Allzweckcomputer
-
1 ist
ein schematisches Diagramm eines Beispieles einer geläufigen digitalen
Allzweckcomputerumgebung, die zur Implementierung verschiedener
Aspekte der vorliegenden Erfindung eingesetzt werden kann. Wie in 1 gezeigt
ist, umfasst ein Computer 100 eine Verarbeitungseinheit
oder ein entsprechendes System 110, einen Systemspeicher 120 und
einen Systembus 130, der verschiedene Systemkomponenten,
darunter den Systemspeicher, mit der Verarbeitungseinheit 110 koppelt.
Der Systembus 130 kann ein beliebiger Typ von mehreren Typen
von Busstrukturen sein, darunter ein Speicherbus oder ein Speichercontroller,
ein Peripheriebus und ein lokaler Bus unter Verwendung einer Vielzahl von
Busarchitekturen. Der Systemspeicher 120 enthält einen
Nurlesespeicher (ROM) 140 und einen Speicher mit wahlfreiem
Zugriff (RAM) 150.
-
Ein
grundlegendes Eingabe-/Ausgabesystem 160 (basic input/output
system BIOS), das die grundlegenden Routinen enthält, die
zur Übertragung
von Information zwischen Elementen im Inneren des Computers 100 beitragen,
so beispielsweise während
des Hoch fahrens, ist in dem ROM 140 gespeichert. Der Computer 100 umfasst
darüber
hinaus ein Festplattenlaufwerk 170 zum Lesen von einer (nicht
gezeigten) Festplatte oder zum Schreiben auf diese, ein Magnetplattenlaufwerk 180 zum
Lesen von einer herausnehmbaren Magnetplatte 190 oder zum Schreiben
auf diese und ein für
optische Platten Bedachtes Laufwerk 191 zum Lesen von herausnehmbaren
optischen Platten 199 oder zum Schreiben auf diese, so
beispielsweise CD-ROMs oder andere optische Medien. Das Festplattenlaufwerk 170,
das Magnetplattenlaufwerk 180 und das für optische Platten gedachte
Laufwerk 191 sind mit dem Systembus 130 über eine
Festplattentreiberschnittstelle 192, eine Magnetplattentreiberschnittstelle 193 beziehungsweise
eine für
optischen Platten gedachte Treiberschnittstelle 194 verbunden.
Die Treiber und ihre zugehörigen
computerlesbaren Medien stellen einen nichtflüchtigen Speicher mit computerlesbaren
Anweisungen, Datenstrukturen, Programmmodulen und anderen Daten
für den
Personalcomputer 100 bereit. Wie sich einem Fachmann auf
dem einschlägigen Gebiet
erschließt,
können
auch andere Arten von computerlesbaren Medien, die Daten speichern
können,
auf die ein Computer zugreifen kann, so beispielsweise Magnetkassetten,
Flash-Memory-Karten, digitale Videodisks, Bernoulli-Kartuschen,
Speicher mit wahlfreiem Zugriff (RAMs), Nurlesespeicher (ROMs) und
dergleichen, in der als Beispiel angegebenen Betriebsumgebung eingesetzt
werden.
-
Eine
Anzahl von Programmmodulen kann auf dem Festplattenlaufwerk 170,
der Magnetplatte 190, der optischen Platte 199,
dem ROM 140 oder dem RAM 150 gespeichert sein,
darunter ein Betriebssystem 195, ein oder mehrere Anwendungsprogramme 196,
andere Programmmodule 197 und Programmdaten 198.
Ein Anwender kann über
Eingabevorrichtungen Befehle und Informationen in den Computer 100 eingeben,
so beispielsweise über
eine Tastatur 101 und eine Zeigevorrichtung 102.
Andere Eingabevorrichtungen (nicht gezeigt) sind beispielsweise
ein Mikrofon, ein Joystick, ein Gamepad, eine Satellitenschüssel, ein
Scanner oder dergleichen mehr. Diese und andere Eingabevorrichtungen
sind mit der Verarbeitungseinheit 110 über eine serielle Portschnittstelle 106 verbunden,
die mit dem Systembus 130 gekoppelt ist, der mit anderen
Schnittstellen verbunden sein kann, so beispielsweise als Parallelport,
Gameport oder als universeller serieller Bus (universal serial bus
USB). Darüber
hinaus können
diese Vorrichtungen direkt mit dem Systembus 130 über eine
geeignete Schnittstelle (nicht gezeigt) gekoppelt sein. Ein Monitor 107 oder
eine andere Art von Anzeigevorrichtung ist zudem mit dem Systembus 130 über eine
Schnittstelle verbunden, so beispielsweise einen Videoadapter 108.
Zusätzlich
zu dem Monitor 107 umfassen Personalcomputer üblicherweise
andere Peripherieausgabevorrichtungen (nicht gezeigt), so beispielsweise
Lautsprecher und Drucker. So sind beispielsweise ein Stiftdigitalisierer (pen
digitizer) 165 und ein zugehöriger Stift oder eine Anwendereingabevorrichtung 166 vorhanden,
um das digitale Erfassen einer freihändigen Eingabe zu ermöglichen.
Der Stiftdigitalisierer 165 kann mit der Verarbeitungseinheit 110 über die
serielle Portschnittstelle 106 und den Systembus 130,
wie in 1 gezeigt ist, oder über eine beliebige andere geeignete
Verbindung verbunden sein. Darüber
hinaus kann ungeachtet der Tatsache, dass der Digitalisierer 165 als
von dem Monitor 107 getrennt dargestellt ist, der nutzbare
Eingabebereich des Digitalisierers 165 mit dem Anzeigebereich
des Monitors 107 koextensiv sein, das heißt sich
in der gleichen Ebene wie dieser erstrecken. Zudem kann der Digitalisierer 165 in den
Monitor 107 eingebaut sein, oder er kann als gesonderte
Vorrichtung vorliegen, die über
dem Monitor 107 liegt oder auf andere Weise an diesen angegliedert
ist.
-
Der
Computer 100 kann in einer vernetzten Umgebung unter Verwendung
von logischen Verbindungen mit einem oder mehreren entfernt angeordneten
Computern, so beispielsweise einem entfernt angeordneten Computer 109,
arbeiten. Der entfernt angeordnete Computer 109 kann ein
Server, ein Router, ein Netzwerk-PC, eine Peervorrichtung oder ein
anderer gängiger
Netzwerkknoten sein und beinhaltet üblicherweise viele oder alle
Elemente gemäß vorstehender
Beschreibung im Zusammenhang mit dem Computer 100, obwohl
in 1 nur eine Speicherablagevorrichtung 111 mit
zugehörigen
Anwendungsprogrammen 196 dargestellt ist. Die in 1 dargestellten
logischen Verbindungen beinhalten ein Ortsbereichsnetzwerk (LAN) 112 und
ein Großbereichsnetzwerk
(WAN) 113. Derartige Netzwerkumgebungen sind in Büros, firmenweiten
Computernetzwerken, Intranets und dem Internet äußerst verbreitet und bedienen
sich verdrahteter oder drahtloser Kommunikationssysteme.
-
Bei
Verwendung in einer LAN-Netzwerkumgebung ist der Computer 100 mit
dem örtlichen
Netzwerk 112 über
eine Netzwerkschnittstelle oder einen Adapter 114 verbunden.
Bei Verwendung in einer WAN-Netzwerkumgebung umfasst der Personalcomputer 100 üblicherweise
ein Modem 115 oder andere Mittel zum Aufbau von Kommunikationsverbindungen über das
Großbereichsnetzwerk 113,
so beispielsweise mit dem Internet. Das Modem 115, das intern
oder extern sein kann, ist mit dem Systembus 130 über die
serielle Portschnittstelle 106 verbunden. In einer vernetzten
Umgebung können
Programmmodule, die im Zusammenhang mit dem Personalcomputer 100 oder
Teilen hiervon gezeigt sind, in einer entfernt angeordneten Speicherablagevorrichtung
gespeichert sein.
-
Es
ist einsichtig, dass die gezeigten Netzwerkverbindungen nur beispielhalber
gezeigt sind und andere Techniken zum Aufbau von Kommunikationsverbindungen
zwischen Computern zum Einsatz kommen können. Die Existenz eines beliebigen
von den verschiedenen bekannten Protokollen, so beispielsweise TCP/IP,
Ethernet, FTP, HTTP und dergleichen, wird vorausgesetzt, wobei das
System in einer Client-Server-Konfiguration betrieben werden kann,
um einen Anwender in die Lage zu versetzen, Webseiten von einem
webbasierten Server abzurufen. Ein beliebiger Browser von den verschiedenen gängigen Browsern
kann zur Anzeige und Manipulation von Daten auf den Webseiten verwendet
werden.
-
2 zeigt
ein Beispiel für
ein stiftbasiertes oder schreibgerätbasiertes Computersystem 201, das
in Verbindung mit verschiedenen Aspekten der vorliegenden Erfindung
verwendet werden kann. Beliebige oder sämtliche Merkmale, Untersysteme
und Funktionen in dem System von 1 können in
dem Computer von 2 enthalten sein. Das stiftbasierte Computersystem 201 beinhaltet
eine große
Anzeigefläche 202,
so beispielsweise eine digitalisierende Flachschirmanzeige, so beispielsweise
einen Flüssigkristallanzeigeschirm
(liquid cristal display LCD), auf dem eine Mehrzahl von Fenstern 203 angezeigt wird.
Unter Verwendung des Schreibgerätes 204 kann
ein Anwender auf der digitalisierenden Anzeige 202 eine
Auswahl vornehmen, eine Markierung einfügen und/oder schreiben. Beispiele
für geeignete
digitalisierende Anzeigeflächen 202 sind
unter anderem elektromagnetische Stiftdigitalisierer, so beispielsweise
die Stiftdigitalisierer von Mutoh oder Wacom. Andere Arten von Stiftdigitalisierern,
so beispielsweise optische Digitalisierer, können ebenfalls verwendet werden.
Das stiftbasierte Computersystem 201 interpretiert Kritzeleien,
die unter Verwendung des Schreibgerätes 204 gemacht worden
sind, um Daten zu manipulieren, Text einzugeben, Zeichnungen zu
erstellen und/oder herkömmliche
Computeranwendungsaufgaben, so beispielsweise bei Tabellenkalkulationen,
Textverarbeitungsprogrammen und dergleichen mehr, auszuführen.
-
Das
Schreibgerät 204 kann
mit einer oder mehreren Tasten oder anderen Merkmalen zur Steigerung
seiner Auswahlmöglichkeiten
versehen sein. Gemäß einem
Beispiel kann das Schreibgerät 204 als „Bleistift" oder „Stift" implementiert werden,
bei dem ein Ende ein Schreibelement und das andere Ende ein „Löschende" bilden. Bei einer
Bewegung über
die Anzeige in der Funktion als Löscher gibt der Löscher Abschnitte
der Anzeige an, die gelöscht
werden sollen. Andere Arten von Eingabevorrichtungen, so beispielsweise
eine Maus, ein Trackball oder dergleichen, können ebenfalls verwendet werden.
Darüber
hinaus kann auch der Finger eines Anwenders als Schreibgerät 204 sowie
zur Auswahl und Anzeige von Abschnitten des angezeigten Bildes auf
einer berührungsempfindlichen
oder näherungsempfindlichen
Anzeige verwendet werden. Infolgedessen soll der Begriff „Anwendereingabevorrichtung" im Sinne der vorliegenden
Beschreibung eine sehr allgemeine Definition aufweisen und sämtliche
Variationen von bekannten Eingabevorrichtungen, so beispielsweise an
dem Schreibgerät 204,
umfassen. Der Bereich 205 zeigt einen Rückkopplungs- oder Kontaktbereich,
der den Anwender in die Lage versetzt zu bestimmen, wo das Schreibgerät 204 die
Anzeigefläche 202 kontaktiert.
-
Eine
Anwendungsprogrammschnittstelle und die zugehörigen Systeme und Verfahren
entsprechend den Beispielen der Erfindung können in stiftbasierten Computersystemen
verwendet werden, die elektronische Tinte und Tintenstriche akzeptieren und
verarbeiten, so beispielsweise in denjenigen, die im Zusammenhang
mit 2 beschrieben werden.
-
III. Allgemeiner Hintergrund zur Tintenlayoutanalyse und
Klassifikationsanalyse
-
A. Allgemeine Beschreibung eines Tintenanalysegesamtsystems
und eines zugehörigen
Verfahrens
-
Um
das Verständnis
der vorliegenden Erfindung zu fördern,
ist die Wiederholung von bestimmtem Hintergrundwissen zur Thematik „Layoutanalyse" und „Tintenklassifikationsanalyse" (auch „Tintenparsing" genannt) von Nutzen.
Obwohl eigentlich beliebige geeignete Datenverarbeitungssysteme
und Verfahren verwendet werden können,
ohne den Schutzbereich der Erfindung zu verlassen, können bei
einigen Beispielen der Erfindung Layoutanalysesysteme und Verfahren
entsprechend denjenigen, die in der am 14. Mai 2002 eingereichten
US-Patentanmeldung Nr. 10/143,865 beschrieben sind, verwendet werden.
Bei einigen anderen Beispielen der Erfindung können Klassifikationsanalysesysteme und
zugehörige
Verfahren entsprechend denjenigen, die in der am 14. Mai 2002 eingereichten
US-Patentanmeldung Nr. 10/143,864 beschrieben sind, verwendet werden.
Im Allgemeinen kann das Tintenparsing auf beliebige geeignete Weise
stattfinden, ohne den Schutzbereich der Erfindung zu verlassen.
-
3 ist
ein schematisches Diagramm, das allgemein ein Beispiel für ein Gesamtsystem
und ein zugehöriges
Verfahrens zeigt, bei denen bei einigen Beispielen der Erfindung
Tinte geparst oder unterteilt werden kann. Gemäß dem Beispiel von 3 werden
Einlauf- oder Eingabetintenstriche 300 zunächst einer
Layoutanalyseprozedur 302 unterzogen, die die Eingabetintenstriche 300 zu
verknüpften
Sätzen bzw.
Mengen von Strichen, so beispielsweise zu Worten, Linien, Absätzen (oder
Blöcken)
und/oder anderen Gruppierungen 304, kombiniert und parst. Im
Allgemeinen greifen das Layoutanalyseverfahren oder das zugehörige System 302 auf
bestimmte Informationen im Zusammenhang mit Größe und Layout der Tintenstriche 300 auf
einer Seite zu und gruppieren bestimmte Striche in Abhängigkeit
von der Größe, dem
Layout und dergleichen. Ein Beispiel für ein derartiges System oder
Verfahren wird detaillierter anhand 5, 6A und 6B beschrieben.
-
Nach
der Layoutanalyse 302 können
die Daten an eine Vielzahl von zusätzlichen Tintenanalysemechanismen übergeben
werden. Bei dem in 3 dargestellten Beispielssystem
werden die Daten anschließend
an ein Klassifikationsanalysesystem oder einen entsprechenden Mechanismus 306 überführt. Dieses
Klassifikationsanalysesystem oder dieser Klassifikationsanalysemechanismus 306 bestimmt den
Typ beziehungsweise die Typen von Strichen, die in den spezifischen
Eingabedaten enthalten sind (beispielsweise ob einzelne Striche
oder Mengen von Strichen Flussdiagramme, Freihandzeichnungen, handgeschriebene
Texte, Musik, Mathematik, Tabellen, Grafiken und dergleichen mehr
darstellen). Bei einigen Beispielen der Erfindung kann der Anwender gegebenenfalls
das System „davon
in Kenntnis setzen",
welche Art von Eingabestrichen vorliegt, so beispielsweise durch
Auswahl eines „Zeichenmodus", eines „Textmodus" oder dergleichen,
oder durch Zuweisung eines spezifischen Strichtyps an einen oder mehrere
Striche (beispielsweise unter Verwendung einer block- oder lassobasierten
Auswahl- und Zuweisungsprozedur).
-
Die
weitere Verarbeitung des Tintenstriches kann von der Art des Striches
abhängen,
der von dem Klassifikationsanalysesystem oder dem Klassifikationsanalysemechanismus 306 (oder
auch durch Bestimmung auf andere Weise) erkannt worden ist. So können beispielsweise
bei Strichen und Sätzen von
Strichen, die als handschriftlicher Text klassifiziert worden sind,
die auf diese Weise klassifizierten Sätze von Strichen an ein Handschriftenerkennungssystem 310 oder
ein anderes geeignetes Verarbeitungssystem weitergeleitet werden.
Falls notwendig oder erwünscht
können
vor der Weiterleitung an das Handschriftenerkennungssystem 310 oder
ein anderes Verarbeitungssystem die Eingabetintendaten unter Verwendung
eines Normalisierungsalgorithmus oder eines Normalisierungssystems 308 „normalisiert" werden, um die Eingabetintendaten
zum Zwecke der Analyse durch das Handschriftenerkennungssystem 310 oder
ein anderes Verarbeitungssystem in optimale Ausrichtung zu bringen
(beispielsweise durch Drehen von geneigten Eingabetextstrichen bezüglich einer
horizontalen Grundlinie, falls notwendig). Es können hierbei herkömmliche
Normalisierungssysteme oder zugehörige Verfahren 308 und/oder
Handschriftenerkennungssysteme oder zugehörige Verfahren 310 (falls
notwendig und/oder erwünscht)
verwendet werden, ohne den Schutzbereich der Erfindung zu verlassen.
Die Datenausgabe von dem Handschriftenerkennungssystem oder dem zugehörigen Verfahren 310 kann
maschinengenerierter Text sein oder einen Verweis hierauf enthalten (beispielsweise
Linien, Worte, Absätze
und dergleichen), der auf herkömmliche
Weise verwendet werden kann, so beispielsweise in geläufigen Textverarbeitungssystemen
(beispielsweise Microsoft WORD® oder dergleichen), E-Mail-Verwaltungssystemen,
Kalendern, Terminbüchern
und dergleichen mehr.
-
Ein
weiteres Beispiel ist in 3 dargestellt. Erkennt der Klassifikationsanalysemechanismus 306 die
Eingabestriche oder Sätze
von Strichen dahingehend, dass sie Zeichenstriche enthalten, so
können diese
Daten sodann an ein Anmerkungserkennungssystem oder ein zugehöriges Verfahren 314 übertragen
werden, das beispielsweise zur Erkennung von Textinformation in
der Zeichnung verwendet werden kann. Die weitere Verarbeitung kann
auf beliebige geeignete Weise erfolgen. Die Zeichnungen können, falls
erwünscht,
beispielsweise „bereinigt" werden, wobei die
handgeschriebenen Anmerkungen durch maschinengenerierten Text ersetzt
werden und handgeschriebene Zeichenlinien oder Formen (beispielsweise
Kreise, Dreiecke, Rechtecke und dergleichen mehr) durch maschinengenerierte
Elemente ersetzt werden und dergleichen mehr. Zudem können die
Zeichnungen (seien sie nun handschriftlich erstellte Fassungen oder
später
erzeugte maschinengenerierte Fassungen) in beliebige geeignete Programme
oder Systeme eingegeben werden, ohne den Schutzbereich der Erfindung
zu verlassen.
-
Die
Klassifikationsanalysesysteme und Verfahren 306, die bei
einigen Beispielen der Erfindung verwendet werden, können zudem
andere spezifische Schrift- oder Zeichentypen erkennen, ohne den Schutzbereich
der Erfindung zu verlassen. So kann ein Klassifikationsanalysesystem
beispielsweise Eingabestrichsätze
dahingehend erkennen, dass sie musikalische Zeichen, mathematische
Information (beispielsweise Formeln, mathematische Symbole (+, –, =, %,
x, sin, cos, tan etc.) und dergleichen mehr), Tabellen, Karten,
Graphen, Flussdiagramme, schematische Diagramme, Zeichnungen, Skizzen, Doodles
und dergleichen mehr enthalten, ohne den Schutzbereich der Erfindung
zu verlassen. Derartige Sätze
von Strichen können,
falls vorhanden, an einen oder mehrere spezialisierte Erkennungssysteme und/oder
an andere geeignete Verarbeitungsanwendungen übersandt werden, ohne dass
man den Schutzbereich der Erfindung verließe.
-
Einige
oder sämtliche
der Funktionen, die im Zusammenhang mit 3 beschrieben
worden sind, können
an den Eingabetintendaten ausgeführt
werden, nachdem ein Anwender sämtliche
Tinte auf der elektronischen Seite oder in dem Dokument eingegeben
hat (beispielsweise nach anwenderseitiger Eingabe eines Befehls
wie „Speichern", „Parsen", „Schließen" oder „Erkennen"). Aufgrund der Computerverarbeitungszeit,
die zur Durchführung
von typischen Layoutanalysen und Handschriftenerkennungsanalysen
von Nöten
ist, kann ein Anwender jedoch mit spürbaren Verzögerungen rechnen, wenn eine
Verarbeitung auf dieser eher seltenen ad-hoc-Basis vorgenommen wird.
Die Verarbeitungsverzögerungen
können
lange genug andauern, um den Anwender beim Warten, dass das Computersystem
seine Analysen beendet, zu frustrieren, bevor eine Bewegung zur
nächsten
gewünschten
Operation erfolgt (beispielsweise Eingabe von mehr Tinte, Bewegung
auf eine neue Seite, Drucken, Öffnen
eines neuen Dokumentes oder einer Anwendung und dergleichen mehr),
was insbesondere dann der Fall ist, wenn das elektronische Dokument
lang ist oder eine große
Tintenmenge enthält.
-
Systeme
und Verfahren entsprechend wenigstens einigen Beispielen der vorliegenden
Erfindung ermöglichen,
dass stiftbasierte Computersysteme verschiedene Analysen ausführen, so
beispielsweise eine Layoutanalyse 302, eine Klassifikationsanalyse 306,
eine Handschriftenerkennungsanalyse 310 und dergleichen
mehr, und dies inkrementell und in Echtzeit, während Anwender die stiftbasierten Computersysteme
weiterverwenden (beispielsweise beim Eingeben und/oder Modifizieren
der Tintenstriche auf der Seite). Darüber hinaus arbeiten bei einigen
Beispielen der Systeme und Verfahren entsprechend der vorliegenden
Erfindung die verschiedenen Parsermechanismen in einem Hintergrund-Thread bei
einer „Momentaufnahme" (snapshot) der Anwendungsdatenstruktur,
um diejenige Zeit zu minimieren, während derer die Anwendungsdatenstruktur
für den Anwender
zum Zwecke der Eingabe von Tintenstrichen zur Verfügung steht
(Der Begriff „Anwendungsdatenstruktur" bezeichnet im Sinne
der vorliegenden Beschreibung eine Datenstruktur, die in Verbindung mit
einem Anwendungsprogramm verwendet wird). Obwohl beliebige geeignete
inkrementelle Datenanalysesysteme und entsprechende Verfahren verwendet
werden können,
ohne den Schutzbereich der Erfindung zu verlassen, sind Beispiele
für geeignete Systeme
und Verfahren in der am 14. Mai 2002 eingereichten US-Patentanmeldung
Nr. 10/143,804 beschrieben.
-
B. Beschreibung von Beispielssystemen
und Verfahren zur Layoutanalyse und Klassifikation
-
4 ist
ein schematisches Diagramm eines Beispieles für ein System, das bei der praktischen Verwirklichung
der vorliegenden Erfindung von Nutzen ist. Wie dargestellt ist,
umfasst das Gesamtsystem 410 ein Anwendungssystem oder
Programm 420, das einen Parser 422 enthält oder
mit diesem kommuniziert. Das Gesamtsystem 410 kann durch ein
stiftbasiertes Computersystem entsprechend demjenigen, das in 2 dargestellt
ist, verkörpert sein.
Der Anwender 400 gibt Tintenstriche in das System 410 ein
(oder die Tintenstriche werden beispielsweise aus einem Speicher
oder einer externen Quelle heruntergeladen), woraufhin die Tintenstriche
von dem Anwendungsprogramm 420 beispielsweise in einer
Anwendungsdatenstruktur 402 gespeichert werden (die man
sich als Dokumentbaumdatenstruktur 402 gemäß Darstellung
in 6A und 6B vorstellen
kann). Damit der Anwender 400 mit dem Anbringen von Änderungen
an der Dokumentbaumdatenstruktur 402 während des Betriebes des Parsers 422 fortfahren
kann, enthält
der Parser 422 eine Spiegelbaumdatenstruktur 404. Änderungen,
die an der Dokumentbaumdatenstruktur 402 (beispielsweise
durch den Anwender 400, den Parser 422 oder eine
andere Quelle und dergleichen mehr) vorgenommen werden, werden unmittelbar
an die Spiegelbaumdatenstruktur 404 weitergeleitet, damit
die Spiegelbaumdatenstruktur 404 den Inhalt der Dokumentbaumdatenstruktur 402 allgemein „spiegeln" kann.
-
Die
Spiegelbaumdatenstruktur 404 wird verwendet, um Eingabedaten
an die beiden Analysemechanismen 406 und 408 in
dem Parser 422 weiterzuleiten. Bei dem in 4 dargestellten
Beispiel ist der eine Analysemechanismus ein Layoutanalysemechanismus 406 (der
beispielsweise eine Layoutanalyse 302, wie vorstehend in
Verbindung mit 3 erläutert worden ist, vornehmen
kann), während
der andere ein Erkennungsmechanismus 408 ist (der beispielsweise
eine Handschriftenerkennungsanalyse 310 und/oder eine Anmerkungserkennungsanalyse 314,
wie vorstehend in Verbindung mit 3 erläutert worden
ist, vornehmen kann). Die Mechanismen 406 und 408 empfangen „Momentaufnahmen" (snapshots) 424 beziehungsweise 426 der
Spiegelbaumdatenstruktur 404 als Eingabedaten, und sie bearbeiten
diese „Momentaufnahmen" 424 und 426 im
Hintergrund, anstatt dass eine direkte Bearbeitung an der Dokumentbaumdatenstruktur 402 oder
der Spiegelbaumdatenstruktur 404 erfolgen würde. Auf diese
Weise kann der Anwender 400 mit der Durchführung von
Operationen an der Dokumentbaumdatenstruktur 402 in dem
Anwendungsprogramm 420 fortfahren (beispielsweise Tinte
hinzufügen,
Tinte löschen,
Tinte modifizieren und dergleichen mehr), während die verschiedenen Parseranalysemechanismen 406 und 408 ebenfalls
in Betrieb sind, wobei der Anwender 400 keine merklichen
Unterbrechungen im Betrieb (beispielsweise Verarbeitungsverzögerungen)
wahrnimmt, wenn die Mechanismen 406 und 408 an
den Daten arbeiten.
-
Zur
Erzeugung von „Momentaufnahmen" 424 und 426 können bei
einigen Beispielen bestehende Momentaufnahmendatenstrukturen mit
der Spiegelbaumdatenstruktur 404 verglichen werden. Die
Unterschiede zwischen beiden werden vermerkt, und es wird eine minimale
Anzahl von Operationen vorgenommen, um die Momentaufnahmen 424 oder 426 mit
der Spiegelbaumdatenstruktur 404 zu synchronisieren. Auf
diese Weise tritt beim Erstellen der Momentaufnahme ein minimales
Datenumschreiben auf (So werden beispielsweise ungeänderte Daten einer
vorherigen Momentaufnahme nicht umgeschrieben), was auch die Beschleunigung
des Betriebes des Parsers 422 fördert.
-
Die
Ausgabe der Parsermechanismen 406 und 408 können modifizierte
oder überarbeitete
Datenstrukturen darstellen. Ist der Layoutanalysemechanismus 406 beispielsweise
gleich demjenigen von 5, so kann die Ausgabe des Layoutanalysemechanismus 406 beispielsweise
eine Datenstruktur sein, die einzelne Tintenstriche enthält, die
in zugehörige
Worte, Linien, Absätze
und dergleichen gruppiert sind. Der Betrieb eines Layoutanalysemechanismus
dieser Art wird nachstehend detailliert beschrieben. Auf ähnliche
Weise kann für
den Fall, dass der Parsermechanismus 408 ein Handschriftenerkennungssystem 310 ist,
die Ausgabe eine Information oder eine Datenstruktur enthalten,
die die Tintenstriche mit maschinengeneriertem Text verknüpft.
-
Beenden
die Parsermechanismen 406 und 408 ihre Arbeit
an den Momentaufnahmeeingabedaten 424 beziehungsweise 426,
so kann die sich ergebende Information zurück an das Anwendungsprogramm 420 gesendet
werden, wie durch die Pfeile 428 beziehungsweise 430 dargestellt
ist. Wie vorstehend bemerkt worden ist, kann der Anwender 400 jedoch
die Dokumentbaumdatenstruktur 402 während desjenigen Zeitraumes ändern, in
dem die Parsermechanismen 406 und 408 an den Momentaufnahmen 424 beziehungsweise 426 arbeiten.
Vor dem Schreiben der Parseranalysemechanismenergebnisse in die
Dokumentbaumdatenstruktur 402 vergleicht daher der Parser 422 die
Dokumentbaumdatenstruktur 402, die aktuell in dem Anwendungsprogramm 420 (darunter
die Änderungen
des Anwenders) befindlich ist, mit der überarbeiteten Dokumentbaumdatenstruktur
beziehungsweise den überarbeiteten
Dokumentbaumdatenstrukturen, die von den Parsermechanismen 406 und 408 gesendet
worden sind, und bedient sich dabei optional der Spiegelbaumdatenstruktur 404.
Hat der Anwender 400 Änderungen
an der Dokumentbaumdatenstruktur 402 vorgenommen, die nicht
in der überarbeiteten
Doku mentbaumdatenstruktur bzw. den überarbeiteten Dokumentbaumdatenstrukturen
von den Parsermechanismen 406 beziehungsweise 408 enthalten
sind, (beispielsweise mittels Hinzufügen, Löschen, Bewegen, Ändern der
Größe oder
mittels einer anderen Modifizierung eines oder mehrerer Strichen)
oder bewirken anwenderseitig vorgenommene Änderungen an der Dokumentbaumdatenstruktur 402 Probleme
oder einen Konflikt mit Änderungen
an der Datenstruktur bzw. den Datenstrukturen der Erstellung durch
die Parsermechanismen 406 und 408 (beispielsweise durch
Hinzufügen,
Löschen
oder anderweitiges Modifizieren der Striche), so wird die Anwendungsdokumentbaumdatenstruktur 402 dahingehend überarbeitet,
dass sie nur diejenigen der von den Parseranalysemechanismen vorgenommenen Änderungen
enthält,
die keinen Konflikt mit den anwenderseitig vorgenommenen Änderungen
bewirken (Anwenderseitig vorgenommene Änderungen überschreiben parserseitig vorgenommene Änderungen).
Zudem werden nur Abschnitte der Dokumentbaumdatenstruktur 402,
die von der bestehenden Fassung modifiziert worden sind, geändert oder
umgeschrieben, um die Datenschreibzeit (und die von dem Anwender 400 wahrgenommene
zugehörige
Unterbrechung) zu verringern. Auf diese Weise enthält die endgültige überarbeitete
Dokumentbaumdatenstruktur 402, die in dem Anwendungsprogramm 420 vorhanden
ist, sämtliche Änderungen,
die von dem Anwender 400 vorgenommen worden sind, sowie
die Änderungen der
vorhergehenden Parsermechanismenanalysen dergestalt, dass der Parsermechanismus Änderungen
vorgenommen hat, die nicht konsistent zu den anwenderseitig vorgenommenen Änderungen
sind oder hiervon übertrumpft
werden.
-
Aufgrund
der Tatsache, dass die Dokumentbaumdatenstruktur 402 gemeinsam
verwendete Daten enthält,
die letztendlich von dem Anwender 400 wie auch von den
Parsermechanismen 406 und 408 modifiziert werden
können,
kann der Anwender 400 keine neuen Daten in die Dokumentbaumdatenstruktur 402 eintragen,
während
diese derart neugeschrieben wird, dass sie die parserseitig vorgenommenen Änderungen
enthält.
Versucht der Anwender 400 dies dennoch, so können das
System und Verfahren entsprechend der vorliegenden Erfindung auf
dieses Tun auf beliebige geeignete Weise reagieren. So können beispielsweise
die neuen Striche oder Änderungen
vernachlässigt
werden, oder sie können
in einem temporären
Pufferspeicher gespeichert werden, bis die überarbeitete Anwendungsdokumentbaumdatenstruktur 402 für die Dateneingabe
bereitsteht. Da die Dokumentbaumdatenstruktur 402 in dem
Anwendungsprogramm 420 entsprechend diesem Beispiel der
Erfindung im Allgemeinen nur während
derjenigen Zeit nicht zur Verfügung
steht, in der das System die geänderten
Abschnitte der Datenstruktur 402 umschreibt, ist der Zeitraum,
in dem das System nicht zur Verfügung
steht, im Allgemeinen vergleichsweise kurz und wird vom Anwender
oftmals gar nicht wahrgenommen.
-
Sobald
die Dokumentbaumdatenstruktur 402 umgeschrieben oder modifiziert
worden ist (darunter die anwenderseitig und/oder parsermechanismenseitig
vorgenommenen Änderungen),
wird die Spiegelbaumdatenstruktur 404 derart aktualisiert,
dass sie die umgeschriebene oder modifizierte Dokumentbaumdatenstruktur 402 spiegelt,
und die Parsermechanismen 406 und 408 können ihre
Analysen (falls notwendig) wiederholen. Vorteilhafterweise arbeiten bei
einigen Beispielen die Parsermechanismen 406 und 408 nur
an denjenigen Abschnitten der Dokumentbaumdatenstruktur, die unlängst modifiziert
worden sind (und nur an Abschnitten, die von unlängst erfolgten Modifikationen
betroffen sind), um die Verarbeitungszeit zu verringern. Durch inkrementelles Aktualisieren
der Parsermechanismusoperationen gleichzeitig mit der anwenderseitigen
Eingabe von Daten kann der Parser 422 im Allgemeinen mit
der Dateneingabe des Anwenders Schritt halten, sodass Verarbeitungsverzögerungen,
die vom Anwender wahrgenommen werden, auf ein Minimum reduziert werden.
-
Wie
vorstehend erwähnt
worden ist, kann bei einigen Beispielen der Erfindung die Verarbeitungszeit
durch Begrenzen der Verarbeitung auf Abschnitte der Datenstruktur,
in denen Änderungen
aufgetreten sind (und in sämtlichen
von diesen Änderungen betroffenen
Bereichen) reduziert werden. Betreffen die anwenderseitige Eingabe
oder vorherige Parsermechanismusoperationen nicht einige Abschnitte
einer Datenstruktur, so ist gegebenenfalls keine Notwendigkeit vorhanden,
dass der Parsermechanismus beziehungsweise die Parsermechanismen
dieselben Abschnitte erneut analysieren (und gegebenenfalls zu denselben
Ergebnissen gelangen). So können beispielsweise
Systeme und Verfahren entsprechend der vorliegenden Erfindung eine
Neuanalyse eines beliebigen der Datenstruktur zu eigenen Abschnittes, der
innerhalb eines vorbestimmten Änderungsabstandes
befindlich ist, vornehmen. Die Neuanalyse kann beispielsweise die
Linie einer beliebigen Änderung
oder eine beliebige oder zwei beliebige Linien in der Umgebung der Änderung,
beliebige Striche mit einer Lage innerhalb eines Kreises mit vorab
ausgewähltem
Radius in der Umgebung der Änderung,
einen beliebigen Textblock (was nachstehend noch detailliert beschrieben
wird) mit einer Änderung
oder dergleichen enthalten. Im Folgenden werden Beispiele für Parser
beschrieben, die sich der genannten Merkmale vorteilhafterweise
bedienen.
-
C. Beispiel für die während des Parsings erfolgende Verarbeitung
-
Die
Daten, die in Systemen und Verfahren entsprechend den Beispielen
der vorliegenden Erfindung analysiert und verarbeitet werden, können in beliebiger
Form oder Struktur vorliegen. Bei der in 3 dargestellten
Prozedur werden beispielsweise einzelne Striche 300 von
Eingabetintendaten zu einer Datenstruktur als Ergebnis einer Abfolge
von durch den Layoutanalysemechanismus 302 getroffenen
Entscheidungen kombiniert, wobei der Mechanismus 302 bestimmte
einzelne Striche auf Grundlage des Gesamttintenlayouts und der Statistik
gemäß Ermittlung
aus der Eingabetinte gruppiert und verknüpft. Der Layoutanalysemechanismus 302 kann eine
hierarchische Gruppierung von Tintenstrichen auf einer Seite bereiststellen,
die globale statistische Berechnungen bezüglich der Gruppe beziehungsweise
der Gruppen ermöglicht.
Die ersten Strichgruppierungsentscheidungen sind in Abhängigkeit
von lokalen Layoutbeziehungen konservativ, wenn die Gruppen von
Tintenstrichen klein sind (beispielsweise kleine Gruppen, die einzelne
Tintenstriche oder vergleichsweise kurze Kombinationen von Strichen darstellen).
Spätere
Strichgruppierungsentscheidungen können aggressiver sein, was
von der größeren statistischen
Probengröße herrührt, die
auf den größeren Tintenstrichgruppierungen
beruht (beispielsweise Strichgrößen über eine
längere
Linie, die relative Strichbeabstandung, Linienwinkel und dergleichen
mehr). Mehrere Durchläufe
durch die Eingabetintendaten können
vorgenommen werden, um eine zunehmend aggressivere Entscheidung
bei der Bestimmung treffen zu können,
ob Striche zur Bildung von Sätzen
von Strichen, so beispielsweise von Worten, Linien und/oder Blöcken 304 von
Eingabetintenstrichen, zusammengefügt werden sollen.
-
5 zeigt
allgemein Schritte oder einschlägige
Parsingmechanismen bei einem Beispiel des Tintenlayoutanalyseparsermechanismus
sowie des zugehörigen
Systems oder Verfahrens 302, die bei der Erstellung und/oder
Modifizierung von Datenstrukturen von Nutzen sind, die bei einigen
Beispielen der vorliegenden Erfindung zur Anwendung kommen. Aufgrund
des hohen Freiheitsgrades, der für Anwender
bei der Eingabe von digitaler Tinte in Systeme und Verfahren entsprechend
einigen Beispielen der Erfindung bereitsteht (So kann ein Anwender
beispielsweise an beliebiger Stelle, in einer beliebigen Orientierung,
zu einer beliebigen Zeit und unter Verwendung einer beliebigen Strichgröße auf einem
Digitalisierungseingabeschirm schreiben) ist zu Beginn der Layoutanalyseprozedur 302 gemäß 5 gegebenenfalls
keine Vorabinformation verfügbar,
aus der das geeignete Layout, die Ausrichtung oder die Art der Eingabedaten
bestimmt werden könnte
(beispielsweise ob die einlaufenden Eingabedaten 500 textartig,
zeichnungsartig, mathematisch, musikalisch, Flussdiagramme, Karten,
Graphen und derglei chen sind). Das Element 502 in 5 stellt
eine allgemeine graphische Darstellung eines der Typen von möglichen
Eingabedatenstrukturen 500 zu Beginn der Layoutanalyseprozedur
dar. Die grafische Darstellung 502 ist detaillierter in
der Parsingbaumdatenstruktur von 6A dargestellt.
Im Allgemeinen behandelt zu Beginn der Layoutanalyseprozedur 302 (und
dies sogar dann, wenn der Anwender mit der Eingabe von Tintenstrichen
in das stiftbasierte Computersystem fortfährt) das System jeden Strich
S 600 auf einer gegebenen Seite (oder in einem gegebenen Dokument)
P 608 als gesondertes Wort W 602, jedes Wort W 602 als
gesonderte Linie L 604 und jede Linie S 604 als
gesonderten Block B 606 (oder Absatz). Der Layoutanalysemechanismus 302 nimmt
die Aufgabe des Verknüpfens
oder Zusammenfügens
von Strichen zur Bildung von Sätzen
von Strichen vor, die geeignete Worte, Linien und Blöcke von
verknüpften Tintendaten
enthalten. Obwohl ein beliebiger geeigneter Layoutanalysemechanismus
in Verbindung mit der vorliegenden Erfindung verwendet werden kann, wird
nachstehend das in 5 dargestellte Beispiel detaillierter
beschrieben.
-
Obwohl
in der vorliegenden Beschreibung des als Beispiel angegebenen Layoutanalysemechanismus 302 Begriffe
wie „Wort", „Linie" und „Block" verwendet werden,
werden diese Begriffe in diesem Abschnitt der Beschreibung aus Gründen der
Einfachheit dahingehend verwendet, dass sie einen oder mehrere verknüpfte Striche
oder Sätze
von Strichen bezeichnen. Zu demjenigen Zeitpunkt, zu dem die Layoutanalyse 302 erstmalig
bei wenigstens einigen Beispielen der vorliegenden Erfindung beginnt, ist
keine endgültige
Bestimmung dahingehend gemacht worden, ob einzelne Striche oder
Sätze von Strichen
Schrift, Zeichnungen, Musik und dergleichen darstellen. Obwohl die
vorstehende Beschreibung den Begriff „Seite" verwendet, ist zudem nicht notwendig,
dass ein gegebenes elektronisches Dokument auf einer Seite-für-Seite-Basis
geparst wird. So können
beispielsweise „Blöcke" oder „Absätze" von elektronischen
Dokumenten zwei oder mehr Seiten eines Dokumentes überspannen,
ohne dass man den Schutzbereich der Erfindung verlassen würde.
-
Der
Layoutanalysemechanismus 302 entsprechend diesem Beispiel
der Erfindung arbeitet „gierig", weshalb während jedes
Durchlaufs (oder jeder Operation jedes Parsingmechanismus) Strich- oder
Linienzusammenfügungsoperationen,
jedoch keine Teilungen vorgenommen werden. Darüber hinaus kann der Mechanismus 302 mit
geeigneten Tests und Toleranzen betrieben werden, sodass es nicht notwendig
wird, zurückzukehren
und eine unerwünschte
Zusammenfügungsoperation
zu berichtigen.
-
Als
Ergebnis der Operation des Layoutanalysemechanismus 302 können die
einzelnen Striche 600 eines elektronischen Dokumentes zu
verknüpften
Sätzen
von Strichen kombiniert werden, die Worte W, Linien L und Blöcke B (oder
Absätze),
wo auch immer diese angemessen sind, enthalten. 6B ist eine
grafische Darstellung 506 einer möglichen Datenstruktur für die Datenausgabe 504 aus
einem Layoutanalysemechanismus 302. Wie sich aus einem Vergleich
von 6A und 6B ergibt,
enthält
die Seite (oder das Dokument) 610 insgesamt dieselbe Strichinformation,
wobei jedoch bestimmte Striche S 600 miteinander zur Bildung
von Worten W 610 kombiniert oder verknüpft worden sind und bestimmte Worte
W 610 miteinander zur Bildung einer Linie L 612 in
der Datenstruktur von 6B zusammengefügt worden
sind. Selbstverständlich
kann ein Wort W 610 eine beliebige Anzahl von Strichen
S 600 enthalten, und gleichfalls kann eine Linie L 612 eine
beliebige Anzahl von Worten W 610 enthalten. Zudem können, obwohl
dies bei dem spezifischen Beispiel eines Parsingbaumes gemäß 6B nicht
dargestellt ist, zwei oder mehr Linien L 612 ebenfalls
zur Bildung eines Blockes B 614 (oder eines Absatzes) zusammengefügt werden.
-
Zusätzlich zur
Unterstützung
der Definition der Struktur von Tinte in einem Dokument können die verschiedenen
Knoten in dem Parsingbaum (beispielsweise die Knoten 600, 610, 612 und
so weiter in 6B) verwendet werden, um Rauminformation im
Zusammenhang mit den verschiedenen Niveaus in dem Baum zu speichern.
Jeder Linienniveauknoten 612 kann beispielsweise eine Regressions-/Fittinglinie
sämtlicher
Punkte speichern, die Striche der Linie, die konvexe Hülle jedes
Striches in der Linie und/oder eine andere erwünschte Information ausmachen.
Zudem können
die Parsingbaumdatenstrukturen dadurch modifiziert werden, dass
verschiedene elementare Operationen an den Strichen, Worten, Linien
und Blöcken,
die darin enthalten sind, vorgenommen werden. Geeignete Operationen
können
beinhalten: das Hinzufügen,
das Entfernen, das Zusammenfügen,
das Teilen und das Reparenting. Kompliziertere Operationen können aus
diesen elementaren Operationen zusammengesetzt werden. Da diese
Operationen an dem Datenstrukturbaum ausgeführt werden, können die
an den verschiedenen Knotenniveaus vorhandenen Statistiken automatisch
derart aktualisiert werden, dass sie der neuen Struktur entsprechen.
-
5 stellt
eine schematische Übersicht über ein
Beispiel eines geeigneten Layoutanalysemechanismus 302 bereit,
der bei einigen Beispielen der vorliegenden Erfindung von Nutzen
ist. Bei diesem Beispiel ist ein erster Schritt in der Layoutanalyseprozedur 302 ein
zeitlicher Liniengruppierungsschritt 508, bei dem im Allgemeinen
Merkmale von zeit lich benachbarten Strichen (beispielsweise von nacheinander
geschriebenen Strichen) verglichen werden und, wenn möglich, zu „Linien" kombiniert werden.
Verschiedene Faktoren können
bei der Bestimmung dessen berücksichtigt
werden, ob eine zeitliche Liniengruppierung aus zwei oder mehr zeitlich
benachbarten Strichen vorgenommen werden sollte, so beispielsweise
die Strichgröße, der
Abstand zwischen Strichen, der Strichwinkel und dergleichen mehr.
Sobald der Schritt 508 der zeitlichen Liniengruppierung
beendet ist, wird als nächster Schritt
in der Analyse 302 ein Schritt 510 der räumlichen
Blockgruppierung ausgeführt,
bei dem die physikalisch benachbarten zeitlichen Liniengruppierungen
aus der Bildung in Schritt 508 verglichen und diejenigen
zeitlichen Liniengruppierungen als räumliche Blöcke kombiniert werden, die
nahe beieinander liegen. Verschiedene Faktoren können bei der Bestimmung dessen
berücksichtigt
werden, ob eine räumliche
Blockgruppierung aus benachbarten zeitlichen Liniengruppierungen
erstellt werden sollte, so beispielsweise die Strichgröße, der
Abstand zwischen Strichen, der Linienwinkel und dergleichen mehr.
-
Die
zeitlich gruppierten Linien (aus Schritt 508) können, wenn
möglich,
weiter gruppiert werden, wobei optional ihre räumliche Blockbeziehung oder Ausrichtung
in dem Schritt 512 der räumlichen Liniengruppierung
berücksichtigt
wird. Der Schritt 512 der räumlichen Liniengruppierung
muss die Zeit eines Striches im Vergleich zu einem anderen Strich nicht
miteinbeziehen, obwohl Faktoren zusätzlich zu der räumlichen
Beziehung der Linien miteinbezogen werden können, so beispielsweise der
Linienwinkel, die Strichgröße und dergleichen
mehr. Die Ergebnisse der Prozedur 510 der räumlichen
Blockgruppierung gemäß vorstehender
Beschreibung können
als Faktor bei der Bestimmung dessen verwendet werden, ob eine räumliche
Liniengruppierung zwischen zwei bestehenden zeitlichen Liniengruppierungen vorgenommen
werden sollte.
-
Sobald
die räumlichen
Liniengruppierungen fertiggestellt sind, kann die Layoutanalyseprozedur 302 entsprechend
diesem Ausführungsbeispiel
anschließend
die einzelnen Striche in den Liniengruppierungen zu einer oder mehreren
räumlichen
Wortgruppierungen 516 kombinieren, was beispielsweise von
Faktoren wie dem Abstand zwischen Strichen, der Linienausrichtung,
der Strichgröße und dergleichen
mehr abhängt.
Die sich ergebende Ausgabe 504 kann eine Datenstruktur 506 mit
Strichen sein, die zu Worten, Linien und Blöcken gruppiert sind, was in
Verbindung mit 6B erklärt wurde.
-
5 zeigt
darüber
hinaus mit gestrichelten Linien einen optionalen Parsingmechanismus
oder Schritt, der als Teil der Layoutanalyse 302 verwendet werden
kann. Dieser optionale Schritt wird „Listenerfassung" 514 genannt.
Oftmals neigen Menschen, wenn sie eine Liste erstellen, dazu, eine
(vertikale) Spalte von Zahlen, Buchstaben oder Gliederungszeichen
zu schreiben und anschließend
die Listenelemente (in horizontaler Richtung einzutragen. Bisweilen
schreiben Menschen auch zunächst
den Inhalt der Liste und fügen
später
eine vertikale Spalte aus Zahlen, Buchstaben oder Gliederungszeichen
hinzu. Der Listenerfassungsmechanismus 514 kann diese speziellen
Umstände
erfassen (beispielsweise durch Analyse der Ausrichtung und zeitlichen
Abfolge der zeitlichen Liniengruppierungen und dergleichen) und kombiniert
die Zahlen, Buchstaben oder Gliederungszeichen in der Liste mit
dem entsprechenden Listenelementtext.
-
Die
verschiedenen Schritte bei dem als Beispiel angegebenen Tintenanalysemechanismus 302 (5)
können
der Reihenfolge nach geändert
oder auch ausgelassen werden, ohne dass man den Schutzbereich der
Erfindung verlassen würde.
So kann beispielsweise, falls erwünscht, der Schritt 512 der
räumlichen
Liniengruppierung vor dem Schritt 510 der räumlichen
Blockgruppierung vorgenommen werden.
-
Die
Ausgabedaten 504 von dem Layoutanalysemechanismus 302 können auf
beliebige geeignete Weise verwendet werden, so beispielsweise in
einem Klassifikationsmechanismus 306, der in 3 dargestellt
ist, wobei von dort die Daten an beliebige andere geeignete Verarbeitungsmechanismen
(beispielsweise der Anmerkungserkennung 314, der Handschriftenerkennung 310 und
dergleichen mehr) weitergereicht werden können. Der Layoutanalysemechanismus 302 oder
eine Kombination aus dem Layoutanalysemechanismus 302 und
dem Klassifikationsmechanismus 306 können einen Parsermechanismus 406 gemäß Darstellung
in Verbindung mit 4 bilden.
-
Selbstverständlich ist
die vorliegende Erfindung nicht auf den Betrieb mit einem Layoutanalysemechanismus
oder einem beliebigen speziellen Typ von Analysemechanismus beschränkt. Andere
geeignete Mechanismen oder Prozeduren zum Gruppieren oder Verknüpfen einzelner
Striche zu geeigneten Datenstrukturen oder auch eine beliebige andere geeignete
Analyse können
verwendet werden, ohne dass man den Schutzbereich der vorliegenden
Erfindung verlassen würde.
Darüber
hinaus kann vor der Verarbeitung der Anwender, falls erwünscht, dem System
mitteilen, dass bestimmte Striche stets zusammengruppiert werden
sollen (beispielsweise durch Ziehen einer Linie oder eines Lassos
um diese herum, durch Anstreichen oder durch auf andere Weise erfolgendes
Auswählen
von Eingabedatenstrichen, die miteinander verknüpft werden sollen).
-
IV. Ein InkDivider-Objekt und API
-
A. Allgemeine Beschreibung
-
Die
Beschreibung fährt
mit einer detaillierten Beschreibung von Beispielen für Parser
und Anwendungsprogrammschnittstellen entsprechend der vorliegenden
Erfindung fort, darunter ein spezifisches Beispiel, nämlich das
InkDivider-Objekt (Tintenteilerobjekt). Eine Funktion der Systeme
und Verfahren entsprechend der vorliegenden Erfindung (beispielsweise
das InkDivider-Objekt) besteht darin, eine Sammlung von Tintenstrichen
gemäß Bereitstellung durch
eine Anwendung anzulegen und diese Striche in geparste Einheiten
(Entitäten)
mit spezifischer Granularität
zu unterteilen (beispielsweise in Worte, Linien, Sätze, Absätze, Zeichnungen
und dergleichen). Ohne ein geeignetes Parsen wird elektronische
Tinte tendenziell zu granular (körnig)
(beispielsweise mit einer zu großen Zahl von ungruppierten Strichen),
oder sie wird tendenziell zu einem einzigen Tintenobjekt gruppiert,
was ein gewünschtes
Bewegen, Auswählen,
Skalieren und andere Operationen insbesondere von einzelnen Tintenstrichen
oder kleinen Gruppen von Tintenstrichen schwierig oder unmöglich macht.
Die Systeme und Verfahren entsprechend der vorliegenden Erfindung
enthalten beispielsweise ein InkDivider-Objekt und eine API und stellen
eine Parsingtechnologie und Ergebnisse für die Entwickler bereit, wodurch
die Codeschreiber in die Lage versetzt werden, die Ergebnisse des
Parsingmechanismus beim Schreiben von Code für neue Anwendungen zu ihrem
Vorteil zu nutzen.
-
Im
Allgemeinen werden während
einer Tintensitzung auf gewisse Art Tintenstriche zu einer Sammlung
von Tintenstrichen, die in der Anwendung bereits vorhanden ist,
hinzugefügt
und/oder hieraus gelöscht.
Zudem können
während
einer Tintensitzung bestehende Striche innerhalb einer Tintenstrichsammlung
bewegt, größenmäßig geändert, teilweise
gelöscht
und/oder auf andere Weise modifiziert werden.
-
Endet
eine Tintensitzung (gegebenenfalls inkrementell, während eine
Tintensitzung stattfindet), so ruft das arbeitende Anwendungsprogramm
den Parser (der beispielsweise in dem InkDivider-Objekt enthalten
ist) auf, der die Striche zu Strichsätzen oder Gruppen mit verschiedenen
Granularitäten
verarbeitet (wenigstens die neuen Striche und/oder die geänderten
Striche und/oder diejenigen Striche, die von den neuen und/oder
geänderten
Strichen seit dem vorherigen Aufruf des Parsers betroffen sind).
Im Allgemeinen stellt bei einem Aufruf des Parsers das Anwendungsprogramm
die Tintenstriche für
den Parser bereit und empfängt
bestimmte Information. In einigen Beispielen enthält die zurückge gebene
Information einen Rückverweis,
der die ursprünglichen
Striche, die unterteilt worden sind, identifiziert. Systeme und
Verfahren entsprechend einigen Beispielen der Erfindung können auch
ein Verfahren (in diesem Beispiel „ResultByType" genannt) zum Erlangen
einer bestimmten Sammlung von Strichen mit spezifischer Granularität bereitstellen.
Das Anwendungsprogramm kann die Unterteilungsergebnisse abfragen, um
Einheiten mit verschiedener Parsinggranularität zu ermitteln, was von dem
gewünschten
Granularitätstyp
abhängt
(beispielsweise Worte, Linien, Blöcke, Zeichnungen und dergleichen).
Die Parsingergebnisse können
darüber
hinaus, falls notwendig und/oder erwünscht, das Aussehen einer Basislinie
zum Zwecke des Berichtigens einer gewinkelten Schrift bezüglich einer
horizontalen Basislinie vor dem Übermitteln
dieser Daten an den Handschriftenerkenner aufweisen. Dies kann beispielsweise
durch Erstellen einer Rotationsmatrix vorgenommen werden, die für die Codeschreiber
zur Verfügung
steht.
-
Man
beachte, dass einzelne Tintenstriche zu mehreren Sammlungen von
Tintenstrichen oder Gruppierungen mit verschiedener Granularität gehören können. So
kann ein Strich beispielsweise Teil eines Wortes oder Teil eines
Absatzes sein.
-
Eingedenk
des allgemeinen Hintergrundes und der Übersicht werden nachstehend
verschiedene Merkmale eines Tintenteilerobjekts und einer API anhand
von Beispielen entsprechend der vorliegenden Erfindung detaillierter
beschrieben. Während
ein Großteil
der nachfolgenden Diskussion ein bestimmtes Tintenteilerobjekt und
damit verknüpfte
Objekte, Eigenschaften und dergleichen mehr betrifft, erschließt sich
einem Fachmann auf dem einschlägigen
Gebiet, dass verschiedene Abwandlungen an den spezifischen Implementierungen
gemäß nachstehender
Beschreibung vorgenommen werden können, ohne den Schutzbereich
der Erfindung zu verlassen.
-
B. Das Tintenteilerobjekt (InkDivider-Obket)
-
7 zeigt
allgemein den Inhalt eines als Beispiel angegebenen InkDivider-Objektes 700,
das bei einigen Beispielen der vorliegenden Erfindung von Nutzen
ist. Bei diesem Beispiel enthält
das InkDivider-Objekt 700 zwei Eigenschaften 702,
nämlich eine
Strokes-Eigenschaft (Striche) 704 und eine RecognizerContext-Eigenschaft
(Kontexterkennung) 706. Das dargestellte InkDivider-Objekt 700 enthält darüber hinaus
ein Verfahren bzw. eine Methode 708, nämlich das Divide-Verfahren
bzw. die Divide-Methode (Unterteilen) 710.
-
Die
Strokes-Eigenschaft 704 gibt die Sammlung von Tintenstrichen
aus und/oder setzt die Sammlung von Tintenstrichen, die dem Divide-Verfahren 710 unterzogen
werden sollen. Die Striche werden allgemein an die Strokes-Eigenschaft 704 von
dem verwendeten Anwendungsprogramm gesendet, das bestimmt, welche
Striche zu der Sammlung von Strichen in der Strokes-Eigenschaft 704 hinzugefügt und/oder
aus dieser entfernt und/oder auf andere Weise modifizieren sollen.
Dies ist allgemein durch den Pfeil 712 in 7 gezeigt,
der einlaufende Striche darstellt, die von dem Anwendungsprogramm gesendet
werden (oder anderweitig auf beliebige geeignete und/oder gewünschte Weise
an die Strokes-Eigenschaft 704 gesendet werden). Striche
können
darüber
hinaus der Strokes-Eigenschaft 704 hinzugefügt und/oder
aus dieser entfernt werden, und zwar vom letzten Anwender auf beliebige
geeignete Weise, so beispielsweise durch eine Tinteneinfügeaktion,
eine Tintenpasteaktion, eine Tintencut- und -löschaktion und dergleichen mehr.
Falls erwünscht, muss
die an die Strokes-Eigenschaft 704 übersandte Strichinformation
nicht sämtliche
Merkmale oder Eigenschaften der Tintenstriche, so beispielsweise
Farbe, enthalten. Es ist vielmehr, falls erwünscht, ausreichend, nur die
für das
Parsing relevanten Merkmale oder Eigenschaften der Tintenstriche
zu übersenden.
-
Die
Eingabe- und Ausgabedaten für
die Strokes-Eigenschaft 704 können in folgender Form vorliegen:
[propputref]
HRESULT Strokes ([in] InkStrokes* Strokes)
[propget] HRESULT
Strokes ([out, retval] InkStrokes** Strokes)
-
Die
RecognizerContext-Eigenschaft 706 gibt den Erkenner, der
verwendet und/oder mit dem InkDivider-Objekt 700 verknüpft werden
soll, aus und/oder setzt diesen. Die Eigenschaft 706 ist
bei wenigstens einigen Beispielen der vorliegenden Erfindung von
Nutzen, da die gewünschte
Parsingoperation die Erkennung handgeschriebener Texte auf Grundlage
einer Sprache enthalten kann, die von der Standardsprache des Systems
abweicht, mit der die Software oder das Anwendungsprogramm laufen.
So kann beispielsweise ein stiftbasiertes Computersystem Englisch
als Standardsprache für
sein Betriebssystem und/oder seine Tastatur verwenden. Ist der Computeranwender
zweisprachig oder nutzt ein anderer Anwender den Computer, so kann
jedoch in gewissen Fällen
der Anwender Notizen in einer Sprache schreiben oder erstellen,
die nicht Englisch ist. Ist der Handschriftenerkenner mit englischer
Standardsprache die einzige für
das System zur Verfügung stehende
Option, so kann das Ergebnis Fehler enthalten, da der Erkenner eine
Erkennung an dem nicht auf Englisch handgeschriebenen Text vornimmt.
Weitere spezialisierte Erkenner können zudem vom Anwendungscode
gesetzt werden, so beispielsweise spezialisierte Erkenner zum Erkennen
von musikalischen Symbolen, mathematischen Formeln und Symbolen,
Zeichnungsobjekten und dergleichen mehr. Indem man Codeschreiber
in die Lage versetzt, verschiedene Handschriftenerkenner einzustellen
oder zu verwenden (darunter Erkenner für verschiedene Sprachen), können die
resultierenden Ergebnisse der Handschriftenerkennung verbessert werden.
Die Eigenschaft, dass Codeschreiber einen gewünschten Handschriftenerkenner
setzen können, ist
in 7 durch Pfeil 714 dargestellt.
-
Bei
einigen Beispielen der Erfindung kann die RecognizerContext-Eigenschaft 706 standardmäßig auf
einen „Nullwert" gesetzt werden,
was bei diesen Beispielen bedeutet, dass die Standardsprache des
Betriebssystems des Computers als Handschriftenerkennungssprache
verwendet wird und/oder ein mit dem Betriebssystem arbeitender Erkenner
als Erkenner verwendet wird, wenn nicht und bis die RecognizerContext-Eigenschaft 706 derart geändert wird,
dass ein anderer Erkenner spezifiziert wird. Der Standard- oder Nullsprachenwert
kann einer lokalen „Tastatur"-Standard-ID entsprechen,
die während
des anfänglichen
System-Setups gesetzt wird. Dieses Standard- oder Nulleingabemerkmal
ist in 7 durch den Pfeil 716 dargestellt und
mit „NULL" bezeichnet.
-
Die
Eingabe- und Ausgabedaten für
die RecognizerContext-Eigenschaft 706 können die nachfolgenden Formen
aufweisen:
[propputref] Recognizer ([in] InkRecognzier* Recognizer)
[propget]
Recognizer ([out, retval] InkRecognizer** Recognizer)
-
Im
Betrieb unternimmt bei wenigstens einigen Beispielen der Erfindung
ein Parser einen ersten Durchlauf beim Bestimmen von Wortzwischenräumen in
dem handgeschriebenen Text auf Grundlage von räumlichen und zeitlichen Metadaten
in Verknüpfung
mit den Tintenstrichen. Dies kann beispielsweise die Schritte der
zeitlichen Liniengruppierung, der räumlichen Blockgruppierung und
der räumlichen
Liniengruppierung enthalten, die vorstehend allgemein im Zusammenhang
mit 5 beschrieben worden sind. Diese Parsingoperationen
können
vergleichsweise schnell vorgenommen werden, wobei ihre Ergebnisse
jedoch im Allgemeinen nicht die Detailtiefe und Genauigkeit aufweisen,
die für
einen Handschriftenerkenner und das zugehörige Sprachmodell notwendig
sind. Da her wird bei wenigstens einigen Beispielen der Erfindung
ein Handschriftenerkenner verwendet, der bei jeder handgeschriebenen „Linie" von Text einen zweiten
Durchlauf unternimmt und Zwischenräume zwischen Worten unter Verwendung
eines Wörterbuches
akkurat bestimmt, das mit dem Handschriftenerkenner verknüpft ist,
um so die Wortzwischenräume
besser zu identifizieren. Der Erkenner kann zudem den handgeschriebenen
Text in maschinengenerierten Text umwandeln (beispielsweise in ein
Format, das für
ein Textverarbeitungsprogramm, ein E-Mail-Programm, elektronische
Kalender, Terminbücher
und dergleichen geeignet ist).
-
7 zeigt
zudem ein Divide-Verfahren bzw. eine Divide-Methode 710,
das einen Teil des InkDivider-Objektes 700 dieses Beispieles
darstellt. Das Verfahren 710 unterteilt oder parst die
verknüpften Striche
(die es von der Strokes-Eigenschaft 704 erhält, siehe
Pfeil 718) unter Verwendung des von der RecognizerContext-Eigenschaft 706 verwendeten Erkenners
(siehe Pfeil 720). Das Divide-Verfahren 710 erzeugt
ein InkDivisionResult-Objekt
(Tintenteilungsergebnis) 800, das die Ergebnisse der Tintenteilung
(oder des Parsings) enthält,
und gibt dieses aus. Die Erstellung und Ausgabe des InkDivision-Objektes 800 ist
in 7 durch den Pfeil 722 dargestellt. Ein
Beispiel für
ein verfügbares
Ausgabedatenformat des Divide-Verfahrens 710 ist nachstehend
gezeigt:
HRESULT Divide ([out, retval] InkDivisionResult**
divisionResults)
-
Bei
wenigstens einigen Beispielen der Erfindung wird das Divide-Verfahren 710 synchron
durchgeführt
oder aufgerufen, während
zusätzliche
Tinte dem Dokument in dem Anwendungsprogramm hinzugefügt, aus
diesem gelöscht
oder dieses auf andere Weise modifiziert. In zusätzlichen Beispielen für Systeme
und Verfahren entsprechend der Erfindung kann das Divide-Verfahren 710 in
einem Hintergrund-Thread an Strichen arbeiten, die von der Strokes-Eigenschaft 704 bereitgestellt
werden, und gibt kein InkDivisionResult 800 zurück, bis
die gesamte Parsingoperation beendet ist. Durch das Arbeiten in einem
Hintergrund-Thread und ohne Auswirkungen auf die weitere Stricheingabe
oder Modifikation ist in vielen Fällen die Verwendung des Divide-Verfahrens 710 für den Anwender
des stiftbasierten Computersystems transparent oder nahezu transparent
und erzeugt keine spürbare
Verarbeitungsverzögerung.
-
Bei
jedem Aufruf des Divide-Verfahrens 710 kann ein neues InkDivisionResult-Objekt 800 erzeugt werden,
das eine Momentaufnahme der Tintenparsingbaumdatenstruktur (siehe 6B)
zum Zeitpunkt des Aufrufes des Divide-Verfahrens 710 effektiv
erstellt.
-
Bei
wenigstens einigen Beispielen der Erfindung liegt es im Verantwortungsbereich
des Anwendungsprogramms, die Striche jedes InkDivisionResult-Objektes 800 (gemäß nachstehender
detaillierterer Beschreibung) zu vergleichen, um eine Bestimmung
dahingehend vorzunehmen, ob sich die Parsingergebnisse zwischen
verschiedenen Aufrufen des Divide-Verfahrens 710 geändert haben.
-
Selbstverständlich kann,
ohne den Schutzbereich der Erfindung zu verlassen, ein InkDivider-Objekt
Verfahren, Eigenschaften und/oder andere Elemente zusätzlich zu
und/oder anstelle von und/oder in Kombination mit den spezifischen
Verfahren und Eigenschaften gemäß Darstellung
in 7 enthalten. Beispielsweise kann ein InkDivider-Objekt
zusätzlich
eine LineHeight-Eigenschaft (Linienhöhe) enthalten (Alternativ kann
die LineHeight-Eigenschaft bei einem anderen Objekt oder auf beliebige
geeignete Weise bereitgestellt werden). Die LineHeight-Eigenschaft
versetzt einen Codeschreiber in die Lage, als Eingabe eine erwartete
Linienhöhe
für die
Textlinien einzugeben. Auf diese Weise können sich das Layoutanalysesystem und/oder
das Klassifikationsanalysesystem (oder andere Systeme in dem Parser)
während
des Parsings dieser erwarteten LineHeight-Information bedienen und
die Unterscheidung zwischen Textlinien und Zeichnungen oder Diagrammen
besser bewerkstelligen. Durch Eingabe der LineHeight-Richtlinie in den Parser
kann dieser effektiver und effizienter mehrere Linien (beispielsweise
in der Absatzorientierung) oder einzelne Linien von Zeichnungen
unterscheiden (So sind beispielsweise Zeichnungslinien üblicherweise
größer als
eine einzelne Linie in einer Handschrift).
-
Obwohl
keine Beschränkung
mit Blick auf die erwartete LineHeight-Größe der handschriftlichen Linien
notwendig ist, akzeptieren die Systeme und Verfahren in einigen
Fällen
der Erfindung erwartete Linienhöhen,
die in einen bestimmten Bereich fallen. Selbstverständlich kann
der Bereich von erwarteten Linienhöhen stark variieren. In einigen
Beispielen der Erfindung muss die erwartete Linienhöhe in einen Bereich
zwischen einer minimalen Höhe
von 100 Digitalisiererpixeln und einer maximalen Höhe von 50.000
Digitalisiererpixeln fallen, und zwar mit einer Standardhöhe von 1200
Pixeln. Versucht ein Codeschreiber, eine erwartete Linienhöhe außerhalb
dieses Bereiches zu setzen, so kann die LineHeight-Eigenschaft eine
Fehlermitteilung ausgeben. Alternativ kann die LineHeight-Eigenschaft
automatisch die Höhe
der Eingabelinien auf einen einschlägigen minimalen oder maximalen
Höhenwert ändern, ohne
eine Fehlermitteilung auszugeben (beispielsweise indem sie automatisch
einen Wert der Linienhöhe
von 50.000 einstellt, wenn ein Anwendungsprogrammcode versucht,
den Wert auf 50.003 einzustellen). Als weitere Alternative kann
ein Versuch des Setzens eines Wertes der Linienhöhe außerhalb des gültigen Bereiches
zu einem einfachen Ignorieren dieses Wertes führen (und zu einem Zurückkehren
zu dem vorherigen Wert der Linienhöhe oder dem Standardwert).
-
Als
Ausgabe teilt die LineHeight-Eigenschaft dem Anwendungsprogramm
den vorher gesetzten Wert für
die LineHeight-Eigenschaft mit oder gibt den Standardwert aus, wenn
kein vorheriger Wert gesetzt worden ist.
-
Die
Eingabe- und Ausgabedaten für
die LineHeight-Eigenschaft weisen entsprechend diesem Beispiel der
Erfindung beispielweise die nachfolgenden Formen auf:
HRESULT
[propput] LineHeight ([in] Long LineHeight)
HRESULT [propget]
LineHeight ([out], retval] Long* LineHeight)
-
C. Das Tintenteilungsergebnis-Objekt (InkDivisionResult-Objekt)
-
8 zeigt
grafisch ein InkDivisionResult-Objekt 800 (Tintenteilungsergebnis-Objekt)
entsprechend einigen Beispielen der Erfindung. Wie vorstehend ausgeführt worden
ist, nimmt das Divide-Verfahren 710 des InkDivider-Objektes 700 ein Parsing
an der Strichsammlung (die von der Strokes-Eigenschaft 704 ermittelt
worden ist) auf Grundlage der ausgewählten RecognizerContext-Eigenschaft 706 vor
und erzeugt ein InkDivisionResult-Objekt 800. Das InkDivisionResult-Objekt 800 erfasst die
Datenstruktur, die sich aus den Unterteilungs- und/oder Parsingoperationen
ergibt, die als „Parsingbaum" der in 6B dargestellten
Form bei wenigstens einigen Beispielen der Erfindung betrachtet
werden können.
Die sich ergebende Datenstruktur, die in dem InkDivisionResult-Objekt 800 vorhanden
ist, kann weiter verwendet werden, so beispielsweise bei nachfolgenden
ResultByType-Operationen (die nachstehend detailliert beschrieben
werden), um Tintendatensätze
mit verschiedenen Graden der Granularität für eine gegebene Strichsammlung
abzufragen.
-
Wie
in 8 gezeigt ist, weist dieses Beispiel des InkDivisionResult-Objektes 800 eine
Eigenschaft 802 mit dem Namen „Strokes" (Striche) 804 auf. Die Strokes-Eigenschaft 804 gibt
bei Aufruf einen Verweis auf diejenigen Striche aus, die ursprünglich bei
der Erstellung des InkDivisionResult-Objektes 800 verwendet
worden sind. Das InkDivider-Objekt 700 bildet
intern eine Datenstruktur, die einem spezifischen Satz von Strichen
in einem zeitlichen Augenblick entspricht. Das Ink-Objekt, das diese
Striche enthält,
ist jedoch nicht statisch. Vielmehr können neue Striche hinzugefügt werden
(entweder einzeln oder gruppenweise, so beispielsweise mittels der
Pasteoperation), und es können
zu einem bestimmten Zeitpunkt bestehende Striche gelöscht oder
bewegt oder auf andere Weise modifiziert werden (und zwar auch dann,
wenn eine Parsingoperation ausgeführt wird). Daher stellt die
Strokes-Eigenschaft 804 in dem InkDivisionResult-Objekt 800 einen
Anwendungsprogrammcode oder einen Clientcode als Mittel bereit,
das bestimmt: (a) welche Striche einer Unterteilung unterzogen worden
sind, um ein bestimmtes InkDivisionResult-Objekt 800 zu
erzeugen, und (b) ob diese Striche seit der Ermittlung des letzten
InkDivisionResult-Objektes einbezogen oder modifiziert worden sind
(beispielsweise seit dem letzten Aufruf des Divide-Verfahrens 710).
Die Strokes-Eigenschaft 804 ermöglicht darüber hinaus, dass der Anwendungscode
oder der Clientcode zwei InkDivisionResult-Objekte vergleichen,
um festzustellen, ob sich der Parsingbaum von einem Aufruf des Divide-Verfahrens
zum nächsten
geändert
hat.
-
Die
Strokes-Eigenschaft 804 des InkDivisionResult-Objektes 800 empfängt, enthält und/oder hält eine
Liste von Strichen vor, die bei der Erstellung des InkDivisionResult-Objektes 800 verwendet
worden sind. Dies ist in 8 durch einen Eingabepfeil 806 dargestellt.
Die Eingabestrichdaten können
beispielsweise aus der Strokes-Eigenschaft 704 des InkDivider-Objektes 700 oder
auch aus einer beliebigen anderen geeigneten Quelle ermittelt oder
eingeführt
werden. Die Fähigkeit,
Daten auszugeben, die die Eingabestriche darstellen können, die
bei der Erstellung des InkDivisionResult-Objektes 800 verwendet
werden, ist in 8 mit dem Pfeil 808 aus
der Strokes-Eigenschaft 804 bezeichnet. Die Ausgabedaten 808 der
Strokes-Eigenschaft 804 können die folgende Form aufweisen:
[propget]
HRESULT Strokes ([out, retval] InkStrokes** Strokes)
-
Da
das InkDivider-Objekt 700 den Parsingmechanismus und das
InkDivisionResult-Objekt 800 die
Parsingbaumdatenstruktur für
eine spezifische Tintenteilungsoperation einkapselt, wird es möglich, das
InkDivider-Objekt 700 freizugeben (beispielsweise für weitere
Operationen), während
ein oder mehrere InkDivisionResult-Objekte 800 weiterhin
bestehen bleiben.
-
Als
Alternative können
anstelle dessen, dass sie eine Strokes-Eigenschaft 804 in
dem InkDivisionResult-Objekt 800 enthalten, der Clientcode
oder der Anwendungspro grammcode die Strichinformation extern cachen
(in einem Cache speichern). Es kann gleichwohl bei der wahrscheinlichen
Erstellung mehrerer InkDivisionResult-Objekte 800 im Laufe
einer Tintensitzung schwierig und rechentechnisch aufwändig werden,
Paare von InkDivisionResult-Objekten 800 und die externen
Tintenstrichdatensätze
zu verwalten. Daher verringert die Bereitstellung der Strokes-Eigenschaft 804 als
Teil des InkDivisionResult-Objektes 800 den Overhead für den Clientcode oder
den Anwendungscode und unterstützt
die effiziente Nutzung der InkDivider-API.
-
Das
InkDivisionResult-Objekt 800 entsprechend diesem Beispiel
enthält
darüber
hinaus ein Verfahren 810, das ResultByType (Ergebnis nach Typ) 812 genannt
wird und in 8 dargestellt ist. Das ResultByType-Verfahren 812 gibt
bei Aufruf eine Sammlung von Strichsammlungen (in Teilungseinheiten)
aus, die sich aus einem gegebenen Division-Type (Art der Unterteilung, so beispielsweise
Worte, Linien, Absätze,
Zeichnungen und dergleichen mehr) ergeben. Das Verfahren 812 gibt
beispielsweise Eingabestriche, die als Worte, Linien, Absätze, Zeichnungen
und dergleichen gruppiert sind, in Abhängigkeit davon aus, ob der
Clientcode oder Anwendungscode Worte, Linien, Absätze, Zeichnungen und
dergleichen angefordert hat. Das Verfahren 812 kann, falls
gewünscht,
mehrfach aufgerufen werden, um Unterteilungsergebnisse für verschiedene
Parsinggranularitäten
abzufragen. Ein Aufruf kann beispielsweise Worte in der geparsten
Strichsammlung bereitstellen, während
ein weiterer Aufruf Linien und wieder ein anderer Absätze und
so weiter aufrufen kann.
-
Die
Eingabe für
das ResultByType-Verfahren 812 enthält wenigstens den gewünschten
InkDivisionType, der, wie vorstehend ausgeführt worden ist, bei einigen
Beispielen Worte, Linien, Absätze,
Zeichnungen und dergleichen bezeichnen kann. Diese Eingabe ist in 8 mit
dem Eingabepfeil 814 bezeichnet. Die Eingabe, die die Sammlung
von Strichsammlungen für
einen gegebenen DivisionType enthält (beispielsweise ein InkDivisionUnits-Objekt)
ist in 8 mit dem Ausgabepfeil 816 bezeichnet.
Die Daten können
folgendes Format aufweisen:
HRESULT ResultByType ([in] InkDivisionType
divisionType,
[out, retval] InkDivisionUnits* divisionUnits)
-
Bei
einigen Beispielen der Erfindung kann für den Fall, dass kein DivisionType
spezifiziert ist (DivisionType = 0), wie in 8 durch
den Pfeil 818 dargestellt ist, die ausgegebene InkDivisionUnits-Objektsammlung
wenigstens bei einigen Beispielen der Erfin dung sämtliche
Granularitäten
enthalten, die von dem Parser identifiziert sind. Da einige Granularitäten andere
Granularitäten
subsumieren (So kann beispielsweise eine Linie mehrere Worte enthalten), kann
die sich ergebende Sammlung überlappende DivisionUnits
(Verteilungseinheiten) enthalten. Eine geeignete Standardgranularität (oder
sogar keine Standardgranularität)
kann selbstverständlich
ohne Weiteres verwendet werden, ohne dass man den Schutzbereich
der Erfindung verlassen würde.
So kann beispielsweise bei einigen Versionen der Standard-DivisionType „Wort" sein, wenn nicht
oder bis eine andere Granularität
von dem Anwendercode oder dem Anwendungscode verwendet wird.
-
Wie
in 8 dargestellt ist, kann das ResultByType-Verfahren 812 die
Eingabedatenstruktur von dem Divide-Verfahren 710 des InkDivider-Objektes 700,
wie durch den Pfeil 820 dargestellt ist, empfangen.
-
Selbstverständlich kann,
ohne den Schutzbereich der Erfindung zu verlassen, ein InkDivisionResult-Objekt 800 Verfahren,
Eigenschaften und/oder andere Elemente zusätzlich zu und/oder anstelle
von und/oder in Kombination mit den spezifischen Verfahren und Eigenschaften
gemäß Darstellung
in 8 enthalten.
-
D. Das Tintenteilungseinheitenobjekt (InkDivisonUnits-Objekt)
-
9 zeigt
ein InkDivisionUnits-Objekt 900, das bei einigen Beispielen
der Erfindung von Nutzen ist. Das Objekt 900 ist eine Sammelmappe
(wrapper) für
die Ergebnisse der Parsingoperation. Die Sammlung umfasst bei wenigstens
einigen Beispielen der Erfindung üblicherweise erwartungsgemäß effektiv sämtliche
Striche, die ursprünglich
an das InkDivider-Objekt 700 übergeben worden sind. So kann
beispielsweise eine Sammlung von Strichen, die in Worte unterteilt
worden ist, durch eine Sammlung des InkDivisionUnits-Objektes 900 dargestellt
werden, die ein einzelnes InkDivisionUnit-Objekt 1000 für jedes Wort
enthält
(siehe auch 10, die nachstehend noch detailliert
beschrieben wird). Die Striche, die sich aus einem Erweitern der
einzelnen InkDivisionUnit-Objekte 1000 zu ihren jeweiligen
Strichen ergeben, sollen, so steht zu erwarten, zu dem ursprünglichen
Satz von Strichen passen, der an das InkDivider-Objekt 700 weitergeleitet
worden ist.
-
Wie
in 9 dargestellt ist, enthält das InkDivisionUnits-Objekt 900 dieses
Beispiels eine Eigenschaft 902, die Count (Zähler) 904 genannt
wird. Die Count-Eigenschaft 904 stellt die Anzahl (oder Nummer)
der Teilungseinheiten bereit, die in einer gegebenen Sammlung vorhanden
sind, und macht diese Information der API für die Verwendung in dem Anwendungscode
oder Clientcode verfügbar.
So kann die Count-Eigenschaft 904 beispielsweise ein Anwendungsprogramm
informieren, dass eine gegebene Strichsammlung eine Anzahl x von
Worten und/oder eine Anzahl y von Linien und/oder eine Anzahl z
von Absätzen
enthält.
Diese Daten können
auf beliebige geeignete Weise bestimmt werden, so beispielsweise
dadurch, dass die Parsingbaumdatenstruktur von 6B nach
einer gegebenen Strichsammlung, die in dem InkDivisionResult-Objekt 800 vorhanden
ist, durchsucht wird. Die Ausgabe der Count-Eigenschaft 904 ist
in 9 durch den Pfeil 906 dargestellt. Die
Ausgabedaten können
folgendermaßen
strukturiert sein.
[propget] HRESULT Count ([out, retval] Long** Count)
-
Das
InkDivisionUnits-Objekt 900 dieses Beispiels enthält darüber hinaus
ein Verfahren 908, das Item 910 genannt wird.
Das Item-Verfahren 910 gibt bei Aufruf ein spezifisches
InkDivisionUnit-Objekt 1000 in der Sammlung von Strichen
mit dem Indexwert (Index value) der Einheit in der Sammlung aus (beispielsweise „das vierte
Wort ausgeben").
Die Ausgabe ist in 9 durch den Pfeil 912 dargestellt. Die
Ausgabedaten des Item-Verfahrens 910 können folgendermaßen strukturiert
sein.
HRESULT Item ([in] Long index, [out, retval] InkDivisionUnit*
divisionUnit)
-
Eine
weitere Eigenschaft 902, die in dem InkDivisionUnits-Objekt 900 dieses
Beispieles enthalten ist, wird „_NewEnum" 914 genannt. Die Eigenschaft 914 gibt
für die
Aufzählschnittstelle
entweder IEnum VARIANT oder IEnum UNKNOWN für die bewertete Strichsammlung
aus. Die Eigenschaft 914 kann zum Abrufen eines einzelnen
Objektes in der bewerteten Tintenstrichsammlung, wie in 9 durch
die Pfeile 916 beziehungsweise 918 dargestellt ist,
verwendet werden. Die von dem _NewEnum-Verfahren 914 bewerteten
Daten können
im folgenden Format vorliegen:
[propget] HRESULT NewEnum ([out,
retval] IUnknown** _NewEnum)
-
Insbesondere
sind bei diesem Beispiel der Erfindung (a) die Count-Eigenschaft 904 nebst
dem Item-Verfahren 910 und (b) die _NewEnum-Eigenschaft 914 gemäß vorstehender
Beschreibung effektiv zwei äquivalente
Arten des Zugriffs auf die Elemente der Tintenstrichsammlung in
Abhängigkeit
von der Programmiersprache und dem Codie rungsstil, der vom Clientcode
oder Anwendungsprogrammcode verwendet wird. Die Kombination des
Item-Verfahrens 910 und der Count-Eigenschaft 904 kann
in einer geläufigen „for"-Schleife verwendet
werden, wohingegen die _NewEnum-Eigenschaft 914 bei einer "for each"-Konstruktion verwendet
werden kann, die in einigen Programmiersprachen vorhanden ist.
-
Darüber hinaus
kann selbstverständlich, ohne
den Schutzbereich der Erfindung zu verlassen, ein InkDivisionUnits-Objekt 900 Eigenschaften,
Verfahren und/oder andere Elemente zusätzlich zu und/oder anstelle
von und/oder in Kombination mit den spezifischen Eigenschaften und
Verfahren gemäß vorstehender
Beschreibung im Zusammenhang mit 9 enthalten.
-
E. Das Tintenteilungseinheitsobjekt (InkDivisonUnit-Objekt)
-
Ein
weiteres Objekt in der API entsprechend einigen Beispielen der Erfindung
ist in 10 dargestellt und wird „InkDivisionUnit"-Objekt 1000 genannt. Das
Objekt 1000 stellt ein einzelnes Element der Tintenstrichsammlung
gemäß Ergebnis
der Parsingoperation für
die Granularität
gemäß Spezifizierung durch
die InkDivisionResult.ResultByType-Operation dar. So kann beispielsweise
das InkDivisionUnit-Objekt 1000 ein einzelnes Wort einer
geparsten Tintenstrichsammlung enthalten, wenn die spezifizierte Parsinggranularität (oder
der Divisionstyp) „Wort" war.
-
Die
erste Eigenschaft 1002 in diesem als Beispiel angegebenen
Objekt 1000 ist die Strokes-Eigenschaft 1004.
Die Strokes-Eigenschaft 1004 enthält diejenigen Striche, die
in der Einheit enthalten sind, die sich aus der Tintenteilung ergeben
(beispielsweise die Striche in dem Wort oder der Zeile oder dem
Absatz in Abhängigkeit
von der ausgewählten
Granularität).
Die Strokes-Eigenschaft 1004 verschafft den Codeschreibern
einen einfachen Zugriff auf diejenigen Striche, die jedes Granularergebnis
einer Parsingoperation bilden. Die Datenausgabe durch die Strokes-Eigenschaft 1004 oder
durch Zugriff hierdurch kann (gemäß Angabe durch den Ausgabepfeil 1030)
das folgende Format aufweisen.
[propget] HRESULT Strokes ([out,
retval] InkStrokes** Strokes)
-
Die
RecognizedString-Eigenschaft 1006 ist ebenfalls in diesem
Beispiel des InkDivisionUnit-Objektes 1000, wie in 10 gezeigt
ist, enthalten. Die Ausgabe dieser Eigen schaft 1006, die
in 10 durch den Pfeil 1032 dargestellt ist,
ist ein maschinengenerierter Text, der sich aus der Handschriftenerkennungsoperation
ergibt (und/oder ein Zeiger auf eine Datenspeicherstelle für diesen
erkannten Text).
-
Dieses
Beispiel des InkDivisionUnit-Objektes 1000 enthält darüber hinaus
eine Eigenschaft mit dem Namen DivisionType (Divisionstyp) 1008,
die in 10 dargestellt ist. Die Eigenschaft 1008 gibt
die Art der Divisionseinheit in dem Objekt 1000 aus (beispielsweise
Wort, Linie, Satz, Absatz, Zeichnung und dergleichen), wie in 10 durch
den Ausgabepfeil 1034 dargestellt ist. Die Daten für die Ausgabe
der DivisionType-Eigenschaft 1008 können im
folgenden Format gegeben sein:
[propget] HRESULT divisionType
([out, retval] InkDivisionType** divisionType)
-
Bei
einigen Beispielen und/oder Verwendungen der Erfindung kann die
DivisionType-Eigenschaft 1008 für den Fall
von Nutzen sein, dass eine gegebene InkDivisionUnits-Objektsammlung 900 InkDivisionUnit-Objekte 1000 mit
verschiedenen InkDivisionTypes enthält.
-
Eine
weitere Eigenschaft, die bei wenigstens einigen Beispielen des InkDivisionUnit-Objektes 1000 vorhanden
ist, ist die RotationTransform-Eigenschaft (Rotationstransformation) 1010.
Die Eigenschaft 1010 gibt die Information über die
Transformationsmatrix weiter, die beispielsweise zum Horizontaldrehen
der Striche in dem InkDivisionUnit-Objekt 1000 von Nöten ist.
Sie kann beispielsweise beim Drehen der Tintenstriche in dem Objekt 1000 auf
eine horizontale Basislinie vor dem Übersenden der Striche an den
Erkenner verwendet werden. Die Ausgabedaten aus der Eigenschaft 1010 können bei
wenigstens einigen Beispielen der Erfindung das folgende Format
aufweisen:
[propget] HRESULT RotationTransform
([out,
retval] InkTransform** RotationTransform)
-
Die
Verfügbarkeit
der Ausgabedaten der RotationTransform-Eigenschaft 1010 ist
in 10 durch den Ausgabepfeil 1036 dargestellt.
-
Die
bei wenigstens einigen Beispielen der Erfindung verfügbare RotationTransform-Eigenschaft 1010 stellt
ein vorteilhaftes Merkmal dar, das bei Anwendungsprogrammen bereitsteht,
bei denen Handschriften, die nicht horizontal geschrieben sind, immer
noch genau geparst werden können.
Im Allgemeinen nehmen viele bekannte Handschriftenerkenner keine
interne Bearbeitung von nichthorizontal beschriebenen Linien vor,
wobei die besten Erkennungsergebnisse bei derartigen Produkten im
Allgemeinen dann auftreten, wenn die Basislinie der Handschrift
horizontal ist. Bei bestimmten Parsersystemen berechnet der Parser
automatisch eine Basislinie oder bestimmt diese oder wendet gegebenenfalls
eine Rotationstransformation an, um Daten entsprechend einer horizontalen
Linie zu ermitteln, wodurch die Handschriftenerkennungsfähigkeit
des Handschriftenerkenners verbessert wird. Die RotationTransform-Eigenschaft 1010 ermöglicht dem
Clientcode zu bestimmen, ob handgeschriebene Information horizontal
gesammelt worden ist. Ein derartiger Clientcode kann sich dieser
Eigenschaft bedienen, um die Handschrift eines Endanwenders „zu bereinigen", indem er sie dem
Niveau nach ausgleicht, und/oder um die Linien oder anderen Formen
in der Handschrift des Anwenders genau zu zeichnen.
-
Bei
einigen Beispielen der Erfindung ist es notwendig, dass die einzelnen
InkDivisionUnit-Objekte 1000 in derselben InkDivisionUnits-Sammlung 900 vorhanden
sind, jedoch verschiedene RotationTransform-Eigenschaften 1010 aufweisen.
Hat ein Anwender beispielsweise einen Kreis geschrieben und um sämtliche
Worte gebeten, so enthält
die InkDivisionUnits-Sammlung 900 sämtliche Worte, und jedes InkDivisionUnit-Objekt 1000 kann
einen anderen Basislinienwinkel in der RotationTransform-Eigenschaft 1010 aufweisen.
-
Insbesondere
kann die RotationTransform-Eigenschaft 1010 nicht für sämtliche
InkDivisionUnit-Objekte 1000 relevant sein. So kann die
Eigenschaft 1010 beispielsweise für die InkDivisionUnit „Wort" und die InkDivisionUnit „Linie", jedoch nicht notwendigerweise
für „Zeichnung" oder „Absatz" notwendig sein.
Falls erwünscht,
kann der Parser für den
InkDivisionUnit-Teilungstyp (DivisionType) von „Absatz", ohne den Schutzbereich der vorliegenden Erfindung
zu verlassen, einen Drehwinkel des Absatzes auf Grundlage der einzelnen
bildenden Linien berechnen. Darüber
hinaus kann, falls erwünscht,
der Parser den Drehwinkel einer Zeichnung bei wenigstens einigen
Beispielen aus den in diesen Strichen beobachteten Mustern berechnen.
Daher ist, während
die RotationTransform-Eigenschaft 1010 für alle InkDivisionTypes
vorhanden ist, dies nicht notwnendigerweise der Fall.
-
Das
InkDivisionUnit-Objekt 1000 enthält darüber hinaus einen InkDivisionType 1022 namens Enum 1020,
das ebenfalls in 10 dargestellt ist. Der gewünschte InkDivision Type
kann durch den Clientcode oder den Anwendungsprogrammcode standardmäßig oder
auf beliebige andere geeignete Weise eingesetzt werden. In seiner
Ausgabe (die durch den Ausgabepfeil 1038 dargestellt ist)
beschreibt dieses Enum 1022 den Typ von InkDivisionUnits,
der für eine
Parsingoperation erwünscht
ist. Die Information kann beispielsweise von einer InkDivisionResult.ResultByType-Operation
verwendet werden. Die InkDivisionTypes für das Enum 1020 können beispielsweise
folgendermaßen
definiert werden:
InkDivisionType für Wort = 0
InkDivisionType
für Linie
= 1
InkDivisionType für
Absatz = 2
InkDivisionType für Zeichnung = 3
-
Selbstverständlich können auch
andere Enums verwendet werden, ohne den Schutzbereich der Erfindung
zu verlassen. So kann beispielsweise ein Enum-„Segment" verwendet werden, das entweder einem
Wort oder einem Schriftzeichen entspricht, und zwar insbesondere
zur Verwendung in Systemen, die für fernöstliche Sprachen ausgelegt
sind.
-
Für den Fall,
dass eine gegebene InkDivisionUnits-Objektsammlung InkDivisionUnit-Objekte mit verschiedenen
InkDivisionTypes enthält,
können sich
die spezifischen Werte für
Einträge
in dem Enum derart ändern,
dass sie beispielsweise in etwa folgendermaßen aussehen.
Sämtliche
InkDivisionTypes = 0
InkDivisionType für Wort = 1
InkDivisionType
für Linie
= 2
InkDivisionType für
Absatz = 4
InkDivisionType für Zeichnung = 8
-
Auf
diese Weise wird InkDivisionType zu einem Bitfeld, und es können einzelne
Typen mittels ODER verknüpft
werden, um eine Kombination von InkDivisionTypes zu spezifizieren,
die sich aus der ResultByType-Operation ergeben soll.
-
Selbstverständlich kann,
ohne den Schutzbereich der Erfindung zu verlassen, ein InkDivisionUnit-Objekt 1000 Eigenschaften,
Verfahren, Enums und/oder andere Elemente zusätzlich zu und/oder anstelle
von und/oder in Kombination mit den spezifischen Eigenschaften und
Enums gemäß Darstellung in 10 beinhalten.
-
V. Der Betriebsablauf von InkDivider-Objekt
und API
-
A. Leistung während einer Tintensitzung
-
Bei
Verwendung können
Tintenstriche zu der dem InkDivider-Objekt 700 zu eigenen
Sammlung von Strokes-Eigenschaften 704 auf geeignete Weise hinzugefügt, hieraus
entfernt und/oder auf andere Weise modifiziert werden, ohne den
Schutzbereich der Erfindung zu verlassen. Eine vollständig neue Strokes-Eigenschaft 704 kann,
falls erwünscht,
beispielsweise jedes Mal geschrieben und eingeführt werden, wenn ein Strich
zu einer bestehenden Strokes-Eigenschaft 704 hinzugefügt, aus
dieser entfernt und/oder auf andere Weise modifiziert wird. Ein
auf diese Weise erfolgendes Vorgehen führt jedoch sehr wahrscheinlich
zu nicht hinnehmbaren Verarbeitungsverzögerungen, da der Computer bei
jeder Änderung
eines Striches ein Reparsing von sämtlichen Tintenstrichen der
Strokes-Eigenschaft 704 vornehmen müsste.
-
Entsprechend
enthält
bei einigen Beispielen der Erfindung der Clientcode (oder der Anwendungsprogrammcode,
der das InkDivider-Objekt 700 verwendet, Verfahren zum:
(a) Hinzufügen
einzelner Tintenstriche, (b) Hinzufügen von Sätzen von Tintenstrichen (beispielsweise
durch eine Pasteoperation), (c) Entfernen von Tintenstrichen und
(d) Entfernen von Sätzen
von Tintenstrichen (beispielsweise durch eine Cutoperation) zu der
dem InkDivider-Objekt zu eigenen Strokes-Eigenschaftssammlung 704 anstelle
eines immer dann erfolgenden Ersetzens der gesamten Strokes-Eigenschaftssammlung 704,
wenn ein Strich hinzugefügt,
entfernt oder auf andere Weise modifiziert wird. Durch Verwenden
von Verfahren, bei denen nur betroffene Striche in einer einem aktuellen
InkDivider-Objekt
zu eigenen Strokes-Eigenschaft 704 hinzugefügt, entfernt
oder auf andere Weise modifiziert werden, kann die interne Parsingbaumdatenstruktur
inkrementell aktualisiert werden. Wird beispielsweise ein Strich
zu einer vorher geparsten Linie (beispielsweise der Querstrich eines „t") hinzugefügt, so kann,
wenn der neue Strich dem InkDivider-Objekt 700 unter Verwendung
eines Add-Verfahrens (beispielsweise über die Operation InkDivider.Strokes.Add(newstroke))
zugeleitet wird, die dem Parser zu eigene interne Parsingbaumdatenstruktur innerhalb
eines bestimmten Abstandes von der Stelle des neuen Striches beziehungsweise
der neuen Striche invalidiert bzw. ungültig gemacht werden, weshalb
die Striche nur im unmittelbaren Bereich der neuen Striche neugeparst
werden (was man auch als „schmutzige" Striche oder „schmutzige
Knoten" bezeichnet),
das heißt
bei diesem Beispiel der neue Strich in Verbindung mit dem Buchstaben „t" und andere in der
nahen Umgebung befindliche Striche. Bei einigen Beispielen dieses
inkrementellen Strichparsings werden nicht nur die aktuellen neuhinzugefügten Tintenstriche
geparst, sondern es werden auch zusätzliche Tintenstriche in der
Nachbarschaft des neuen Striches unter Berücksichtigung des Vorhandenseins
der neuen Striche neugeparst (reparsing). Bei einigen Beispielen
der Erfindung wird ein bestimmter Bereich um den neuhinzugefügten, gelöschten oder
auf andere Weise modifizierten Strich herum beziehungsweise um die
neuhinzugefügten, gelöschten oder
auf andere Weise modifizierten Striche herum einem Reparsing unterzogen
(um sicherzustellen, dass die neuhinzugefügten, gelöschten oder modifizierten Striche
im Kontext mit den sie umgebenden Strichen betrachtet werden, und
um sicherzustellen, dass die umgebenden Striche im Kontext mit der
letzten Modifikation betrachtet werden).
-
Bei
einigen Beispielen nehmen die Systeme und Verfahren entsprechend
der Erfindung so viel Parsing wie möglich im Hintergrund vor, ohne
dass darauf gewartet würde,
dass das Divide-Verfahren explizit von dem Clientcode oder dem Anwendungsprogrammcode
aufgerufen würde.
Wenn beispielsweise entweder die dem InkDivider-Objekt zu eigene Strokes-Eigenschaft 704 gesetzt
wird oder Striche der dem InkDivider-Objekt zu eigenen Strokes-Eigenschaft 704 hinzugefügt, aus
dieser entfernt oder auf andere Weise modifiziert werden, so erfolgt
das Parsen unmittelbar in einem Hintergrund-Thread an einer „Momentaufnahme" der Parsingbaumdatenstruktur,
wie allgemein im Zusammenhang mit 4 erläutert worden
ist. Wenn daher der Clientcode oder der Anwendungsprogrammcode das
Divide-Verfahren tatsächlich
aufrufen (beispielsweise am Ende einer Tintensitzung), so muss das
InkDivider-Objekt 700 lediglich (a) das Parsen der als
Letztes hinzugefügten
beziehungsweise gelöschten
beziehungsweise modifizierten Striche vornehmen (das heißt, es stellt
auf „schmutzige
Knoten" ab, so diese
vorhanden sind) und (b) sodann das neue InkDivisionResult-Objekt 800 erstellen
und ausgeben.
-
B. Verhalten bei Rückkehr zu einer Tintensitzung
-
Erwarten
Anwendungen, mehrfach mit Tintensitzungen zu beginnen und diese
zu beenden, und „vertrauen" sie der Anwendung
Objekte „an", so kann das InkDivider-Objekt 700 aufgerufen
werden, um immer dann ein Reparsing an sämtlichen bestehenden Daten
vorzunehmen, wenn das Anwendungsprogramm ein Tinte enthaltendes
Dokument öffnet. Obwohl
dies in einigen Situationen hinnehmbar sein kann, kann die Leistung
darunter leiden, und es können
Verarbeitungsverzögerungen
insbesondere beim Öffnen
von Dokumenten, die große
Mengen von Tintendaten enthalten, auftreten.
-
Bei
wenigstens einigen Beispielen der Erfindung sind zur Verbesserung
der Leistung in derartigen Situationen für den Fall, dass bestehende
Dokumente neugeöffnet
werden, die folgenden Optionen von Nutzen.
-
1. Das Vorhalten von Schattenobjekten
-
Verlässt ein
Anwendungsprogramm eine Tintensitzung und vertraut dem Bildschirm
Tintendaten an, so kann es bei wenigstens einigen Beispielen der Erfindung
von Nutzen sein, Kopien der Striche in den Strokes-Eigenschaftssammlungen 1004 jedes
InkDivisionUnit-Objektes 1000 zu erstellen und zu speichern,
anstatt dass die ursprünglichen
Striche aus der Sammlung geschnitten werden.
-
Anwendungen
dieser Art können
derart ausgestaltet werden, dass die Schattentintenobjekte von sämtlichen
Strichen wie auch das InkDivider-Objekt 700 und seine Strokes-Eigenschaftssammlung 704 (Striche,
die an den Tintenteiler/InkDivider angefügt sind) durchweg eines Parsings
bedürfen.
Wird das Divide-Verfahren aufgerufen (beispielsweise am Ende einer
Tintensitzung), so sollte die Anwendung die Tintenobjekte aus dem
Schattenobjekt in ihre jeweiligen Anwendungsobjekte kopieren anstatt schneiden.
-
Wird
beliebige Tinte in den Anwendungsobjekten bearbeitet, während man
nicht in einer Tintensitzung befindlich ist (so beispielsweise mittels
Vornahme von anderen Operationen wie Skalieren oder Rotieren), so
kann es für
die Anwendung bei diesem Beispiel der Erfindung erforderlich sein,
die Striche entsprechend diesem Anwendungsobjekt zu der Schattensammlung
hinzuzufügen
oder aus dieser zu entfernen. Wenn beispielsweise ein Zeichenobjekt, das
in einem Textverarbeitungsprogramm vorgesehen ist, repositioniert wird,
so muss das Schattentintenobjekt aktualisiert werden, um dieser
Repositionierung gerecht zu werden.
-
Bei
Rückkehr
zu einer Tintensitzung müssen lediglich
neue Striche hinzugefügt
oder entfernt werden, bevor das Divide-Verfahren 710 erneut
aufgerufen wird. Dies ermöglicht
eine inkrementelle Verarbeitung der Tinte zwischen Tintensitzungen.
-
Im
Allgemeinen ist zur Unterstützung
des inkrementellen Parsings nur ein einzelnes Schattentintenobjekt
erforderlich, sodass zwei physische Kopien eines gegebenen Tintenobjektes
existieren und synchronisiert werden müssen. Für den Fall eines Zeichenanwendungsprogramms,
das die Ergebnisse des InkDivider-Objektes 700 verwendet
und getrennte Ink-Objekte für
jedes der InkDivisionUnit-Objekte 1000 erstellt (sodass
diese einzeln aktiviert und als Zeichen und Elemente bearbeitet
werden können),
ist ein einzelnes Schattentintenobjekt für jedes Ink-Objekt erforderlich,
das das Zeichenanwendungsprogramm erstellt, wobei insgesamt immer noch
zwei Kopien der Tinte vorhanden sind.
-
Der
Vorteil dieses Verfahrens liegt im Leistungsgewinn bei einer Bewegung
zwischen Tintensitzungen. Die Nachteile sind der Speicherfootprint
und der Aufwand, der zum Synchronhalten der Sammlungen von Tintenobjekten
notwendig ist.
-
2. Reduktionsheuristik
-
Eine
weitere Möglichkeit
zur Verbesserung der Parsingleistung bei Rückkehr zu einer Tintensitzung
(nach Verlassen der Sitzung) betrifft die Reduzierung des Datensatzes,
an dem der Parser arbeiten soll. So ist es beispielsweise möglich, Heuristiken
zu implementieren, die bestimmen, ob ein „anvertrautes" Tintenobjekt Nutzen
aus dem Reparsing ziehen kann. Als Beispiel zur Darstellung sei
der Fall genannt, dass eine Anwendung das Reparsing nur auf „anvertraute" Tintenobjekte beschränkt, die
neue Tinte schneiden oder in einem gewissen räumlichen Abstand von der neuen
Tinte angeordnet sind. In einigen Fällen kann in Abhängigkeit
vom Szenario und/oder der Implementierung auch die z-Abfolge der „anvertrauten" Tintenobjekte ein
Faktor für
das Reparsing sein.
-
Obwohl
diese Vorgehensweise anfänglich einfacher
erscheint, als dies bei dem Lösungsansatz über Schattenobjekte
gemäß vorstehender
Diskussion der Fall ist, muss Sorgfalt darauf verwendet werden sicherzustellen,
dass die meisten, wenn nicht alle Stri che, die zu InkDivisionUnits
gehören,
die der InkDivider modifizieren soll, in den Reduktionsheuristiken
enthalten sind. Ein Fehler hierbei könnte zu Inkonsistenzen bei
den Parsingergebnissen führen
und damit nachteilige Auswirkungen auf einen Endanwender haben.
-
Darüber hinaus
ist der interne Parser selbst besser geeignet zu entscheiden, welche
Striche miteinbezogen werden sollen, da er über Kenntnisse des Invalidierungsschemas
verfügt,
das bei der Entscheidung verwendet wird, weiche Striche einem Reparsing
unterzogen werden sollen. Ein Invalidierungsschema bedient sich
einer radialen Invalidierung, obwohl auch andere Schemen verwendet
werden können,
ohne den Schutzbereich der Erfindung zu verlassen.
-
VI. Anwendungsprogrammierungsschnittstellen
-
Es
sind zahlreiche Anwendungsprogrammierungsschnittstellen (APIs) möglich, um
die verschiedenen Fähigkeiten
der Tinten-API auszunutzen. Zu den Beispielen hierfür zählen:
- (a) Ereignisse: Bei einigen Beispielen der
Erfindung kann die Beendigung verschiedener Teile einer Parsingoperation
(beispielsweise des Divide-Verfahrens 800 gemäß vorstehender
Beschreibung) verschiedene Ereignisse auslösen, um beispielsweise den
Clientcode zu benachrichtigen, dass wenigstens ein Teil der Parsingoperation
beendet ist, dass wenigstens einige Parsingergebnisse zur Verfügung stehen
und/oder dass der Parser erneut aufgerufen werden kann. Beispiele
für derartige
Ereignisse sind unter anderem die ParsingComplete- (Parsing beendet)
und DivisionComplete-Ereignisse. Das ParsingComplete-Ereignis informiert
bei einigen Beispielen der vorliegenden Erfindung das Anwendungsprogramm
darüber,
dass die Eingabetintenstriche an ihren jeweiligen Stellen in der
Parsingbaumdatenstruktur (beispielsweise derjenigen von 6B) partitioniert
worden sind. Der Erkenner hat zu diesem Zeitpunkt bei diesem Beispiel
der Erfindung noch keine Verarbeitung an den Tintenstrichdaten vorgenommen,
sodass einzelne Wort-für-Wort-Ergebnisse
noch nicht zur Verfügung
stehen. Das DivisionComplete-Ergebnis kann demgegenüber verwendet
werden, um das Anwendungsprogramm davon in Kenntnis zu setzen, dass
sämtliche
Parsing- und Erkennungsoperationen vollständig sind. Bei dem vorstehend beschriebenen
Beispiel wird bei Auslösen
eines DivisionComplete-Ereignisses der Anwendungscode in Kenntnis
gesetzt, dass ein InkDivisionResult-Objekt 800 unmittelbar
zur Verfügung
steht und dass das zugehörige
Result ByType-Verfahren verwendet werden kann, um InkDivisionUnit-Objekte
für die
erwünschte
Parsinggranularität abzurufen.
- (b) Faktoid: Faktoide können
zur Steuerung der Erkennung verwendet werden, so beispielsweise durch
Informieren des Parsers über
die erwartete Information oder die erwarteten Muster der einer Erkennung
zu unterziehenden Tinte. Ein Faktoid kann beispielsweise einen Parser
darüber
informieren, dass ein einlaufender String in einem Feld für eine Postleitzahl
befindlich ist. Der Parser kann dann nach bekannten fünfstelligen
oder neunstelligen Mustern suchen. Zudem kann der Parser vorzugsweise
Schriftzeichen als Zahlen erkennen, wenn sie in dem Feld für die Postleitzahl
auftreten. So kann er beispielsweise vorzugsweise einen S-förmigen Strich
als die Zahl „5" und nicht als den
Buchstaben „S" erkennen und/oder
vorzugsweise die Zahl „1" erkennen und nicht
den Kleinbuchstaben „l" oder den Großbuchstaben „I".
- (c) Schattenobjekte: Das InkDivider-Objekt 700 kann
bei wenigstens einigen Beispielen ein Verfahren bereitstellen, durch
das veranlasst wird, ein internes Schattentintenobjekt zu erstellen,
auf das es verweist, anstelle eines extern verwalteten Tintenobjektes.
Natürlich
stellt InkDivider (oder das damit verknüpfte Schattentintenmanagerobjekt)
auch Zugriffe auf das Schattentintenobjekt beziehungsweise die Schattentintenobjekte
und Verfahren zu deren Verwaltung bereit.
- (d) Reduktionsheuristiken: Die API des Parsers kann bei wenigstens
einigen Beispielen der vorliegenden Erfindung auch derart erweitert
werden, dass sie „empfohlene" Datensatzreduktionsmechanismen
enthält,
sodass sich die Entwickler für den
Fall, dass die Anwendungsanforderungen eines Entwicklers kompatibel
sind, nicht um die Reduktionsheuristiken kümmern müssen und anstelle dessen den
Parser auf Bestleistungen einstellen können.
- (e) Parserersetzung: Um Drittparteien in die Lage zu versetzen,
einen Erkenner oder Parser, den sie benötigen, zu verwenden, kann die
Parser-API eine „Plug-in"-Unterstützung für neue Erkenner und Parser
enthalten, die von dem Anwender heruntergeladen werden. Diese alternativen
Parsermechanismen verfügen
natürlich über eigene
Objektmodelle, die zu dem RecognizerContext-Objekt der API gemäß vorstehender
Beschreibung analog sind.
-
VII. Ein alternatives Tintenteilerobjekt
(InkDivider-Objekt)
-
7 bis 10 zeigen
ein Beispiel eines Tintenteilerobjektes und bestimmter Objekte,
die damit verknüpft
sind, entsprechend einigen Beispielen der vorliegenden Erfindung. 11 zeigt
ein weiteres Beispiel eines InkDivider-Objektes 1100. Dieses Sample-Objekt 1100 kann
verschiedene Eigenschaften 1102, Verfahren 1104,
Enums 1106 und Ereignisse 1108 enthalten, von
denen jedes nachstehend detailliert beschrieben wird.
-
Die
Ink-Eigenschaft 1110 gibt einen Verweis auf ein Ink-Objekt
oder die Striche, die zur Verarbeitung anstehen, aus oder setzt
diesen. Die Eigenschaft 1110 ist mit der Strokes-Eigenschaft 704 gemäß vorstehender
Beschreibung verwandt. Die Inks-Eigenschaft 1112 gibt eine
Sammlung von Tintenobjekten aus, die von dem Divide-Verfahren 1120 (das
nachstehend detailliert erläutert
wird) verwendet wird. Die DivisionGranularity-Eigenschaft 1114 empfängt die
Granularität,
mit der die Tinte in der Ink-Eigenschaft 1110 von dem Divide-Verfahren 1120 geparst
wird, oder setzt diese. Obwohl ein Standardwert (oder sogar kein
Standardwert) verwendet werden kann, ohne den Schutzbereich der
Erfindung zu verlassen, verwendet die DivisionGranularity-Eigenschaft 1114 bei
einigen Beispielen der vorliegenden Erfindung den Standard einer „Wort"-Granularität. Die DivisionGranularity-Eigenschaft 1114 kann unter
Verwendung von DivisionGranularity-Enum 1106 gesetzt werden,
das beispielsweise Enums enthalten kann, die „Absätzen", „Linien", „Sätzen", „Worten", „Zeichnungen" und dergleichen
mehr entsprechen. Die gewünschte
DivisionGranularity kann von dem Clientcode oder dem Anwendungsprogrammcode
als Standard oder auf beliebige andere geeignete Weise gesetzt werden.
-
Das
Divide-Verfahren 1120 nimmt die Tintenparsingoperation
an den Tintenstrichen vor, die in der Ink-Eigenschaft 1110 vorhanden
sind, und zwar auf Grundlage der gesetzten DivisionGranularity-Eigenschaft 1114.
Das DivisionComplete-Ergebnis 1130 wird ausgelöst, um das
Anwendungsprogramm davon in Kenntnis zu setzen, dass das Divide-Verfahren 1120 seine
Operation beendet hat. Die geparsten Ergebnisse des Divide-Verfahrens 1120 werden
in die Inks-Eigenschaft 1112 geschrieben und können dem Anwendungsprogramm
und dem Clientcode von dort aus, wie durch den Pfeil 1132 dargestellt
ist, zur Verfügung
gestellt werden. Sobald der Clientcode oder der Anwendungsprogrammcode
das DivisionComplete-Ereignis 1130 empfängt, besitzt er davon Kenntnis,
dass er die Inks-Eigenschaft 1112 und die Ergebnisse der
Parsingoperation abrufen kann.
-
In
Abhängigkeit
von den spezifischen Eigenheiten der Implementierung kann die Inks-Eigenschaft 1112 zugänglich oder
auch nicht zugänglich sein,
während
die Parsingoperation (das heißt
das Divide-Verfahren 1120) ausgeführt und die interne Parsingbaumdarstellung
der Tinte konstruiert wird.
-
Selbstverständlich kann,
ohne den Schutzbereich der Erfindung zu verlassen, ein InkDivider-Objekt 1100 auch
Eigenschaften, Verfahren, Enums, Ereignisse und/oder andere Elemente
in Kombination mit und/oder zusätzlich
zu und/oder anstelle von spezifischen Eigenschaften, Verfahren, Enums
und Ereignissen gemäß Darstellung
in 11 enthalten.
-
VIII. Schlussbetrachtung
-
Ungeachtet
der Tatsache, dass die Erfindung im Zusammenhang mit verschiedenen
spezifischen Beispielen beschrieben worden ist, stellen diese spezifischen
Beispiele lediglich beispielhafte Ausführungen der Erfindung dar und
beschränken
diese nicht. Einem Fachmann auf dem einschlägigen Gebiet erschließt sich,
dass beispielsweise ungeachtet der Tatsache, dass verschiedene spezifische
Namen für Objekte,
Eigenschaften, Verfahren, Enums, Ereignisse und dergleichen in der
vorliegenden Beschreibung verwendet werden, diese spezifischen Namen
lediglich Beispiele für
mögliche
Namen sind und keine Beschränkung
der Erfindung darstellen sollen. Selbstverständlich können andere Namen für Objekte,
Eigenschaften, Verfahren, Enums, Ereignisse und dergleichen verwendet
werden, ohne den Schutzbereich der Erfindung zu verlassen. Darüber hinaus
kann die spezifische Anordnung von Objekten, Eigenschaften, Verfahren,
Enums, Ereignissen und dergleichen von den spezifischen Anordnungen
gemäß vorliegender Beschreibung
und Darstellung abweichen, ohne den Schutzbereich der vorliegenden
Erfindung zu verlassen.
-
Darüber hinaus
bedeutet der Umstand, dass ein spezifisches Merkmal oder eine spezifische Funktion
der Erfindung in Verbindung mit einem spezifischen Beispiel beschrieben
wird, nicht, dass dieses Merkmal oder diese Funktion auf die Verwendung
mit diesem spezifischen Beispiel der Erfindung beschränkt ist
oder dass jedes Beispiel dieses spezifische Merkmal oder diese spezifische
Funktion enthalten muss. Vielmehr können, außer dies ist explizit anderweitig
spezifiziert, die verschiedenen Merkmale und Funktionen gemäß vorstehender
Beschreibung in jedem Beispiel der Erfindung frei verwendet werden.
Einem Fachmann auf dem einschlägigen
Gebiet erschließt
sich, dass Änderungen und
Abwandlungen an den als Beispiel angegebenen Ausgestaltungen der
Erfindung vorgenommen werden können, ohne
den Schutzbereich der Erfindung zu verlassen, der in den beigefügten Ansprüchen niedergelegt
ist.