Nach Häufigkeit sortieren

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Christian Kretschmer
Posts: 2
Joined: 18 Jan 2020, 15:15

Nach Häufigkeit sortieren

18 Jan 2020, 15:20

Folgender Code listet nach Häufigkeit der Wörter auf und speichert in einer txt-Datei.

Wie muß ich ihn umschreiben, damit jede Zeile als Einheit betrachtet wird und nicht noch bei Leerzeilen getrennt wird?

Code: Select all

SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

Liste := clipboard
Txt := RegExReplace(Liste,"[^ a-zA-ZöäüÖÄÜß#\-\/\\]"," "), Txt := RegExReplace(Liste,"(\n|\s)+"," ")
Txt := RegExReplace(Liste,"\r|^\s+|\s+$"), sRegEx := tRegEx := RegExReplace(Liste,"\s","`n",cnt)
Sort,sRegEx,U 
Loop, Parse, sRegEx,`n 
{ 
  A_Current := A_LoopField, A_Count := 0 
  Loop,Parse,tRegEx,`n 
	 if (A_Current = A_LoopField) 
		A_Count++ 
  _%A_Count% .= ((StrLen(_%A_Count%)>0) ? ", " : "") A_Current, o .= ((A_Index>1) ? "`n" : "") A_Count 
} 
Sort,o,NUR 
Loop,Parse,o,`n 
  out .= ((A_Index>1) ? "`n" : "") A_LoopField " mal:`t" _%A_LoopField% 
FormatTime, CurrentDateTime,, dd.MM.yyyy--HH-mm-ss
FileAppend,%out%,Analyse %CurrentDateTime%.txt
msgbox Fertig
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Nach Häufigkeit sortieren

19 Jan 2020, 04:06

Moin und Willkommen!

Ich bin vielleicht noch nicht komplett wach. Meinst Du, dass Du die kompletten Zeilen 'nach Häufigkeit' sortieren willst?
User avatar
Frosti
Posts: 426
Joined: 27 Oct 2017, 14:30
Contact:

Re: Nach Häufigkeit sortieren

19 Jan 2020, 06:30

Hab den Code ausgeführt. Er zeigt als häufigstes Wort die Leerzeichen an.
War gestern schläfrig und hab deshalb nicht ausmachen können wie man die Leerzeichen herausfiltert.

Ansonsten ein sehr praktisches Skript!
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Nach Häufigkeit sortieren

19 Jan 2020, 08:45

Ich habe nur auf die regexp geschaut. Vielleicht sind hier ein paar "liste" zuviel.

Code: Select all

Txt := RegExReplace(Liste,"[^ a-zA-ZöäüÖÄÜß#\-\/\\]"," "), Txt := RegExReplace(Txt,"(\n|\s)+"," ")
Txt := RegExReplace(Txt,"\r|^\s+|\s+$"), sRegEx := tRegEx := RegExReplace(Txt,"\s","`n",cnt)
Christian Kretschmer
Posts: 2
Joined: 18 Jan 2020, 15:15

Re: Nach Häufigkeit sortieren

19 Jan 2020, 13:56

haichen, nach kurzem darüberschauen war klar, daß es am RegExReplace(Txt,"\s","`n",cnt) liegt, das Space - \s - auch noch in `n umwandelt.

Das entfernt und es funktioniert.
Last edited by gregster on 19 Jan 2020, 14:15, edited 1 time in total.
Reason: Persönlichen Angriff entfernt.
gregster
Posts: 8921
Joined: 30 Sep 2013, 06:48

Re: Nach Häufigkeit sortieren

19 Jan 2020, 14:19

@Christian Kretschmer :
Ich habe deinen unmotivierten Angriff auf zwei Forumsmitglieder entfernt.

Sollte das als eine Art Gag gemeint gewesen sein - ist nicht gelungen.
Sollte das ernst gemeint gewesen sein, sehe dich als streng verwarnt an.

So oder so... bei ansatzweiser Wiederholung oder ähnlichen Eskapaden gibt's eine umgehende und dauerhafte Stilllegung deines Accounts.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Nach Häufigkeit sortieren

20 Jan 2020, 04:51

Christian Kretschmer wrote:
19 Jan 2020, 13:56
haichen, nach kurzem darüberschauen war klar, daß es am RegExReplace(Txt,"\s","`n",cnt) liegt, das Space - \s - auch noch in `n umwandelt.

Das entfernt und es funktioniert.


Moin,

weil ich ja wohl einer der Betroffenen bin, würde ich das 'funktionierende' Skript gern mal sehen. Ein Beispiel für 'funktionierende' Eingabedaten wäre auch nicht schlecht. Ich habe bisher das Skript selbst benutzt. Das Ergebnis war bestenfalls 'drollig'.
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Nach Häufigkeit sortieren

20 Jan 2020, 08:42

Keine Ahnung was hier, und warum, los war.


Es ist gut erkennbar, dass viermal eine Regexp auf die Variable "Liste" angewendet, und immer in derselben Variabe "Txt" gespeichert wird.
Nachdem ich das mal probehalber geändert habe, läuft das Skript für mich OK. Ich habs hier mal in eine Funktion gesetzt:

Code: Select all

/*
eins, Zwei, drei eins

eins vier, vier, fünf
zwei Eins
*/

^q::
clipboard:=""
Send, ^c
ClipWait, 2
if !ErrorLevel and (clipboard<>"")
  msgbox, % wc(clipboard)
return

/*
---------------------------
testtest.ahk
---------------------------
4 mal:	Eins
2 mal:	vier, zwei
1 mal:	drei, fünf
---------------------------
OK   
---------------------------
*/




return
wc(str){
  
Txt := RegExReplace(str,"[^ a-zA-ZöäüÖÄÜß#\-\/\\]"," "), Txt := RegExReplace(Txt,"(\n|\s)+"," ")
Txt := RegExReplace(Txt,"\r|^\s+|\s+$"), sRegEx := tRegEx := RegExReplace(Txt,"\s","`n")

Sort,sRegEx,U 

Loop, Parse, sRegEx,`n 
{ 
  A_Current := A_LoopField, A_Count := 0 
  Loop,Parse,tRegEx,`n 
	 if (A_Current = A_LoopField) 
		A_Count++ 
  _%A_Count% .= ((StrLen(_%A_Count%)>0) ? ", " : "") A_Current, o .= ((A_Index>1) ? "`n" : "") A_Count 
} 
Sort,o,NUR 
Loop,Parse,o,`n 
  out .= ((A_Index>1) ? "`n" : "") A_LoopField " mal:`t" _%A_LoopField% 
return out

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

Re: Nach Häufigkeit sortieren

20 Jan 2020, 11:55

@haichen,

nichts für ungut, aber der Fragesteller behauptet ja,
... Das entfernt und es funktioniert.
Dein Skript wird so jedenfalls nicht funktionieren, und wenn Du ihm das Skript selbst als Eingabe gibst, sieht die Ausgabe für mich auch schon weniger erfolgreich aus.
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Nach Häufigkeit sortieren

20 Jan 2020, 12:26

Ich weiß gar nicht so genau worum es hier geht..

In meiner ersten Antwort habe ich ich auf einen Fehler im Skript hin gewiesen:

Code: Select all

;Skriptausschitt von Christian Kretschmer
Txt := RegExReplace(Liste,"[^ a-zA-ZöäüÖÄÜß#\-\/\\]"," "), Txt := RegExReplace(Liste,"(\n|\s)+"," ")
Txt := RegExReplace(Liste,"\r|^\s+|\s+$"), sRegEx := tRegEx := RegExReplace(Liste,"\s","`n",cnt)
;oder anders
Txt := RegExReplace(     Liste    ,"[^ a-zA-ZöäüÖÄÜß#\-\/\\]"," ")
Txt := RegExReplace(     Liste    ,"(\n|\s)+"," ")
Txt := RegExReplace(     Liste    ,"\r|^\s+|\s+$")
sRegEx := tRegEx := RegExReplace(Liste,"\s","`n",cnt)
;das macht doch keinen sinn?
Das ist das einzige wozu ich mich geäußert habe, und wozu ich einen Korrekturvorschlag geschrieben habe.
haichen, nach kurzem darüberschauen war klar, daß es am RegExReplace(Txt,"\s","`n",cnt) liegt, das Space - \s - auch noch in `n umwandelt.
Das entfernt und es funktioniert.
Hier habe ich auch keine Ahnung was gemeint ist. Ich habe dazu auch nichts gesagt, und habe auch keine Meinung, weil ich nicht weiß was damit gemeint ist. Von daher verstehe ich deinen Kommentar genauso wenig.

Das Skript so wie ich es geändert habe funktioniert so, dass die Menge der im Clipboard gespeicherten Worte gezählt und in Kategorien ausgegeben wird. Ich hab im Code die Ausgabe hineinkopiert, die man erhält wenn man den Beispieltext mit dem Hotkey bearbeitet. Das Skript habe ich übrigens für dich hier hineingeschrieben, da du dich dafür zu interressieren schienst.
Dein Skript wird so jedenfalls nicht funktionieren, und wenn Du ihm das Skript selbst als Eingabe gibst, sieht die Ausgabe für mich auch schon weniger erfolgreich aus.

Diesen Text verstehe ich nicht. Aber das Skript funktioniert, wie ich es beschrieben habe.
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Nach Häufigkeit sortieren

21 Jan 2020, 02:50

Die Aussage ein nicht funktionierendes Skript eingestellt zu haben, will ich hier nicht unwidersprochen stehen lassen. Das Skript ist NICHT von mir, und liefert ein nicht perfektes aber gutes Ergebnis wenn man die Häufigkeit von Worten zählen möchte. In "normalen" Texten funktioniert das, bis auf urls, sehr gut.

Hier das Ergebnis für den ersten Abschnitt aus "3 Schritte zur Antwort": "Beachte bitte.." bis "..Beispiele enthält." https://www.autohotkey.com/boards/viewtopic.php?p=705#p705
5 mal: eine, es, gibt
4 mal: auch, du
3 mal: die, für, wenn
2 mal: Autohotkey, Befehl, bitte, deutsche, Ein, einem, FAQ, Forum, Frage, Fragen, hast, Hilfe, in, Seite, sich, und, zu, zuerst
1 mal: //www, an, Antwort, auf, ausführliche, auto, Außerdem, Beachte, Beispiele, bevor, bietet, Blick, com/boards/viewforum, Dank, deine, deines, deutscher, dieses, Dokumentation, dort, durchzustöbern, ebenfalls, eher, einen, Einsteiger, enthält, erste, f, findet, folgendes, grundlegende, größerem, Hier, hotkey, http, im, Informationen, jeden, könntest, Lösung, mehrere, nett, nicht, ob, oft, php, Problemes, Ragnar, schauen, Sprache, stellst, Syntax, Themengebiet, Tutorial, Tutorials, Unterforum, Unterseite, Verwendung, Vielzahl, von, welche, werfe, wäre, über
Bei Code funktioniert es nicht ganz so gut, aber wenn man noch den Unterstrich und den Apostroph in die Worterkennung des Regexp "[^ a-zA-ZöäüÖÄÜß#``_\-\/\\]" hineinnimmt sieht es ganz gut aus. Auf das Skript angewandt erhält man das folgende Ergebnis:

Code: Select all

6 mal:	`n, Txt
5 mal:	A_Count
4 mal:	\s, A_LoopField, RegExReplace
3 mal:	_, A_Current, clipboard, Loop, o, Parse, return, sRegEx
2 mal:	A_Index, if, out, Sort, str, tRegEx, wc
1 mal:	\/\\, \n, \r, `t, a, and, c, ClipWait, ErrorLevel, mal, msgbox, NUR, q, Send, StrLen, U, zA, ZöäüÖÄÜß#``_\
Hallo just me, ich glaube es gab hier irgendwelche Missverständnisse und hoffe, dass die jetzt ausgeräumt sind.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Nach Häufigkeit sortieren

21 Jan 2020, 05:31

Moin haichen,

dass Missverständnis besteht wohl darin, dass sich meine Kritik nicht an Dich sondern an den Fragesteller richtet. Der Bezug auf Deine (deutlich besser funktionierende) Skriptversion sollte nur darauf hinweisen, dass es nicht 'einfach so' läuft, wenn man nur

Code: Select all

RegExReplace(Txt,"\s","`n",cnt)
entfernt.

Wenn Du Dich angegriffen fühlst, tut es mir leid. Ich wollte das nicht.

Grüße aus Berlin!
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Nach Häufigkeit sortieren

21 Jan 2020, 06:54

Nee angegriffen, das wars nicht. War nur irgendwie komisch. Vor allem nach dem Eingriff von gregster wegen dem anscheinend seltsamen Verhalten des Fragestellers. Das habe ich nicht richtig durchdrungen.

Vielen Dank, daß du geantwortet hast.
Grüße aus dem zur Zeit sonnigen Osnabrück!

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Google [Bot] and 26 guests