From 630b9825025ea3a9507b82bf85dd0182e5d0a4ad Mon Sep 17 00:00:00 2001 From: Andreas Stephanides Date: Mon, 28 Aug 2017 09:08:47 +0200 Subject: [PATCH] refactor1 --- classifier/__init__.py | 5 +- classifier/classifier.py | 117 ++++++---------------------- classifier/oldstuff.py | 23 ++++++ classifier/prediction.py | 23 ++++-- classifier/training.py | 2 +- flaskapp/__init__.py | 5 +- flaskapp/templates/_macros.html | 89 +++++++++++++++++++++ flaskapp/templates/index.html | 133 +++++++++----------------------- flaskapp/templates/layout.html | 17 ++++ run.py | 30 +------ storage/__init__.py | 36 ++++++++- storage/mail_model.py | 6 +- storage/thread_model.py | 18 +++++ test.sqlite | Bin 12083200 -> 12206080 bytes 14 files changed, 274 insertions(+), 230 deletions(-) create mode 100644 classifier/oldstuff.py create mode 100644 flaskapp/templates/_macros.html create mode 100644 flaskapp/templates/layout.html diff --git a/classifier/__init__.py b/classifier/__init__.py index e53691d..41c689b 100644 --- a/classifier/__init__.py +++ b/classifier/__init__.py @@ -1,6 +1,7 @@ -from classifier import in_training, print_answers +from classifier import print_answers from classifier import get_pipe, test_pipe, get_training_threads -from classifier import store_training_data +#from classifier import store_training_data +#in_training, from training import train_single_thread diff --git a/classifier/classifier.py b/classifier/classifier.py index 66ef5ab..394cdb3 100644 --- a/classifier/classifier.py +++ b/classifier/classifier.py @@ -8,88 +8,18 @@ from sklearn.neural_network import MLPClassifier from sklearn.model_selection import train_test_split import numpy as np import yaml -from storage import MailThread,db_session from sklearn.metrics import accuracy_score, confusion_matrix +from collections import namedtuple +from storage import get_training_threads #MailThread,db_session -#with open("data.yml", 'r') as stream: -# try: -# train=yaml.load(stream) -# except yaml.YAMLError as exc: -# print(exc) - -data_types= { "answered": bool, "maintopic": str, "lang": str} - -def set_train_data(i,d,key=b"answered"): - global train - #------------------------------------ - if not data_types.has_key(key): - raise ValueError("Key "+str(key)+" unknown") - if not train.has_key(i) or train[i] is None: - train[i]={} - if not type(d) is data_types[key]: - raise TypeError("Data - %s - for key "% d +str(key)+" must be " +str(data_types[key])+ " but it is "+ str(type(d))) - #------------------------------------ - train[i][key]=d - - -def store_training_data(i, d,key=b"answered"): - set_train_data(i,d,key) - with open("data.yml","w") as file: - file.write(yaml.dump(train,default_flow_style=True)) - file.close() - - -# Lade Trainingsdaten fuer einen angegebenen key (Label/Eigenschaft) -def get_training_threads(key="answered", filters=[]): - if not data_types.has_key(key): - raise ValueError("Key "+str(key)+" unknown") - #------------------------------------ - t_a=[] - d_a=[] - d_a2=[] - #------------------------------------ - if "db" in filters: - q=db_session.query(MailThread).filter(MailThread.istrained.is_(True)) - if "de" in filters: - q=q.filter(MailThread.lang=="de") - elif "en" in filters: - q=q.filter(MailThread.lang=="en") - tt=q.all() - for t in tt: - t_a.append(t) - if key =="answered": - d_a.append(t.is_answered()) - elif key=="maintopic": - d_a.append(t.maintopic) - elif key=="lang": - d_a.append(t.lang) - else: - raise ValueError("Database Filter now required") - le=LabelEncoder() - d_a2=le.fit_transform(d_a) - return (t_a,d_a2,le) - - - # else: - # for i in train: - # if train[i].has_key(key): # In den Trainingsdaten muss der relevante Key sein -# t=db_session.query(MailThread).filter(MailThread.firstmail==i).first#() -# if not t is None: # Thread muss in der Datenbank sein -# t_a.append(t) -# d_a.append(train[i][key]) - - -def in_training(i, key="answered"): - return train.has_key(i) and train[i].has_key(key) - +PredictTool=namedtuple("PredictTool",["Pipeline","LabelEncoder"]) def print_answers(l): - - cc=l.classes_ - c_id=l.transform(cc) - for i,c in enumerate(cc): - print str(i) + ": " + str(c) + classes=l.classes_ + classes_encoded=l.transform(cc) + for i, c in zip(classes_encoded,classes): + print str(i) + ": " + str(c) return None @@ -117,15 +47,14 @@ class ThreadFirstTextExtractor(BaseEstimator, TransformerMixin): def transform(self, X,y=None): return [t.text("first") for t in X] -def get_pipe(p=b"pipe1",k=b"answered",filters=[]): +def get_pipe(p=b"pipe1",key=b"answered",filters=["db"]): p=build_pipe(p) - tt= get_training_threads(k,filters) - #print tt - if len(tt[0]) > 0: - p.fit(tt[0],tt[1]) - return p,tt[2] + threads, labels, labelenc= get_training_threads(key,filters) + if len(threads) > 0: + p.fit(threads,labels) + return PredictTool(p,labelenc) else: - return None, None + return PredictTool(None, None) def test_pipe(pp,k,f=[]): tt= get_training_threads(k,f) @@ -142,13 +71,13 @@ def test_pipe(pp,k,f=[]): -def build_pipe(p=b"pipe1"): - if p == "pipe1": +def build_pipe(pipe=b"pipe1"): + if pipe == "pipe1": p=Pipeline([('tde', ThreadDictExtractor()), ('dv',DictVectorizer()), ('clf', MultinomialNB()) ]) - elif p=="pipe2": + elif pipe=="pipe2": p = Pipeline([ ('union', FeatureUnion(transformer_list=[ ('subject', Pipeline([('tse', ThreadSubjectExtractor()), @@ -169,7 +98,7 @@ def build_pipe(p=b"pipe1"): } )), ('clf', MultinomialNB()) ]) - elif p=="pipe2b": + elif pipe=="pipe2b": p = Pipeline([ ('union', FeatureUnion(transformer_list=[ ('subject', Pipeline([('tse', ThreadSubjectExtractor()), @@ -190,7 +119,7 @@ def build_pipe(p=b"pipe1"): } )), ('mlc', MLPClassifier()) ]) - elif p=="pipe2d": + elif pipe=="pipe2d": p = Pipeline([ ('union', FeatureUnion(transformer_list=[ ('subject', Pipeline([('tse', ThreadSubjectExtractor()), @@ -217,7 +146,7 @@ def build_pipe(p=b"pipe1"): ('mlc', MLPClassifier()) ]) - elif p=="pipe2e": + elif pipe=="pipe2e": p = Pipeline([ ('union', FeatureUnion(transformer_list=[ ('subject', Pipeline([('tse', ThreadSubjectExtractor()), @@ -243,7 +172,7 @@ def build_pipe(p=b"pipe1"): } )), ('mlc', MLPClassifier(hidden_layer_sizes=(100,100))) ]) - elif p=="pipe2e1": + elif pipe=="pipe2e1": p = Pipeline([ ('union', FeatureUnion(transformer_list=[ ('subject', Pipeline([('tse', ThreadSubjectExtractor()), @@ -269,7 +198,7 @@ def build_pipe(p=b"pipe1"): } )), ('mlc', MLPClassifier(hidden_layer_sizes=(100,100,50))) ]) - elif p=="pipe2f": + elif pipe=="pipe2f": p = Pipeline([ ('union', FeatureUnion(transformer_list=[ ('subject', Pipeline([('tse', ThreadSubjectExtractor()), @@ -295,7 +224,7 @@ def build_pipe(p=b"pipe1"): } )), ('mlc', MLPClassifier(hidden_layer_sizes=(100,100))) ]) - elif p=="pipe2g": + elif pipe=="pipe2g": p = Pipeline([ ('union', FeatureUnion(transformer_list=[ ('subject', Pipeline([('tse', ThreadSubjectExtractor()), @@ -321,7 +250,7 @@ def build_pipe(p=b"pipe1"): } )), ('mlc', MLPClassifier(hidden_layer_sizes=(100,100,100))) ]) - elif p=="pipe2c": + elif pipe=="pipe2c": p = Pipeline([ ('union', FeatureUnion(transformer_list=[ ('subject', Pipeline([('tse', ThreadSubjectExtractor()), diff --git a/classifier/oldstuff.py b/classifier/oldstuff.py new file mode 100644 index 0000000..8084733 --- /dev/null +++ b/classifier/oldstuff.py @@ -0,0 +1,23 @@ +def set_train_data(i,d,key=b"answered"): + global train + #------------------------------------ + if not data_types.has_key(key): + raise ValueError("Key "+str(key)+" unknown") + if not train.has_key(i) or train[i] is None: + train[i]={} + if not type(d) is data_types[key]: + raise TypeError("Data - %s - for key "% d +str(key)+" must be " +str(data_types[key])+ " but it is "+ str(type(d))) + #------------------------------------ + train[i][key]=d + + +def store_training_data(i, d,key=b"answered"): + set_train_data(i,d,key) + with open("data.yml","w") as file: + file.write(yaml.dump(train,default_flow_style=True)) + file.close() + + +def in_training(i, key="answered"): + return train.has_key(i) and train[i].has_key(key) +data_types= { "answered": bool, "maintopic": str, "lang": str} diff --git a/classifier/prediction.py b/classifier/prediction.py index 35eac79..afa6373 100644 --- a/classifier/prediction.py +++ b/classifier/prediction.py @@ -1,22 +1,31 @@ -from classifier import get_training_threads, print_answers, in_training, store_training_data, get_pipe +from classifier import get_pipe from storage import db_session, MailThread def predict_threads(): - pipe1,le=get_pipe("pipe1",b"answered",["db"]) + """ + Predicts the language, topic and if a thread is anwered and writes that to the database. This function doesn't have a return value. + """ + # Loading pipes for the prediction of each thread + pipe1,le=get_pipe("pipe1",key=b"answered",filter=["db"]) pipe2,le2=get_pipe("pipe2g", b"maintopic",["db"]) pipe3,le3=get_pipe("pipe2b", b"lang",["db"]) + + # Loading untrained MailThreads: q=db_session.query(MailThread).filter(MailThread.istrained.op("IS NOT")(True)) mail_threads=q.all() + if len(mail_threads) ==0: - raise ValueError("no untrained threads found") + raise StandardError("no untrained threads found in database") + answered=le.inverse_transform(pipe1.predict(mail_threads)) maintopic=le2.inverse_transform(pipe2.predict(mail_threads)) lang=le3.inverse_transform(pipe3.predict(mail_threads)) for i, t in enumerate(mail_threads): - t.answered=bool(answered[i]) - t.opened=bool(answered[i]) - t.maintopic=str(maintopic[i]) - t.lang=str(lang[i]) + t.answered, t.opened, t.maintopic, t.lang = ( bool(answered[i]), + bool(answered[i]), + str(maintopic[i]), + str(lang[i]) + ) db_session.add(t) db_session.commit() diff --git a/classifier/training.py b/classifier/training.py index f340d3d..f39fd0c 100644 --- a/classifier/training.py +++ b/classifier/training.py @@ -2,7 +2,7 @@ from sklearn.pipeline import Pipeline from sklearn.preprocessing import LabelEncoder import numpy from storage import Mail, MailThread, db_session -from classifier import store_training_data, print_answers +from classifier import print_answers diff --git a/flaskapp/__init__.py b/flaskapp/__init__.py index a1c1388..1623a94 100644 --- a/flaskapp/__init__.py +++ b/flaskapp/__init__.py @@ -49,13 +49,16 @@ def store_value(id,key,value): mth.opened=bool(value) if key=="maintopic" and value in maintopic_values: mth.maintopic=str(value) - if key=="lang" and value in maintopic_values: + if key=="lang" and value in ["de", "en"]: mth.lang=str(value) if key =="trained": value = value in ["true", "True", "1", "t"] mth.istrained=bool(value) db_session.add(mth) db_session.commit() + + + @app.route("/") def store_answered(id): diff --git a/flaskapp/templates/_macros.html b/flaskapp/templates/_macros.html new file mode 100644 index 0000000..55183ff --- /dev/null +++ b/flaskapp/templates/_macros.html @@ -0,0 +1,89 @@ +{# -*-jinja2-*- #} + + +{% macro render_nav(m, maintopics) %} + + +{% endmacro %} + +{% macro render_inline_thread(m, maintopics) %} + +
+ +
+
+ {{render_nav(m,maintopics) }} +
+ + {% for (h,txt) in m.print_mail() %} +
{{h}}
+
{{ txt }}
+ {% endfor %} +
+
+{% endmacro %} diff --git a/flaskapp/templates/index.html b/flaskapp/templates/index.html index 755065e..7c97d2e 100644 --- a/flaskapp/templates/index.html +++ b/flaskapp/templates/index.html @@ -1,104 +1,45 @@ +{# -*-jinja2-*- #} +{% from "_macros.html" import render_inline_thread %} +{% extends "layout.html" %} +{% block header %} + +{% endblock %} - - - {{title}} - - - - - - -
-
-
-

{{title}}

- -
- - {% for m in mths %} -
- +{% block content %} +
+
+
-
- - - - {% for txt in m.print_text() %} -
- {{ txt }} -
- {% endfor %} -
-
+
+ {% for m in mths %} + {{ render_inline_thread(m, maintopics) }} {% endfor %} -
-
-
- +
+{% endblock %} diff --git a/flaskapp/templates/layout.html b/flaskapp/templates/layout.html new file mode 100644 index 0000000..4f75ccb --- /dev/null +++ b/flaskapp/templates/layout.html @@ -0,0 +1,17 @@ +{# -*-jinja2-*- #} + + + + {{title}} + + + + {% block header %} + {% endblock %} + + + {% block content %} + {% endblock %} + + + diff --git a/run.py b/run.py index 768745a..7190863 100644 --- a/run.py +++ b/run.py @@ -70,29 +70,6 @@ if len(sys.argv)>1: from flaskapp import app app.run(port=3000,debug=True) - if sys.argv[1] == "print_threads": - mth=db_session.query(MailThread).all() - for t in mth: - print t.firstmail - print t.mail_flat_dict() - - if sys.argv[1] == "print_thrd": - if len(sys.argv)<3: - mth=db_session.query(MailThread).all() - for t in mth: - print t.firstmail - else: - t=db_session.query(MailThread).filter(MailThread.firstmail==sys.argv[2]).first() - - print t.firstmail - print t.subject() - print t.text() - if sys.argv[1] == "compile_threads": - mth=db_session.query(MailThread).all() - l=len(mth) - for i,t in enumerate(mth): - print "%d/%d" % (i,l) - t.compile() if sys.argv[1] == "trained_threads_from_yml": from classifier.classifier import train @@ -188,10 +165,9 @@ if len(sys.argv)>1: th.body=yaml.dump(t) th.islabeled=False th.opened=True - else: - th.body=yaml.dump(t) - db_session.add(th) - db_session.commit() + th.compile() + db_session.add(th) + db_session.commit() print thrds if sys.argv[1] == "print_raw_mail": diff --git a/storage/__init__.py b/storage/__init__.py index e6ffa63..68ec3e0 100644 --- a/storage/__init__.py +++ b/storage/__init__.py @@ -2,7 +2,41 @@ from database import db_session, init_db from database import Base metadata=Base.metadata - +from sklearn.preprocessing import LabelEncoder +from collections import namedtuple # Two main objects: Mail & MailThread from mail_model import Mail from thread_model import MailThread +def str_bool(s): + return s in ["1", "true", "True", "t","T"] + +# Lade Trainingsdaten fuer einen angegebenen key (Label/Eigenschaft) +def get_training_threads(key="answered", filters=[]): + #------------------------------------ + + db_fields= {"answered": lambda t: t.is_answered(), + "lang": lambda t: t.lang, + "maintopic": lambda t: t.maintopic} + + if not db_fields.has_key(key): + raise ValueError("Key "+str(key)+" unknown") + + q=db_session.query(MailThread) + q=q.filter(MailThread.istrained.is_(True)) + + if "de" in filters: + q=q.filter(MailThread.lang=="de") + elif "en" in filters: + q=q.filter(MailThread.lang=="en") + + # load and extract thread fields + threads=q.all() + labels = map(db_fields[key], threads) + + # encode using LabelEncoder + le=LabelEncoder() + labels=le.fit_transform(labels) + + TrainingThreads=namedtuple("TrainingThreads", ["MailThreads","EncodedLabels","LabelEncoder"]) + + return TrainingThreads(threads,labels,le) diff --git a/storage/mail_model.py b/storage/mail_model.py index 23023ef..a17833b 100644 --- a/storage/mail_model.py +++ b/storage/mail_model.py @@ -128,10 +128,14 @@ class Mail(Base): self.text= yaml.dump(b4.get_text()) else: self.text =yaml.dump( pl) + def print_head(self): + fr=yaml.load(self.from_) + return "Gesendet von: "+str(fr[0]["mail"])+"@"+str(fr[0]["host"])+" am "+ str(self.date) + def print_text(self): txt="" fr=yaml.load(self.from_) - txt= txt+ "Gesendet von: "+str(fr[0]["mail"])+"@"+str(fr[0]["host"])+" am "+ str(self.date) + "\n" +# txt= txt+ "Gesendet von: "+str(fr[0]["mail"])+"@"+str(fr[0]["host"])+" am "+ str(self.date) + "\n" t=yaml.load(self.text) if type(t) is unicode: #txt=txt diff --git a/storage/thread_model.py b/storage/thread_model.py index c6ff1ab..7cf9116 100644 --- a/storage/thread_model.py +++ b/storage/thread_model.py @@ -105,6 +105,14 @@ class MailThread(Base): db_session.commit() self.date=self.mails()[0].date + def print_mail(self, filter="all"): + a=[] + if filter=="all": + mm=self.mails() + for m in mm: + a.append((m.print_head(), m.print_text())) + return a + def print_text(self,filter="all"): a=[] if filter=="all": @@ -114,6 +122,16 @@ class MailThread(Base): elif filter=="first": a.append(m[0].print_text()) return a + def print_head(self,filter="all"): + a=[] + if filter=="all": + mm=self.mails() + for m in mm: + a.append(m.print_head()) + elif filter=="first": + a.append(m[0].print_head()) + return a + def text(self,filter="all"): a=u"" def mail_txt(m): diff --git a/test.sqlite b/test.sqlite index cc6bf43246e0e22fdbc3a1a3ded832f26bf5d35e..65a2d5574c4c326f3d1360b31f3195d0321e3e36 100644 GIT binary patch delta 71469 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 JvNC(}{{cGK{R031 delta 10966 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