Regular expressions

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Hallo miteinander

Ich tätige zur Zeit einige Textsuch-Abfragen mit regulären Ausdrücken (grep u.a.).
Bei einer aktuellen Abfrage stehe ich allerdings etwas auf dem Schlauch: Ich möchte gerne herausfinden, welches die häufigsten Wörter im Text (test.txt) sind, welche auf "was" folgen.
Um herauszufinden, wie viel mal "was" überhaupt vorkommt, hab ich folgendes gemacht:

Code: Alles auswählen

grep " was " test.txt | wc
Das ist klar. Ohne den wc wird mir auch gleich ausgegeben, wo sich das "was" jeweils befindet.
Mir ist auch klar, wie ich z.B. die häufigsten Wörter des ganzen Texts ausgebe, nämlich so:
Zuerst den Text so bearbeiten, dass nur 1 Wort pro Zeile steht (tr), dann Satzzeichen weg, sortieren und gleiche Wörter zusammenfassen, ausgeben:

Code: Alles auswählen

tr ' ' '\n' < test.txt > test1.txt | sed 's/[[:punct:]]//g' | sort | uniq -ci | sort -n 
Ich denke, dass ich die Mittel beisammen hätte, um herauszufinden, welche Wörter die häufigsten nach "was" sind. Allerdings frage ich mich, ob es überhaupt nötig ist, pro Zeile ein Wort zu haben und wie ich dann jeweils auf das nächste Wort zugreifen kann...
Ich danke für die Hilfe.
Marcel
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Und wo genau ist jetzt der Zusammenhang mit Python?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Vielleicht möchte er es in Zukunft in Python machen?

Code: Alles auswählen

import re
from collections import defaultdict

def findwords(s):
    for m in re.finditer(r"(?umi)(ich)\s+(\w+)", s):
        yield m.group(2)

def countwords(s, n=3):
    words = defaultdict(int)
    for w in findwords(s):
        words[w] += 1
    return sorted(words.items(), key=lambda x:x[1], reverse=True)[:n]

print countwords(u"""
    Ich tätige zur Zeit einige Textsuch-Abfragen mit regulären Ausdrücken (grep u.a.).
    Bei einer aktuellen Abfrage stehe ich allerdings etwas auf dem Schlauch: Ich möchte gerne herausfinden, welches die häufigsten Wörter im Text (test.txt) sind, welche auf "was" folgen.
    Um herauszufinden, wie viel mal "was" überhaupt vorkommt, hab ich folgendes gemacht:
    Ich tätige nochmal, ich allerdings, ich allerdings.
    """)
Stefan
Antworten