Hi Björn, 

Ich habe das Gedicht gerade aus deiner Lektion gestartet und war doch 
überrascht, was für ein Unterschied es im Vergleich zu einer normalen 
Textdatei ist (Ich hatte das Gedicht vorher noch nicht in KTouch getest, 
obwohl ich es dafür geschrieben habe). Ich war etwa 20% langsamer; ich vermute 
mal, weil die Worthäufigkeit anders war als in normalen Texten. 

Teilweise war es für mich auch ein Test, wie komplex die Texte sein können, 
die man mit der Neo Grundreihe hinbekommt (und es sind nichtmal o und s drin 
:) ).  Mit ASDF JKLÖ wäre das ganze deutlich schwerer gewesen (auch wenn es 
auch Dichter gibt, die nur mit einem Vokal Gedichte schreiben...). 

Ich hatte allerdings etwas Hilfe dabei: Ich habe heute auch ein kleines Python 
Skript geschrieben, das aus einer beliebigen Textdatei alle Wörter extrahiert, 
in denen *nur* bestimmte Zeichen vorkommen.  Damit konnte ich dann für die 
Texte trainieren, die ich selbst schreiben will.  Und die Standardbuchstaben 
sind eben die aus der Neo Grundreihe :) 

Eigentlich hatte ich mir das zum trainieren geschrieben, bin dann aber auf die 
Idee mit dem Gedicht gekommen.  

Mit 

        ./wordfilter.py *txt 

Gibt es alle Wörter aus, die auf der Grundreihe getippt werden können, und 

        ./wordfilter.py --length 1 *txt | sort | uniq 

Gibt jedes Wort nur einmal aus (braucht eine Unix Shell mit GNU tools). 

        ./wordfilter --letters eanr *txt

Gibt Zeilen mit Wörtern aus, die nur e, a, n und r enthalten. Außer "er" und 
"an" sind das bei meinen Texten z.B. noch "rar", "rannen", "Narren", "Arena", 
"Anna" und ein paar weitere. 

Allerdings sind die Worthäufigkeits-Verteilungen in Gedichten daraus natürlich 
extrem weit von der Verteilung in wirklichen Texten entfernt (sonst wäre das 
Gedicht recht langweilig :) ). 

Das Skript braucht aktuell Python 3 (http://python.org), aber wenn es jemanden 
interessiert kann ich es in unter einer Minute auf Python 2 umschreiben :) 

Falls gewünscht, kann ich die Worte auch noch zufällig ordnen... (wären etwa 
sechs Zeilen, inklusive Dokumentation :) ). 

Lieben Gruß, 
Arne

Am Mittwoch, 9. September 2009 18:53:38 schrieb Bjoern Laessig:
> Ich habe das ganze mal in eine ktouch Lektion (xml file) eingebaut. Dann
> kann man es einfach laden oder in das ktouch Lektionen-Verzeichnis werfen.
> http://www.ength.de/user/leo/project/ktouch/grundreihengedicht-ktouch_lectu
> re.xml
> 
> Und wo wir einmal bei ktouch Lektionen sind:
> 
> Wer für typespeed trainieren will, dem habe ich mal die deutschen Worte
> in eine Lektion gepackt … Schillers Glocke kommt auch noch irgendwann :-)
> http://www.ength.de/user/leo/project/ktouch/german_typespeed-ktouch_lecture
> .xml
> 
> Ach da hängt auch noch einen xml schemadatei dran, die ist selbst anhand
> von anderen ktouch lektionen erstellt (dagegen prüfe ich meine
> selbtgeschriebenen) und ja ich weiß das es einen in ktouch eingebauten
> Editor gibt.
> http://www.ength.de/user/leo/project/ktouch/ktouch-lectures.xsd
> 
> > Würde mich freuen zu hören, was ihr davon haltet :)
> 
> Ich finde es prima … mehr davon wär gut :-)
> 
> Björn L.
> 

--- --- --- --- --- --- --- --- --- 
Unpolitisch sein
heißt politisch sein, 
ohne es zu merken. 
- Arne (http://draketo.de)
--- --- --- --- --- --- --- --- --- 

#!/usr/bin/env python3

"""wordfilter - extract words from a set of normal textfiles and keep only those which contain only of a defined set of letters.

This allows you to train for texts which are relevant to you.  

usage:

    - wordfilter.py --letters uiaenrtd --remove ",." --length 12 README *.txt
      Get all words from the text files which only contain the
      specified letters but ignore (and remove) ',' and '.'.
      Output them in lines of length words (default 12)
      Default is to show only words which can be typed with the basic row
      in the neo keymap - that's what I'm writing this program for :) 

    - wordfilter.py --help
      print this help text. 

"""

__copyright__ = """ 
  wordfilter - extract words which contain only specific letters. 
----------------------------------------------------------------- 
© 2009 Copyright by Arne Babenhauserheide

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
  MA 02110-1301 USA

""" 

# First we parse the basic command line arguments to get good reaction times
from sys import argv
if not argv[1:] or "--help" in argv:
    print(__doc__)

# we need to be able to read the files
def read_file(path):
    """Read a file and
    @return: the file content as a string."""

    f = open(path)
    data = f.read()
    f.close()
    return data

# Also we need to be able to split splti a file into wrods and filter out the words which have letters we don't want.
def get_and_filter_words(text, letters="uiaenrtd", remove=",."):
    """Split the text into words and filter out all words which have undefined letters.  Before filtering remove the letters given by remove.
    @param text: The text to parse. 
    @param letters: The letters words are allowed to contain.
    @remove: The letters which get removed before filtering.
    @return: A list of fitting words.
    """
    # First split the text by newlines and spaces
    raw_words = text.split()
    # now remove the letters to ignore
    words = []
    for word in [list(word) for word in raw_words]:
        for letter in remove:
            if letter in word: 
                word.remove(letter)
        words.append("".join(word))
    # Now filter out unwanted words
    raw_words = words
    words = []
    for word in raw_words:
        # simply go to the next word, if one of the letters in the word is not in our letters.
        valid = True
        for letter in word:
            if not letter.lower() in letters:
                valid = False
        if not valid:
            continue
        words.append(word)
    # we're already done
    return words

### Self-Test

if __name__ == "__main__":
    # First read and remove the options from the argv
    if "--letters" in argv:
        letters = argv[argv.index("--letters") + 1]
        argv.remove("--letters")
        argv.remove(letters)
    else:
        letters = "uiaenrtd"

    if "--remove" in argv:
        remove = argv[argv.index("--remove") + 1]
        argv.remove("--remove")
        argv.remove(remove)
    else:
        remove = ",."

    if "--length" in argv:
        length = argv[argv.index("--length") + 1]
        argv.remove("--length")
        argv.remove(length)
        length = int(length)
    else:
        length = 12


    # Now read all files
    word_lists = [get_and_filter_words(read_file(path), letters, remove) for path in argv[1:]]
    words = []
    for i in word_lists:
        words.extend(i)

    # and print all words in sets of 12
    i = 0
    while i*length < len(words): 
        for word in words[i*length : (i+1)*length]:
            print(word, end=" ")
        print()
        i += 1
    

Attachment: signature.asc
Description: This is a digitally signed message part.

Antwort per Email an