The code is quite straightforward. In this case, you'll have to feed the entire TXT. Python 2.7:
#!/usr/bin/env python
# -*- coding: utf-8 -
import string
exclude = set(string.punctuation) # punctuation to remove
from collections import defaultdict
word_dict = defaultdict(int) # word list to fill
def get_words(intext):
outtext = ''.join(ch for ch in intext if ch not in exclude) # remove punctuation
for word in outtext.split(): # loop over all words
word_dict[word.lower()] += 1 # add word to list, increment 1
return word_dict
text = """
FÜR LÉON WERTH
Entschuldigt bitte, dass ich dieses Kinderbuch einem Erwachsenen widme. Das hat nämlich einen wichtigen Grund: Er ist der beste Freund, den ich in der Welt habe. Ich habe einen weiteren Grund: Er versteht alles, auch die Bücher für Kinder. Ich habe auch noch einen dritten Grund: Er wohnt in Frankreich, wo er hungert und friert. Er muss wirklich getröstet werden. Wenn euch diese Gründe allesamt nicht genügen, widme ich das Buch dem Kind, das dieser Erwachsene einmal war. Alle großen Leute waren einmal Kinder (aber nur wenige erinnern sich daran). So verbessere ich also meine Widmung:
FÜR LÉON WERTH
ALS ER EIN JUNGE WAR
Die vorliegende Übersetzung ist urheberrechtlich geschützt. Der Gebrauch des Textes ist ausschließlich für private Zwecke, für eine nichtkommerzielle Nutzung gestattet. Eine kommerzielle Nutzung der Inhalte ganz oder in Teilen ist ausgeschlossen und ist nur nach ausdrücklich schriftlicher Genehmigung des Urhebers gestattet.
"""
print get_words(text)
Gives as an output the unique words and their frequency
defaultdict(<class 'int'>, {'verbessere': 1, 'bücher': 1, 'gebrauch': 1, 'urhebers': 1, 'nach': 1, 'kinderbuch': 1, 'get
röstet': 1, 'erwachsenen': 1, 'freund': 1, 'einem': 1, 'ausschließlich': 1, 'noch': 1, 'urheberrechtlich': 1, 'gestattet
': 2, 'habe': 3, 'diese': 1, 'werden': 1, 'die': 2, 'dieses': 1, 'inhalte': 1, 'werth': 2, 'übersetzung': 1, 'allesamt':
1, 'meine': 1, 'das': 3, 'kinder': 2, 'vorliegende': 1, 'nur': 2, 'sich': 1, 'textes': 1, 'also': 1, 'alle': 1, 'schrif
tlicher': 1, 'muss': 1, 'großen': 1, 'dritten': 1, 'zwecke': 1, 'war': 2, 'wohnt': 1, 'grund': 3, 'nichtkommerzielle': 1
, 'beste': 1, 'genügen': 1, 'erinnern': 1, 'friert': 1, 'nutzung': 2, 'wichtigen': 1, 'welt': 1, 'für': 5, 'ganz': 1, 'v
ersteht': 1, 'oder': 1, 'hungert': 1, 'wirklich': 1, 'nämlich': 1, 'teilen': 1, 'erwachsene': 1, 'dieser': 1, 'euch': 1,
'gründe': 1, 'alles': 1, 'genehmigung': 1, 'entschuldigt': 1, 'er': 6, 'und': 2, 'ausdrücklich': 1, 'eine': 2, 'weitere
n': 1, 'dass': 1, 'private': 1, 'einmal': 2, 'léon': 2, 'widmung': 1, 'so': 1, 'wo': 1, 'in': 3, 'der': 4, 'ein': 1, 'de
m': 1, 'ausgeschlossen': 1, 'des': 2, 'geschützt': 1, 'wenige': 1, 'nicht': 1, 'kind': 1, 'ich': 6, 'wenn': 1, 'kommerzi
elle': 1, 'daran': 1, 'hat': 1, 'leute': 1, 'widme': 2, 'als': 1, 'ist': 5, 'junge': 1, 'bitte': 1, 'einen': 3, 'auch':
2, 'buch': 1, 'waren': 1, 'den': 1, 'frankreich': 1, 'aber': 1})
NB: I made everything lower-case, which is not a great practice, especially for German.