1 Zuletzt bearbeitet von SJE (14.07.2016 14:12:37)

Thema: Kombinierte diktateingabe

Hallo zusammen,

ich brauchte mal eure Hilfe,

Ich versuche eine kombinierte Eingabe zu erstellen.

Hierbei soll Dragon einzelne Zahlen zu einem Gesamtstring zusammen führen.
Anwendungsbereich soll die Eingabe von Aktenzeichen aus einzeln erkannten Zahlen (ein und zweistellig) im Skript zusammen geführt werden. Die Zahlen sind hierbei unterbrochen durch wenige feststehende Buchstabenkombinationen.

Gibt eine Objektübersicht oder ggf. ein bestehendes Script(das ich wohl übersehen haben muss) welches erkannte Worte in Strings überführt, intern verändert und an eine MessageBox zurückgibt?

Noch unvollständig aber in folgende Richtung soll die Reise gehen:

Sub Main
    Dim Eingabe As Variant
    Dim Ausgabe As String

        SendSystemKeys"{F3}"                  'öffenen der Dialogbox
        Eingabe_var = GetRecognizedWord  'Diktateingabe holen
        Ausgabe = CStr(Eingabe) & "Js"
        Eingabe_var = GetRecognizedWord  'weitere Diktateingabe holen
        Ausgabe = Ausgabe & CStr(Eingabe)
        SendDragonKeys Ausgabe
        SendKeys "~"
End Sub

Oder ist es hier notwendig eine Riesenschleife mit 'HeardWord" aufzubauen?

Vielen Dank im Voraus

2

Re: Kombinierte diktateingabe

Wie soll denn der Sprachbefehl lauten? Etwa so: "Aktenzeichen <kammer> <zahl> <jahr>"?
Oder?
Gruß, Pascal

3

Re: Kombinierte diktateingabe

P.Roch schrieb:

Wie soll denn der Sprachbefehl lauten? Etwa so: "Aktenzeichen <kammer> <zahl> <jahr>"?
Oder?
Gruß, Pascal

Nein, Pascal, ich denke, der Ansatz ist viel komplizierter, und wahrscheinlich unmöglich. Aber ich verstehe auch nur zur Hälfte, was gemeint ist.

DPI 15 (15.00.000.076) auf Windows 8.1 (64-bit)
SpeechMike Premium (LFH3500) mit Philips Device Control Center (3.0)
Intel i7 2600 QuadCore - 3.4 GHz - 8 MB L3-Cache - 6 GB RAM

4

Re: Kombinierte diktateingabe

Der Sprachbefehl könnte so lauten wie du das vorgeschlagen hast.

Also: Aktenzeichen <Kammer> <zahl> aus <jahr>

nur benötige ich die Spracheingabe die DRAGON bei den Variablen erkennt.

Sprich:

"Aktenzeichen <24> <1052> aus <16>"

Soll zu einem String: "24 Js 1052/16" umgewandelt und in das entsprechende Formfeld in der Anwendung eingefügt werden.

5

Re: Kombinierte diktateingabe

Mit einem Sprachbefehl geht das nicht so ohne weiteres: Für die variablen Stellen müssten Listen mit zulässigen Werten definiert werde. Das dürfte kaum möglich sein, evtl. noch für Jahr und Kammer, aber nicht für die laufende Nummer.

Das Ganze lässt sich einfach über das Vokabular regeln:
1. Fügen Sie das Wort "Js", gesprochene Form "J S" oder "jott ess", hinzu, definieren Sie als Worteigenschaften "Zahlen davor / danach" als Ziffern schreiben.
2. Für das Wort "aus" definieren Sie die Worteigenschaften: gedruckte Form 1 als "/", Eigenschaften "keine Leerstelle davor/danach", Zahlen davor / danach als Ziffern.

Ich hoffe, Sie kommen mit der skizzenhaften Beschreibung zurecht - probieren Sie, dabei lernt man ja auch.
Gruß, Pascal

6

Re: Kombinierte diktateingabe

P.Roch schrieb:

Mit einem Sprachbefehl geht das nicht so ohne weiteres: Für die variablen Stellen müssten Listen mit zulässigen Werten definiert werde. Das dürfte kaum möglich sein, evtl. noch für Jahr und Kammer, aber nicht für die laufende Nummer.

Das Ganze lässt sich einfach über das Vokabular regeln:
1. Fügen Sie das Wort "Js", gesprochene Form "J S" oder "jott ess", hinzu, definieren Sie als Worteigenschaften "Zahlen davor / danach" als Ziffern schreiben.
2. Für das Wort "aus" definieren Sie die Worteigenschaften: gedruckte Form 1 als "/", Eigenschaften "keine Leerstelle davor/danach", Zahlen davor / danach als Ziffern.

Ich hoffe, Sie kommen mit der skizzenhaften Beschreibung zurecht - probieren Sie, dabei lernt man ja auch.
Gruß, Pascal

Vielen Dank erst einmal für die Info. Das könnte zumindest für den Anfang weiterhelfen.

Wie sähe denn diese Variante in VB bzw. DragonScript aus?

d.h. wie kann ich auf das erkannte Wort zugreifen?

Geht das nur über das Objekt "heardword" oder wie kann ich auf die Eigenschaften des Objekts "GetRecognizedWord" zugreifen.

Gibt es ggf. noch weitere Objekte die für das Auslesen der erkannten Worte in Variablen nutzbringend sein könnten?

Ist irgendwo eine Objektbibliothek verfügbar, die mal ein wenig mehr beschreibt als nur die Hilfe-Datei?

Das geht schon tiefer in die Objektorientierte-Programmierung ist aber wohl in dem Fall auch nötig.

Gruß Stephan

7

Re: Kombinierte diktateingabe

So ganz verstehen kann ich den Nutzen der Übung nicht.

Für einen Sprachbefehl gäbe es verschiedene Möglichkeiten (neben den schon genannten):
a) Aufruf eines VBA-Dialogs, in dessen Felder die Zahlen diktiert werden.
b) einen Befehl "Aktenzeichen <dictation>". Die Eingabe <dictation> kann dann als ListVar1 bzw. utilityprovider.contextvalue(0) ausgewertet werden.

Ihre Fragen korrekt und kurz zu beantworten fällt mir schwer, da wir möglicherweise unterschiedliche Vorstellungen von Objekten haben - weder HeardWord noch GetRecognizedWord sind Objekte. Wo haben Sie denn das gelesen? Was verstehen Sie denn unter Objektbibliothek?

Gruß, Pascal

8

Re: Kombinierte diktateingabe

P.Roch schrieb:

So ganz verstehen kann ich den Nutzen der Übung nicht.

Pascal, es ist so schlimm, wie ich weiter oben befürchtet habe, oder schlimmer. Das Beste, was er bekommen kann, hast Du ihm schon gezeigt, aber er sieht es nicht, wie auch.

Was er hier vorträgt, ist ein Sammelsurium aus dem, was er irgendwo aufgeschnappt hat, und was aber weder hinten noch vorne Sinn macht. Wenn ich spekulieren darf, ist er ein System Administrator (mit Betonung auf: Mini) in irgendeiner größeren Organisation, kennt sich ein wenig aus mit Web-Development, JavaScript, Office Anwendungen, vielleicht hat er auch in .NET reingeschnuppert, und bestimmt schon mal ein bisschen Linux gemacht.

Bei der Gelegenheit ist er irgendwie auf Objekt-Orientierte Programmierung gestoßen, und hat in dem Zusammenhang von Bibliotheken gehört.

So weit, so gut. Mal abwarten, was er antworten wird, wenn überhaupt.

DPI 15 (15.00.000.076) auf Windows 8.1 (64-bit)
SpeechMike Premium (LFH3500) mit Philips Device Control Center (3.0)
Intel i7 2600 QuadCore - 3.4 GHz - 8 MB L3-Cache - 6 GB RAM

9

Re: Kombinierte diktateingabe

@Pascal:
Vielen Dank für deine konstruktiven Antworten. Vielleicht haben wir ein wenig an einander vorbei geredet, aber ich denke ich habe genug Anhaltspunkte um einen Lösungsversuch zu erarbeiten. Wahrscheinlich wird eine Kombination von neuem Vokabular und Scriptbefehlen zu nutzen sein.

Die komplette Zahl oder das komplette Aktenzeichen als eine Eingabe (<dictation>) zu nutzen, war auch mein erster Gedanke. Nur dürfte die Spracheingabe recht störanfällig sein, sodass ich die Eingabe lieber segmentieren würde um die Erkennungsgenauigkeit zu erhöhen. Wenn eine Eingabe x mal wiederholt werden muss führt das eher zu Frustration beim Anwender.

Ist die Möglichkeit gegeben in DNS häufiger verwendete Prozeduren/Funktionen global für andere Scripte verfügbar zu machen? Geht das wie in VB generell vorgesehen über 'call' wenn ich die globale Prozedur vorher als 'public' definiert ist? Oder sind solche Aufrufe nicht vorgesehen/gesperrt?

Mit Objektbibliothek meine ich eine Auflistung aller verfügbaren/nutzbaren Objekte/Methoden/Prozeduren/Funktionen/Eigenschaften die für die Erstellung von DN-Skripten zur Verfügung stehen und weitreichender in der Erklärung sind als die Hilfedatei. Meinetwegen auch ne Buchempfehlung, wenn da was auf dem Markt sein sollte.  Aufgrund fehlender Doku sind mir die Möglichkeiten, die ich mit dem Script habe, noch nicht klar, daher auch meine Fragen.

GetRecognizedWord wird bei dem (wohl) Objekt DngDictExtraction aufgeführt als Parameter wird angegeben:
byVal iWordIndex as PortInt angegeben.

Gefunden im  Skripterstellungsfenster unter {F2} Browse Object. Da steckt zwar noch jede Menge mehr drin, womit ich mich jetzt noch nicht näher beschäftigt hab.

HeardWord und dessen Anwendung hatte ich in einem bestehenden Script gelesen (dort ohne vorherige Objekt-Referenzierung)

Genutzt wurde dort die Methode/Prozedur (?) wie folgt

if HeardWord "1" than variable = 1 endif 

if HeardWord "2" than variable = 2 endif

if HeardWord "3" than variable = 3 endif

.... und immer so weiter

Ich würde das als Äquivalent zur Erstellung einer Liste werten. Was jetzt aufgrund der bestehenden Listenfunktion nicht wirklich als Script umgesetzt werden müsste. Aber der "Befehl" hat ja noch anderen Anwendungen.

Der Hinweis auf "utilityprovider.contextvalue(0)" war genau das was ich brauchte. Danke dafür



Geschenkt, wenn die Bezeichnungen (was jetzt ein komplettes Objekt ist und was nur eine Methode oder Eigenschaft darstellt) nicht korrekt ausgedrückt sein mag. Dafür bräuchte ich Einblicke in die Interne Struktur des Scripts, was ich erst erarbeiten muss.

Vielen Dank Pascal für deine Unterstützung.

PS: Schade nur, dass nicht alle die den Status "Moderator" besitzen auch wirklich unterstützen wollen und scheinbar einfach nur nicht zugeben wollen, dass sie ein Antwort nicht haben. Ich dachte, dass die Forenregeln auch für Moderatoren gelten?

10

Re: Kombinierte diktateingabe

Sinnvolle Antworten kann es nur auf sinnvolle Fragen geben. Ihre Beiträge folgten demgegenüber eher dem Muster: „Welche Farbe hat Dienstag?“

Mein Rat wäre, dass die Staatsanwaltschaft ("Js" bringt es an den Tag) die Erstellung von Skriptbefehlen lieber jemandem anvertrauen sollte, der programmieren kann. Alles andere ist eine Verschwendung von Steuermitteln (zum Glück nicht meinen - anderes 'Bundes'land).

Fröhliches Scheitern weiterhin!

Dragon Legal Group 15, Win 10 Pro, Office 2013/2016, SpeechMike Premium, i7-3770, 32 GB RAM, 240 GB SSD
Dragon für Mac 6.0.7, Office für Mac 2016, iMac Retina 5K Late 2015 4,0 GHz i7-6700K, 32 GB RAM, 1TB SSD

11

Re: Kombinierte diktateingabe

Hallo SJE,

die Passage über die Moderatoren sollten wir mal ganz schnell vergessen. Ohne diese "ehrenamtlichen" Moderatoren gäbe  dieses Forum überhaupt nicht. Da dürfte es doch legitim sein, etwas abwegigen Beiträgen nicht weiter zu folgen und mal eben nicht zu antworten. Zumal sich kaum weitere der zweitausend Forumsmitglieder bemüßigt fühlen, gelegentlich eigene Gedanken beizusteuern.

Zum Aktenzeichen-Problem:

Nur dürfte die Spracheingabe recht störanfällig sein, sodass ich die Eingabe lieber segmentieren würde um die Erkennungsgenauigkeit zu erhöhen.

Ich gehe jede Wette ein, dass sich kaum ein Anwender darüber freuen wird, dass er das Aktenzeichen stückweise diktieren soll. Hier lauert wirklich Frustration. Da nimmt er doch gleich die Tastatur. Oder die von mir vorgeschlagene Lösung.

Ist die Möglichkeit gegeben in DNS häufiger verwendete Prozeduren/Funktionen global für andere Scripte verfügbar zu machen?

Nein, in der angedachten Weise (globale Proceduren und Funktionen) gibt es da nichts. Es gibt lediglich die uses-Anweisung, um Programmcode mehrfach zu nutzen. Generell: der in Dragon verwendete Basic-Dialekt ist WinWrap-Basic, ergänzt durch dragon-eigene Anweisungen  wie Heardword usw. (advanced scripting language). Das von Dragon verwendete Objektmodell ist im SDK dargestellt, ein spezielles Buch dazu ist mir nicht bekannt.

"if HeardWord "1" than variable = 1 endif" ist absoluter Schwachsinn, jedenfalls als Dragon-Script.

Geschenkt, wenn die Bezeichnungen (was jetzt ein komplettes Objekt ist und was nur eine Methode oder Eigenschaft darstellt) nicht korrekt ausgedrückt sein mag.

Nein, das ist nicht geschenkt. Entweder korrekte Sprache oder man lässt es bleiben, bis man die Sache verstanden hat. Oder auf welcher Basis soll man sich sonst mit "Kollegen" verständigen?

Wenn Sie sich wirklich intensiv mit Sprachbefehlen befassen wollen, empfehle ich das Buch "Skripting für Dragon NaturallySpeaking" (falls es nicht vergriffen ist. Wenden Sie sich an info(at)voelter-online.de) Meines Wissens die einzige deutschsprachige Literatur zum Thema. Als Beigabe gibt es dort auch die ins Deutsche übertragenen teilweise ziemlich komplexen Nuance-Beispiele.

Noch mal: Das Aktenzeichen-Problem ist nicht gerade das geeigneteste, um sich mit Sprachbefehlen, insbesondes Skripten, vertraut zu machen. Und da es eine einfache Lösung gibt, habe ich weder Zeit noch Lust, mich intensiver damit zu beschäftigen.
Gruß, Pascal

12

Re: Kombinierte diktateingabe

SJE schrieb:

Schade nur, dass nicht alle die den Status "Moderator" besitzen auch wirklich unterstützen wollen und scheinbar einfach nur nicht zugeben wollen, dass sie ein Antwort nicht haben.

Auch darin irren Sie, aber ganz gewaltig. Die Dragon-API kenne ich zufällig recht gut, und hätte jede Menge Antworten für Sie, nur keine Lust, Sie ab Punkt Null an die Hand zu nehmen, zumal ich ernsthafte Fragen bei Ihnen nicht entdecken kann. Ihre Ausführungen und vor allem die Code-Schnipsel, die Sie von Anfang an präsentiert haben, lassen in einen tiefen Abgrund blicken.

Und übrigens, was Ihnen vorschwebt, würde ich sogar hinbekommen, aber selbst wenn Sie mich dafür bezahlen, würde ich es nicht machen, weil es Unsinn ist.

Ihren Anwendern kann man nur wünschen, dass Sie Meinhards Empfehlung folgen und die Programmierung erst einmal beiseite legen - und stattdessen Pascals so simple wie überzeugende Lösung verwenden, nämlich den Weg über das Vokabular. Aus Sicht der Anwender ist das die bequemste und zuverlässigste Methode.

DPI 15 (15.00.000.076) auf Windows 8.1 (64-bit)
SpeechMike Premium (LFH3500) mit Philips Device Control Center (3.0)
Intel i7 2600 QuadCore - 3.4 GHz - 8 MB L3-Cache - 6 GB RAM

13 Zuletzt bearbeitet von rc.otto (22.07.2016 10:12:28)

Re: Kombinierte diktateingabe

Ich verwende selbst regelmäßig Aktenzeichen und Dragon mach aus "einhundertdreiundachtzig aus sechzehn" zuverlässig "183/16". Weshalb das mit der zusätzlichen Kammerbezeichnung und dem "Js" nicht klappen sollte, weiß ich nicht, es sei denn, Dragon hat einen gewissen Sinn für Liberalität. ; -)
Wenn es also nur darum geht, das Aktenzeichen einzutragen, sollte das in der beschriebenen Weise funktionieren.
Wenn aber beabsichtigt sein sollte, damit ein Programm zu steuern, und deshalb der komplizierte Weg erforderlich sein sollte, müsste ich passen; ich verwende Dragon fast nur in Verbindung mit Word.

14 Zuletzt bearbeitet von Gusa (10.10.2016 10:19:49)

Re: Kombinierte diktateingabe

Hallo zusammen,

ich lese schon seit längerem in diesem Forum mit und habe bereits viel Interessantes und (zum Großteil für mich) Neues lernen können.
Ich weiß nicht, ob ich das Problem des Thread-Erstellers richtig verstanden habe, aber eigentlich dürfte die Auswertung doch kein Problem darstellen.
Ich habe mich mit meinen bescheidenen Scripting-Kenntnissen einmal versucht und bin zu folgender Lösung gekommen. Bei mir funktioniert das Skript übrigens einwandfrei.

Sub Main

Worte=Split(Listvar1," ")
z="Aktenzeichen " +  Listvar1
If UBound(worte)=3 Then
    If worte(2)="aus" And IsNumeric(worte(0))=True And IsNumeric(worte(1))=True And IsNumeric(worte(3))=True Then
        z= worte(0) + " Js " + worte(1) + "/" + worte(3)
    End If
End If
SendKeys  z,True
End Sub

Aufgerufen wird es mit: Aktenzeichen <dictation>
Vielleicht habe ich aber auch einen Denkfehler und das Problem ist ein ganz anderes.
Über eine Rückmeldung würde ich mich freuen.

Edit 10.10.2016:
Ich habe einmal ein wenig mit meinem Skript experimentiert. Für das vom Thread-Ersteller angegebene Beispiel funktioniert mein Skript.

Der Sprachbefehl könnte so lauten wie du das vorgeschlagen hast.

Also: Aktenzeichen <Kammer> <zahl> aus <jahr>

nur benötige ich die Spracheingabe die DRAGON bei den Variablen erkennt.

Sprich:

"Aktenzeichen <24> <1052> aus <16>"

Soll zu einem String: "24 Js 1052/16" umgewandelt und in das entsprechende Formfeld in der Anwendung eingefügt werden.

Aber im täglichen Einsatz würde ich es nicht einsetzen wollen.
Es gibt nämlich zwei erhebliche Schwächen:

  • Die beiden Zahlenwerte < Kammer > und < Nummer > werden gern zu einer Zahl „zusammen verstanden“.

  • Bei Zahlen <13 wird die ausgeschriebene Schreibweise benutzt und dementsprechend von meinem Skript nicht korrekt ausgewertet.

Es ist somit eher eine Machbarkeitsstudie, als eine sinnvolle und produktive Erleichterung.

DPI 15 auf Windows 7 (64-bit)
SpeechMike Premium (LFH3500) mit Philips Device Control Center (3.7.370.7)
Jabra Link 220 USB / Olympus DS-3500 / Jabra Pro 9470
Intel i7 2600 QuadCore - 3.4 GHz - 16 GB RAM

15

Re: Kombinierte diktateingabe

@SJE: Hallo Threadersteller,
hast Du mein Skript einmal ausprobiert und geschaut, ob es wie gewünscht funktioniert?
Es wäre schön zu erfahren, ob Dein Problem damit gelöst ist oder ob ich etwas falsch verstanden habe und es doch komplexer ist.

DPI 15 auf Windows 7 (64-bit)
SpeechMike Premium (LFH3500) mit Philips Device Control Center (3.7.370.7)
Jabra Link 220 USB / Olympus DS-3500 / Jabra Pro 9470
Intel i7 2600 QuadCore - 3.4 GHz - 16 GB RAM