HyperLinkErgebnis

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

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

HyperLinkErgebnis

Post by effel » 23 May 2024, 04:10

Guten Morgen, kann mir jemand diese Funktion so ändern, dass sie `auch` Links mit nur www filtert?

Code: Select all

getHyperLink(xHyperlink){
Loop, parse, xHyperLink, `n, `r 
; 	URLRegex = i)href?://[\w.-]+/?[\w!#`%&+./:=?@-]*
 	URLRegex = i)https?://[\w.-]+/?[\w!#`%&+./:=?@-]*
While pos := RegexMatch(xHyperlink, URLRegex, HyperLinkErgebnis, A_Index = 1 ? 1 : pos + 1 )
res .= HyperLinkErgebnis "`n"
Return res
}

User avatar
andymbody
Posts: 996
Joined: 02 Jul 2017, 23:47

Re: HyperLinkErgebnis

Post by andymbody » 23 May 2024, 05:28

nicht getestet

URLRegex := "(https?://|www\.)[\w.-]+/?[\w!#`%&+./:=?@-]*"

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

Re: HyperLinkErgebnis

Post by effel » 23 May 2024, 06:51

andymbody wrote:
23 May 2024, 05:28
nicht getestet
Hallo @andymbody , danke für deine Mühe, aber leider funktioniert es nicht. ✌️

KHA
Posts: 408
Joined: 21 Aug 2018, 11:11

Re: HyperLinkErgebnis

Post by KHA » 23 May 2024, 09:50

Hi,
vlt. so:
URLRegex := "(https?://|www\.)[^\s"">]+"

just me
Posts: 9579
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: HyperLinkErgebnis

Post by just me » 23 May 2024, 11:27

Moin,

wenn Zeichen auftreten können aber nicht müssen, nehme ich dafür normalerweise ein 'Teilsuchmuster' mit nachgestelltem ? (einmal oder keinmal):

Code: Select all

URLRegex = i)(https?://)?[\w.-]+/?[\w!#`%&+./:=?@-]*

User avatar
andymbody
Posts: 996
Joined: 02 Jul 2017, 23:47

Re: HyperLinkErgebnis

Post by andymbody » 23 May 2024, 12:49

effel wrote:
23 May 2024, 06:51
danke für deine Mühe, aber leider funktioniert es nicht.
Der erste Teil sollte funktionieren (die angeforderte Bearbeitung). Ich habe gerade den WWW-Teil zu dem hinzugefügt, was Sie bereits bereitgestellt haben.

Können Sie ein Beispiel für die Quellzeichenfolge (Heuhaufen) angeben? Dies würde uns helfen, eine Lösung (Nadel) zu entwickeln, die Ihren Anforderungen entspricht.

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

Re: HyperLinkErgebnis

Post by effel » 23 May 2024, 15:42

andymbody wrote:
23 May 2024, 12:49
Können Sie ein Beispiel für die Quellzeichenfolge (Heuhaufen) angeben? Dies würde uns helfen, eine Lösung (Nadel) zu entwickeln, die Ihren Anforderungen entspricht.
Hallo @andymbody , ich habe diese Funktion in meinem Fundus gefunden, der Heuhaufen ist in der Regel eine Textdatei mit einem oder mehreren Weblinks. Und um diese gehts mir.

In meinem Fall ist es Text den ich beim OCR Scann erhalte.

Ich habe die Idee mit dieser Funktion aber schon wieder verworfen, weil ich eine #MaxMem Fehlermeldung bekomme, wenn ich sie nutze.

#MaxMem 4096 brachte auch keinen anderen Effekt

Vielleicht ist der Code selbst schon fehlerhaft, den weder dein Vorschlag noch der von @KHA oder @just me funktionieren damit. Vielen Dank auch an KHA & Just Me

Wenn ich nur ein paar Dateien im Batchmodus einlese läufts super, aber bei etwa 230 schon eingelesenen Dateien wird der Lesevorgng extrem langsam und mündet dann in dieser Fehlermeldung.

Da gibt es doch sicher noch mehr Lösungen, für eine so einfache Aufgabe denke ich mal.

Code: Select all

HyperLink(xHyperlink){
Loop, parse, xHyperLink, `n, `r 
;URLRegex = i)href?://[\w.-]+/?[\w!#`%&+./:=?@-]*
URLRegex = i)https?://[\w.-]+/?[\w!#`%&+./:=?@-]*
While pos := RegexMatch(xHyperlink, URLRegex, HyperLinkErgebnis, A_Index = 1 ? 1 : pos + 1 )
HyperLinkFundus .= HyperLinkErgebnis "`n"
Return HyperLinkFundus
}
#maxmem.jpg
#maxmem.jpg (42.83 KiB) Viewed 979 times

User avatar
andymbody
Posts: 996
Joined: 02 Jul 2017, 23:47

Re: HyperLinkErgebnis

Post by andymbody » 23 May 2024, 18:07

Ok ... Es ist schwer zu sagen, wo das Problem liegt, ohne ein Beispiel der Quellinformationen zu sehen. Ich sehe mindestens drei Dinge im Code, die geändert werden könnten, um möglicherweise die Geschwindigkeit der Suche zu verbessern und möglicherweise das Speicherproblem zu beheben. Da Sie sich jedoch entschieden haben, diesen Ansatz aufzugeben, werde ich nicht näher darauf eingehen.

Viel Glück mit Ihrem Projekt!

just me
Posts: 9579
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: HyperLinkErgebnis

Post by just me » 24 May 2024, 04:05

Moin @effel,

die Aussage in meinem Vorschlag ist zwar prinzipiell nicht falsch, greift aber in Deinem Fall nicht, weil mit dem https:// der wesentliche Kennzeichner für Links überflüssig wird. Der Rest der 'Nadel' trifft auf sehr viele Inhalte zu.

Die gepostete Fehlermeldung entspricht nicht dem davor geposteten Code. In der Fehlermeldung gibt es zwei RegEx-Schleifen, im Code nur eine. Apropos Schleifen:

Code: Select all

Loop, parse, xHyperLink, `n, `r 
URLRegex = i)https?://[\w.-]+/?[\w!#`%&+./:=?@-]*
Diese hier ist für mich sinnlos, weil sie sich durch die Zeilen von xHyperLink wühlt, nur um immer wieder die Variable URLRegex zu setzen.

Deinen www Regex würde ich anpassen, weil dem 'www' nicht ein beliebiges Zeichen (.) sondern in Punkt (\.) folgt. Das ist aber eher kosmetisch.

RegEx-Schleifen kodiere ich normalerweise so:

Code: Select all

Pos := 1
HyperLinkErgebnis := ""
While (pos := RegexMatch(xHyperlink, URLRegex, HyperLinkErgebnis, Pos + StrLen(HyperLinkErgebnis))
   HyperLinkFundus .= HyperLinkErgebnis "`n"
Der RegEx setzt die Suche dann erst hinter dem Treffer fort und nicht eine Stelle hinter dem Beginn des Treffers.

Zum Rest kann man ohne Skript nicht viel sagen. Das ein Skript immer zäher wird, wenn es sich dem Speichermaximum nähert, ist normal. Bleibt die Frage, warum das passiert.
effel wrote:Wenn ich nur ein paar Dateien im Batchmodus einlese läufts super, aber bei etwa 230 schon eingelesenen Dateien wird der Lesevorgng extrem langsam und mündet dann in dieser Fehlermeldung.
Lässt Du das Skript den lieben langen Tag durchlaufen und sammelst alle Ergebnisse im Hauptspeicher? Wenn das Skript hart abbricht, sind sie dann weg.

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

Re: HyperLinkErgebnis

Post by effel » 24 May 2024, 17:04

just me wrote:
24 May 2024, 04:05
Diese hier ist für mich sinnlos
Hallo @just me,
es funktioniert. Ich freue mich das du den Code überprüft hast, sonst wäre mir mein Fehler nicht aufgefallen. Hatte zwei Funktiionen und da ich von RegEx absolut nichts verstehe, ist mir nicht aufgefallen das ich was vertauscht hatte. Vielen Dank.

Die Initialzündung für das OCR Projekt hatte ich, als ich vor einem Jahr ( hier: viewtopic.php?p=395438#p395438 das Listview von dir in dem OCR() Thread sah. Vor kurzem hatte ich dann den Geistesblitz und wusste endlich wie ich es anstellen muss, diese Daten für die Rekonstruktion der Vorlage zu nutzen.

Der Übersichthalber habe ich so viel wie möglich mit #include verbunden. Es fehlt noch die globale Suche und ein paar kleine Baustellen, aber der Code läuft soweit fehlerfrei

Solltest du oder jemand sich die Zeit nehmen mal reinzuschauen, dann würde ich mich freuen wenn ich bei meinem einzigen Problem, bei der Umsetzung der Radios im Ngram Tab Hilfe bekomme.

Die Fuzzy Suche habe ich am laufen, die Radios sind verbunden, aber im Original sind bei jeder Auswahl von Radio und oder Checkboxen andere Resultate. Auf diese Optionen habe ich keinen Zugriff.

Die beiden Sende Buttons und der Menüpunkt SwitchView sind off, der gesamte Ablauf wie auch OCR und Translate werden über das Menü gehändelt

Das Script ist bewusst in Englisch geschrieben, weil ich die Fehlermeldungen (hoffentlich auch auf anderen Rechnern) Life in die Default Sprache des Rechners übersetze, und auch abspeichere, somit wird jede Meldung nur einmal übersetzt

In der History biete ich immer alle Files, wenn du jedoch eine weitere Datei einliest, werden alle mit geringerem Count gespeichert, aber nicht mehr angeboten. Ansonsten kannst du mit dem History ListView auch step by step zu allen Einstellungen zurückspringen.

Bleibt noch zu sagen, das alle OCR Bild Dateien im a_scriptDir bei Programmstart verschoben werden, alle via Menü hinzugefügte Dateien werden nur kopiert.

Es macht Sinn den Code in einem Verzeichnis auszuführen.

Hallo @andymbody auch dein Code funktioniert super, danke für deine Hilfe

##1.jpg
##1.jpg (282.72 KiB) Viewed 749 times
##2.PNG
##2.PNG (200.06 KiB) Viewed 749 times
OCR DEV.026.zip
(121.09 KiB) Downloaded 18 times

just me
Posts: 9579
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: HyperLinkErgebnis

Post by just me » 25 May 2024, 04:02

Moin @effel,

ich bin beeindruckt. Leider hat meine Konzentrationsfähigkeit mit fortschreitendem Alter etwas nachgelassen. Projekte dieser Größenordnung sind deshalb nichts mehr für mich.

Ich habe zum konkreten Problem dennoch einen Blick in den Code geworfen. Wenn ich das richtig lese, sieht die Verarbeitung, auf die sich dieser Beitrag bezieht, jetzt so aus:
OCR DEV.026.ahk (Zeile 2244):

Code: Select all

	MainArray["getHyperLink", (MainArray["thisA_index"])] := getHyperLink(thisOCR)
OCR functions.ahk (Zeile 1425 ff.):

Code: Select all

getHyperLink(xHyperlink){
; 	URLRegex = i)href?://[\w.-]+/?[\w!#`%&+./:=?@-]* ; default
;	URLRegex = i)https?://[\w.-]+/?[\w!#`%&+./:=?@-]* ; OK only http ; default
;	URLRegex := "(https?://|www\.) [^\s"">]+" ; fail ; KHA
	URLRegex := "(https?://|www\.)[\w.-]+/?[\w!#`%&+./:=?@-]*" ; OK ; andymbody
Loop, parse, xHyperLink, `n, `r
While pos := RegexMatch(xHyperlink, URLRegex, HyperLinkErgebnis, A_Index = 1 ? 1 : pos + 1 )
res .= HyperLinkErgebnis "`n"
Return res
}

In getHyperLink() findet sich immer noch die nutzlose Loop, parse, xHyperLink, `n, `r Schleife. Sie würde nur dann Sinn machen, wenn Du innerhalb der Schleife mit Deinem Regex das jeweilige A_LoopField bearbeitest. Das tust Du aber nicht. Und wenn sich xHyperlink in mehrere Zeilen zerlegen lässt, wird der Text entsprechend viele Male nach Links durchsucht. Du kannst das schadlos rauswerfen und so etwas Rechenzeit sparen und evtl. Fehler vermeiden.

Ansonsten bin ich gern bereit, Dir zu helfen, soweit ich kann. Du musst mich aber dafür mit der Nase auf ein konkretes Problem stoßen, wie z.B.
"Ich möchte, dass ein Klick auf den in Zeile 555 von MeinSkript.ahk definierten Button die folgende Verarbeitung auslöst: ...".

Schönes Wochenende!
just me

Post Reply

Return to “Ich brauche Hilfe”