AutoLesefehlerKorrektur

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

effel
Posts: 552
Joined: 16 Jan 2018, 13:34

AutoLesefehlerKorrektur

22 Oct 2020, 11:29

Hallo, ich habe mir ein Script gebastelt, welches mir die Untertitel (auch übersetzt) vorliest. Das funktioniert klaglos. Durch verschiedene 'Maßnahmen' wie....

Code: Select all

similarityrating := stringSimilarity.compareTwoStrings(text, lasttext)
if (similarityrating >= 0.50)
....erreiche ich auch ein relativ fehlerloses einlesen der Untertitel, indem ich z.B. doppelt eingelesene Texte mit stringSimilarity.compareTwoStrings() aussortiere.

Bis hier funktioniert noch alles Offline.

Einige Lesefehler lassen sich einfach nicht vermeiden, daher überlege ich, ob ich Google zu Hilfe nehme. Was den Nachteil hätte das Google je nach Film tausende Anfragen verarbeiten muss. Beispiel:
Spoiler
Wenn ich einen fehlerlosen Satz sende und vonda versuchte ihr auf jede erdenkliche art zu helfen., bekomme natürlich mehr Ergebnisse angeboten 54 Ergebnisse (0,40 Sekunden)
20201022165724-Monitor-2.jpg
20201022165724-Monitor-2.jpg (18.26 KiB) Viewed 844 times
Als bei einem Satz mit Fehlern ein wenig kken wenig syyi_jb, hier werden nur wenige Ergebnisse angeboten 8 Ergebnisse (0,32 Sekunden)

20201022165608-Monitor-2.jpg
20201022165608-Monitor-2.jpg (13.15 KiB) Viewed 844 times

Hier kommt noch ein 'Google-Plus' hinzu, indem ich das Meintest du: ja genau so. ich sagte ich bin ira todd ein abgehalfterter cop auswerte und einen bereinigten Satz zurück bekomme

20201022160236-Monitor-2.jpg
20201022160236-Monitor-2.jpg (28.21 KiB) Viewed 844 times

Was zumindest ausreicht, grobe Fehler auszusortieren.


Ich bin nicht hin und her gerissen, ob ich das so machen soll, der Grund meiner Anfrage ist mehr, ob dazu vielleicht jemand eine bessere Idee hat. so dass ich weiter offline arbeiten kann. Oder Ideen dazu beiträgt, die ich noch garnicht habe.. 😊

Vielen Dank fürs lesen
Kobaltauge
Posts: 264
Joined: 09 Mar 2019, 01:52
Location: Germany
Contact:

Re: AutoLesefehlerKorrektur

27 Oct 2020, 03:38

Wie wäre es einen lokalen Spellchecker zu verwenden? Leider habe ich nicht herausfinden können, den Windowseigenen https://docs.microsoft.com/de-de/windows/win32/intl/about-the-spell-checker-api?redirectedfrom=MSDN zu verwenden.
Aber hier im Forum gibt es das hier https://www.autohotkey.com/boards/viewtopic.php?t=4971. Ich finde er funktioniert ganz gut.
effel
Posts: 552
Joined: 16 Jan 2018, 13:34

Re: AutoLesefehlerKorrektur

27 Oct 2020, 15:26

Kobaltauge wrote:
27 Oct 2020, 03:38
Sehr interessant, ich bin noch nicht soweit dahinter gestiegen, es in Deutsch zu nutzen.

Hast du Code Schnipsel von deinen Tests?

Ein typischer Lesefehler wäre: Hausmeister11 weil zufällig hinter dem Untertitel etwas weißes hinter weißer Schrift im Bild auftaucht. Das ergibt:

"Hausmeister11" not found in the dictionary. There are 4 suggested words which are as follows:
Hammerstein
Hucksterism
Magisterial
Ministerial

bei Hausmeister111 bekomme ich schon keine Ergebnisse. Ich denke es wird schwer damit ganze Sätze zu filtern.

Und dennoch hat es den Weg in meine Ahk Schatzkiste gefunden 😊

Danke für deine Meldung
Kobaltauge
Posts: 264
Joined: 09 Mar 2019, 01:52
Location: Germany
Contact:

Re: AutoLesefehlerKorrektur

27 Oct 2020, 16:55

Das auf Deutsch zu stellen ist easy. Einfach Zeile 6 von Example - Simple Test.ahk so ändern.
Natürlich muss man vorher die zwei Dateien aus dem OpenOffice in das dict Verzeichnis kopieren. Ich habe sie mal angehängt.

Code: Select all

if not Spell_Init(hSpell,"dic\de_AT_igerman98.aff","dic\de_AT_igerman98.dic","lib\")
Leider spuckt er bei Hausmeister111 keinen Hausmeister heraus. Und bei "Hausmeiste" ist Hausmeister erst Treffer 4. Also auch nicht das Gelbe vom Ei.
Und das mit den ganzen Sätzen klappt auch nicht. "vonda" aus deinem Beispiel wird auch zu Honda. Erst Treffer 2 ist "von da". Also ein "ich jage das Wort für Wort durch und entferne z.B. alle Zahlen am Ende eines Wortes heraus oder wenn Zahlen im Wort sind, dann ersetze ich sie durch ähnliche Buchstaben wie 'l' statt '1'", ist damit auch nur schwer möglich. Wobei das ggf. trotzdem einen Haufen Arbeit ersparen könnte.

Schade. Wäre sicherlich ne nette Lösung gewesen.
Attachments
dic.zip
(287.11 KiB) Downloaded 49 times
Kobaltauge
Posts: 264
Joined: 09 Mar 2019, 01:52
Location: Germany
Contact:

Re: AutoLesefehlerKorrektur

28 Oct 2020, 04:39

Ich habe mal ein kleines Skript gebastelt, um ein Grundgerüst zu haben. Jedoch ist diese Hunspell Library nicht so dolle.
Dein Input als Datei input.txt. Es liest die Zeile ein und schickt jedes Wort durch den Spellcheck. Bei mehrfachen Treffen holt es sich den ersten Treffer. Für dieses Problem habe ich die Funktion st_split von hier verwenden müssen https://www.autohotkey.com/boards/viewtopic.php?f=6&t=53. Wenn es keine Treffer gab, dann gebe ich das Wort zurück. Hier dachte ich könnte man einen Kenner setzten, z.b. das Wort in "@" einschließen um es dann besser zu suchen.

Leider funktioniert das mehr schlecht als Recht. Wie du an den angehängten output.txt sehen kannst. Am besten die beiden Dateien vergleichen.

Ich hoffe, es hilft dir ein wenig weiter.

Code: Select all

#include %A_ScriptDir%
#include Spell.ahk

if not Spell_Init(hSpell,"dic\de_AT_igerman98.aff","dic\de_AT_igerman98.dic","lib\")
    return

inputfile := FileOpen("input.txt","r", UTF-8)
outputfile := FileOpen("output.txt","w", UTF-8)

Loop,
{
    newstringarray := ""
    row := inputfile.ReadLine()
    row := StrSplit(row, ";")
    indexnumber := Trim(row[1])
    stringarray := StrSplit(Trim(row[2]), A_Space, ".")
    Loop % stringarray.MaxIndex() {
        word := stringarray[A_Index]
        if Spell_Spell(hSpell,word)
            rightword := word 
        else
            {
            Spell_Suggest(hSPell,Word,SuggestList)
            rightword := st_split(SuggestList)[1]
            }
        if rightword == ""
            rightword = word
        newstringarray := newstringarray . " " . rightword
        }
    newstringarray := Trim(newstringarray)
    ; completestring := indexnumber . ";" . newstringarray
    outputfile.WriteLine(indexnumber . ";" . newstringarray)
} Until inputfile.AtEOF
outputfile.Close()

st_split(string, delim="`n", exclude="`r")
{
    arr:=[]
    loop, parse, string, %delim%, %exclude%
        arr.insert(A_LoopField)
    return arr
}

Spell_Uninit(hSpell)
return
Attachments
output.txt
(664 Bytes) Downloaded 42 times
input.txt
(710 Bytes) Downloaded 41 times

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 21 guests