#!/usr/bin/python
import sys,  operator

"""
  Dieses Skript oeffnet die gegebenen Dateien und analysiert,
  wie oft jedes Wort in den gegebenen Dateien in den
  gegebenen Dateien vorkommt. (<- Ich bin stolz auf diesen Satz!)
  Die Dateien sollen ausser '\n'-Charaktern und den Worten,
  die auch Zahlen sein duerfen, nichts enthalten.
  Die Woerter sollen durch '\n' getrennt sein.
"""

def txt2dict(filename):
    d = {}
    woerter = map(lambda w:w.strip().lower(),
               open(filename).readlines())
    for w in woerter:
        d[w] = 1
    return d

def get_dict(filelist):
    d = {}
    filenames = filter(operator.truth, map(lambda a:a.strip(),filelist))
    for filename in filenames:
        print filename
        for w in txt2dict(filename).keys():
            d[w] = d.get(w,0)+1
    return d
        
if __name__=="__main__":
    wd = get_dict(sys.stdin.readlines())
    if(len(sys.argv)>1 and sys.argv[1]=="list"):
        print "Writing wordlist..."
        file = open('wortliste','w')
        list = map(lambda a:(wd[a],a), wd.keys())
        list.sort(lambda (a1,b1),(a2,b2):a1-a2)
        for ln in list:
            file.write(str(ln[0])+' '+ln[1]+'\n')
    elif (len(sys.argv)>1 and sys.argv[1]=="dist"):
        print "Writing distribution..."
        distdict = {}
        for word in wd.keys():
           distdict[wd[word]] = distdict.get(wd[word],0) + 1
        list = map(lambda a:(a,distdict[a]), distdict.keys())
        file = open('distribution','w')
        list.sort(lambda (a1,b1),(a2,b2):a1-a2)
        for line in list:
            file.write(str(line[0])+' '+str(line[1])+'\n')
    print "Removing stop words..."
    for term in wd.keys():
        if wd[term] < 50 or 300 < wd[term]:
            del wd[term]
    print "Dumping data to file freqlist ..."
    f = open('freqlist','w')
    f.writelines(map(lambda a:a+'\n', filter(operator.truth, wd.keys())))
    print "Done!"
    sys.exit(0)

