xref: /freebsd/usr.bin/fortune/tools/do_uniq.py (revision d0b2dbfa)
16ae1554aSColin Percival#!/usr/local/bin/python
26ae1554aSColin Percival#
36ae1554aSColin Percival#
46ae1554aSColin Percival# an aggressive little script for trimming duplicate cookies
5749f65e3SCraig Rodriguesfrom __future__ import print_function
66ae1554aSColin Percivalimport argparse
76ae1554aSColin Percivalimport re
86ae1554aSColin Percival
96ae1554aSColin Percivalwordlist = [
106ae1554aSColin Percival    'hadnot',
116ae1554aSColin Percival    'donot', 'hadnt',
126ae1554aSColin Percival    'dont', 'have', 'more', 'will', 'your',
136ae1554aSColin Percival    'and', 'are', 'had', 'the', 'you',
146ae1554aSColin Percival    'am', 'an', 'is', 'll', 've', 'we',
156ae1554aSColin Percival    'a', 'd', 'i', 'm', 's',
166ae1554aSColin Percival]
176ae1554aSColin Percival
186ae1554aSColin Percival
196ae1554aSColin Percivaldef hash(fortune):
206ae1554aSColin Percival    f = fortune
216ae1554aSColin Percival    f = f.lower()
226ae1554aSColin Percival    f = re.sub('[\W_]', '', f)
236ae1554aSColin Percival    for word in wordlist:
246ae1554aSColin Percival        f = re.sub(word, '', f)
256ae1554aSColin Percival#    f = re.sub('[aeiouy]', '', f)
266ae1554aSColin Percival#    f = re.sub('[^aeiouy]', '', f)
276ae1554aSColin Percival    f = f[:30]
286ae1554aSColin Percival#    f = f[-30:]
296ae1554aSColin Percival    return f
306ae1554aSColin Percival
316ae1554aSColin Percival
326ae1554aSColin Percivaldef edit(datfile):
336ae1554aSColin Percival    dups = {}
346ae1554aSColin Percival    fortunes = []
356ae1554aSColin Percival    fortune = ""
366ae1554aSColin Percival    with open(datfile, "r") as datfiledf:
376ae1554aSColin Percival        for line in datfiledf:
386ae1554aSColin Percival            if line == "%\n":
396ae1554aSColin Percival                key = hash(fortune)
406ae1554aSColin Percival                if key not in dups:
416ae1554aSColin Percival                    dups[key] = []
426ae1554aSColin Percival                dups[key].append(fortune)
436ae1554aSColin Percival                fortunes.append(fortune)
446ae1554aSColin Percival                fortune = ""
456ae1554aSColin Percival            else:
466ae1554aSColin Percival                fortune += line
476ae1554aSColin Percival    for key in list(dups.keys()):
486ae1554aSColin Percival        if len(dups[key]) == 1:
496ae1554aSColin Percival            del dups[key]
506ae1554aSColin Percival    with open(datfile + "~", "w") as o:
516ae1554aSColin Percival        for fortune in fortunes:
526ae1554aSColin Percival            key = hash(fortune)
536ae1554aSColin Percival            if key in dups:
546ae1554aSColin Percival                print('\n' * 50)
556ae1554aSColin Percival                for f in dups[key]:
566ae1554aSColin Percival                    if f != fortune:
576ae1554aSColin Percival                        print(f, '%')
586ae1554aSColin Percival                print(fortune, '%')
596ae1554aSColin Percival                if input("Remove last fortune? ") == 'y':
606ae1554aSColin Percival                    del dups[key]
616ae1554aSColin Percival                    continue
626ae1554aSColin Percival            o.write(fortune + "%\n")
636ae1554aSColin Percival
646ae1554aSColin Percivalparser = argparse.ArgumentParser(description="trimming duplicate cookies")
656ae1554aSColin Percivalparser.add_argument("filename", type=str, nargs=1)
666ae1554aSColin Percivalargs = parser.parse_args()
676ae1554aSColin Percivaledit(args.filename[0])
68