Skip to content

Instantly share code, notes, and snippets.

@Lysander
Created May 21, 2012 12:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Lysander/2762096 to your computer and use it in GitHub Desktop.
Save Lysander/2762096 to your computer and use it in GitHub Desktop.
Searches fpr rhymes in a given Text via sys.stdin. A rhyme is defined by the last three chars of a word.
Betrachtet, wie in Abendsonne-Glut
Die grünumgebenen Hütten schimmern!
Sie rückt und weicht, der Tag ist überlebt,
Dort eilt sie hin und fördert neues Leben.
O ! daß kein Flügel mich vom Boden hebt,
Ihr nach und immer nach zu streben!
Ich säh’ im ew’gen Abendstrahl
Die stille Welt zu meinen Füßen,
Entzündet alle Höhn, beruhigt jedes Tal,
Den Silberbach in goldene Ströme fließen.
Nicht hemmte dann den göttergleichen Lauf
Der wilde Berg mit allen seinen Schluchten;
Schon tut das Meer sich mit erwärmten Buchten
Vor den erstaunten Augen auf.
Doch scheint die Göttin endlich wegzusinken;
Allein der neue Trieb erwacht,
Ich eile fort, ihr ew’ges Licht zu trinken,
Vor mir den Tag und hinter mir die Nacht,
Den Himmel über mir und unter mir die Wellen.
Ein schöner Traum, indessen sie entweicht!
Ach, zu des Geistes Flügeln wird so leicht
Kein körperlicher Flügel sich gesellen.
Doch ist es jedem eingeboren,
Daß sein Gefühl hinauf und vorwärts dringt,
Wenn über uns, im blauen Raum verloren,
Ihr schmetternd Lied die Lerche singt,
Wenn über schroffen Fichtenhöhen
Der Adler ausgebreitet schwebt
Und über Flächen, über Seen
Der Kranich nach der Heimat strebt.
./rhyme.py < abendsonne_goethe.txt
ach : nach, Silberbach
ten : erstaunten, Buchten, erwärmten, Hütten, Schluchten
ebt : hebt, überlebt, strebt, schwebt
ter : hinter, unter
tet : Betrachtet, ausgebreitet
lle : stille, alle
nen : seinen, meinen, grünumgebenen
ich : endlich, Kranich, sich, mich
auf : Lauf, hinauf, auf
aum : Raum, Traum
ngt : dringt, singt
ren : eingeboren, verloren
cht : weicht, Nicht, erwacht, Nacht, Licht, entweicht, leicht
hen : Fichtenhöhen, göttergleichen, Flächen
ken : trinken, wegzusinken
ßen : fließen, Füßen
ort : Dort, fort
len : allen, gesellen, Wellen
gen : gen, Augen
ben : Leben, streben
des : jedes, des
den : Boden, den
ein : Allein, kein, Kein, sein
#!/usr/bin/env python
import re
import sys
from collections import defaultdict
def suffix(word, count=3):
return word[-count:]
#def get_rhymes_old(words):
#rhymes = defaultdict(set)
#while words:
#word = words.pop()
#for other in words:
#if suffix(word) == suffix(other):
#rhymes[suffix(word)].update({word, other})
#return rhymes
def get_rhymes(words):
rhymes = defaultdict(set)
for word in words:
rhymes[suffix(word)].update({word})
return {suffix: words for suffix, words in rhymes.items() if len(words) > 1}
def extract_words_from_text(text):
return set(m.group() for m in re.finditer(r"\w+", text, re.U))
def main():
rhymes = get_rhymes(extract_words_from_text(sys.stdin.read()))
for word, rhyme_words in rhymes.items():
print(word, ":", ", ".join(rhyme_words))
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment