Seite 1 von 1

Regular expressions

Verfasst: Sonntag 30. September 2012, 13:48
von MarcelF6
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

Re: Regular expressions

Verfasst: Sonntag 30. September 2012, 14:18
von sparrow
Und wo genau ist jetzt der Zusammenhang mit Python?

Re: Regular expressions

Verfasst: Sonntag 30. September 2012, 15:53
von sma
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