~divmod-dev/divmod.org/multiple-to-1940

« back to all changes in this revision

Viewing changes to Reverend/examples/emailtrainer.py

  • Committer: washort
  • Date: 2005-10-25 18:49:27 UTC
  • Revision ID: svn-v4:866e43f7-fbfc-0310-8f2a-ec88d1da2979:trunk:2573
import Reverend

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# This module is part of the Divmod project and is Copyright 2003 Amir Bakhtiar:
 
2
# amir@divmod.org.  This is free software; you can redistribute it and/or
 
3
# modify it under the terms of version 2.1 of the GNU Lesser General Public
 
4
# License as published by the Free Software Foundation.
 
5
#
 
6
 
 
7
from email.Message import Message
 
8
import email
 
9
import rfc822
 
10
 
 
11
class EmailItem(Message):
 
12
    def summary(self):
 
13
        return {
 
14
            'From': self.sender(),
 
15
            'Subject':self.get('subject','<No Subject>'),
 
16
        }
 
17
 
 
18
    def sender(self):
 
19
        fromHeader = self['from'] or '"Nobody" <nobody@nowhere>'
 
20
        hdrs = rfc822.AddressList(fromHeader).addresslist
 
21
        for dispname, addr in hdrs:
 
22
            dispname = dispname.strip().strip('"')
 
23
            addr = addr.strip()
 
24
            if dispname == '':
 
25
                dispname = addr
 
26
        return dispname
 
27
 
 
28
    def columnDefs(self):
 
29
        return [('From', 20), ('Subject', 30)]
 
30
    columnDefs = classmethod(columnDefs)
 
31
 
 
32
    def fromFile(self, fp):
 
33
        try:
 
34
            msg = email.message_from_file(fp, self)
 
35
        except email.Errors.MessageParseError:
 
36
            print 'bad message'
 
37
            return None
 
38
        return msg
 
39
    fromFile = classmethod(fromFile)
 
40
 
 
41
def runTrainer():
 
42
    from reverend.ui.trainer import Trainer
 
43
    from Tkinter import Tk
 
44
    from reverend.guessers.email import EmailClassifier
 
45
    from reverend.thomas import Bayes
 
46
    root = Tk()
 
47
    root.title('Reverend Trainer')
 
48
    root.minsize(width=300, height=300)
 
49
    #root.maxsize(width=600, height=600)
 
50
    guesser = EmailClassifier()
 
51
    display = Trainer(root, guesser=guesser, itemClass=EmailItem)
 
52
    root.mainloop()
 
53
 
 
54
def runTester():
 
55
    from reverend.ui.tester import DirectoryExam
 
56
    de = DirectoryExam('spam', 'Spam', EmailItem)
 
57
    for m, ans in de:
 
58
        print m['from'], ans
 
59
 
 
60
    
 
61
if __name__ == "__main__":
 
62
    runTrainer()
 
63
    #runTester()