Beispiel #1
0
class Guesser(object):
    
    def __init__(self, project):
        self.project = project
        self.bayes = Bayes()
        self._train()
        self.data = []
        self.best = []
    
    def _train(self):
        for sentence in self.project.classified():
            self.bayes.train(sentence.get_classification(), sentence.sentence)
    
    def guess(self):
        for sentence in self.project.to_classify():
            data = {'sentence_id': sentence.id}
            data['guesses'] = self.bayes.guess(sentence.sentence)
            self.data.append(data)
        return self.data
    
    def best_matches(self):
        if not self.data: return []
        for matches in self.data:
            try:
                matches['guesses'] = sorted(matches['guesses'], key=lambda x:x[1], reverse=True)[0]
            except:
                matches['guesses'] = (None, None)
            match = {}
            match['id'] = matches['sentence_id']
            match['guess'] = matches['guesses'][0]
            match['certainty'] = matches['guesses'][1]
            self.best.append(match)
        return self.best
Beispiel #2
0
 def test_untrainedGuess(self):
     """
     The C{guess} method of a L{Bayes} instance with no training data returns
     an empty list.
     """
     bayes = Bayes()
     self.assertEquals(bayes.guess("hello, world"), [])
Beispiel #3
0
def check_junk(phrase):
    try:
        from reverend.thomas import Bayes
        g = Bayes()
        g.load("config/kikoo.bot")
        result = g.guess(phrase)
        print result
        if result:
            return int(result[0][0])
        else:
            return -1
    except:
        return -1
Beispiel #4
0
    def getCategoryGuesses(self, corpus1, corpus2, corpus3):
        from reverend.thomas import Bayes

        # instantiate guesser
        guesser = Bayes()

        # train category guesser with first corpus
        guesser.train('first reference text', corpus1)
        guesser.train('second reference text', corpus2)

        # compare with second corpus
        guesses = guesser.guess(corpus3)

        return guesses
Beispiel #5
0
    def getCategoryGuesses(self, corpus1, corpus2, corpus3):
        from reverend.thomas import Bayes

        # instantiate guesser
        guesser = Bayes()

        # train category guesser with first corpus
        guesser.train('first reference text', corpus1)
        guesser.train('second reference text', corpus2)
    
        # compare with second corpus
        guesses = guesser.guess(corpus3)
        
        return guesses
Beispiel #6
0
def treino (self):    
        banco_do_jornal = Server()
        genero=[banco_do_jornal[doc] for doc in GENEROS]
         #treinando o reverend
        from reverend.thomas import Bayes
        guesser = Bayes()
        guesser.train('artigo', ' '.join(genero[0][doc]['texto'] for doc in genero[0]))
        guesser.train('resenha',' '.join(genero[6][doc]['texto'] for doc in genero[6]))  
        guesser.train('noticia',' '.join(genero[1][doc]['texto'] for doc in genero [1]))
        guesser.train('cronica',' '.join(genero[5][doc]['texto']for doc in genero[5] if 'texto' in genero[5][doc] ))
        guesser.train('horoscopo',' '.join(genero[3][doc]['texto']for doc in genero[3]))
        guesser.train('manchete',' '.join(genero[2][doc]['titulo']for doc in genero[2]))
        guesser.train('receita',' '.join(genero[4][doc]['texto']for doc in genero[4]))
        guesser.save('my_guesser.bay')
        variavel = guesser.guess('Cidad?o se descuidou e roubaram seu celular. Como era um executivo e n?o sabia mais viver sem celular, ficou furioso. Deu parte do roubo, de Quara?.? Pois ?.? Carol.? Hein?? Meu nome. ? Carol.? Ah. Voc?s s?o...? N?o, n?o. Nos conhecemos h? pouco.? Escute Carol. Eu trouxe uma encomenda para o Amleto. De Quara?. Uma pessegada, mas n?o me lembro do endere?o.')
        print  'Resultado = ', variavel
 def treino (self):    
     banco_do_jornal = Server()
     genero=[banco_do_jornal[doc] for doc in GENEROS]
      #treinando o reverend
     from reverend.thomas import Bayes
     guesser = Bayes()
     guesser.train('artigo', ' '.join(genero[0][doc]['texto'] for doc in genero[0]))
     guesser.train('resenha',' '.join(genero[6][doc]['texto'] for doc in genero[6]))  
     guesser.train('noticia',' '.join(genero[1][doc]['texto'] for doc in genero [1]))
     guesser.train('cronica',' '.join(genero[5][doc]['texto']for doc in genero[5] if 'texto' in genero[5][doc] ))
     guesser.train('horoscopo',' '.join(genero[3][doc]['texto']for doc in genero[3]))
     guesser.train('manchete',' '.join(genero[2][doc]['titulo']for doc in genero[2]))
     guesser.train('receita',' '.join(genero[4][doc]['texto']for doc in genero[4]))
     guesser.save('my_guesser.bay')
     variavel = guesser.guess('Bolo de chocolate :ingredientes : 6 ovos, 2 xicaras de farinha, 1 colher de achocolatado, 1 lata de leite condensado, 2 copos de leite e 3 colheres de açucar')
     print  'Resultado = ', variavel
Beispiel #8
0
    def getLanguageGuesses(self, stopWords, corpus, languages):
        from reverend.thomas import Bayes

        # charset
        charset = 'us-ascii'

        # instantiate guesser
        guesser = Bayes()

        # go through language in order to train guesser
        for selectLanguage in languages:
            if selectLanguage != 'automatic':
                stopWordString = stopWords.getStopWordString(selectLanguage)
                guesser.train(selectLanguage, stopWordString.encode(charset, 'replace'))
        
        # get list of possible languages
        languageGuesses = guesser.guess(corpus.encode(charset, 'replace'))
        
        return languageGuesses
Beispiel #9
0
    def getLanguageGuesses(self, stopWords, corpus, languages):
        from reverend.thomas import Bayes

        # charset
        charset = 'us-ascii'

        # instantiate guesser
        guesser = Bayes()

        # go through language in order to train guesser
        for selectLanguage in languages:
            if selectLanguage != 'automatic':
                stopWordString = stopWords.getStopWordString(selectLanguage)
                guesser.train(selectLanguage,
                              stopWordString.encode(charset, 'replace'))

        # get list of possible languages
        languageGuesses = guesser.guess(corpus.encode(charset, 'replace'))

        return languageGuesses
 def guess_message(self,cr,uid,ids,context={}):
     cases = self.browse(cr, uid, ids)
     result_lang=[]
     if cases.description :
         guesser = Bayes()
         group_obj = self.pool.get('crm.bayes.group')
         data = ""
         for rec in group_obj.browse(cr, uid, group_obj.search(cr,uid,[('active','=',True)])):
             if rec['train_data']:
                 data += rec['train_data']
         if data :
             myfile = file("/tmp/crm_bayes.bay", 'w')
             myfile.write(data)
             myfile.close()
             guesser.load('/tmp/crm_bayes.bay')
             result_lang = guesser.guess(cases.description)
     guess_re = []
     for le in result_lang:
         guess_re.append((le[0],le[1]*100))
     return guess_re
 def action_guess(self, cr, uid, ids, context=None):
     guesser = Bayes()
     group_obj = self.pool.get('crm.bayes.group')
     if result:
         for res in range(0, len(result)):
             result.pop(0)
     data = ""
     for rec in group_obj.browse(cr, uid, context['active_ids']):
         if rec['train_data']:
             data += rec['train_data']
     result_lang=[]
     if data:
         myfile = file("/tmp/crm_bayes.bay", 'w')
         myfile.write(data)
         myfile.close()
         guesser.load('/tmp/crm_bayes.bay')
         message = self.read(cr, uid, ids, ['name'])
         result_lang = guesser.guess(message[0]['name'])
         
     cat_obj = self.pool.get('crm.bayes.categories')
     cat_id = cat_obj.search(cr, uid, [])
     for re in cat_obj.read(cr, uid, cat_id, ['name']):
         flag = False
         for r in result_lang:
             if r[0] == re['name']:
                 result.append(r)
                 flag = True
                 break
         if not flag:
             result.append((re['name'],0))
     context_new = {}
     context_new.update({'from_wiz':True})
     context_new.update({'group_id':context.get('active_id',False)})
     return {
         'context': context_new,
         'view_type': 'form', 
         "view_mode": 'form', 
         'res_model': 'crm.bayes.test.train', 
         'type': 'ir.actions.act_window', 
         'target':'new', 
      }
Beispiel #12
0
    def action_guess(self, cr, uid, ids, context=None):
        guesser = Bayes()
        group_obj = self.pool.get('crm.bayes.group')
        if result:
            for res in range(0, len(result)):
                result.pop(0)
        data = ""
        for rec in group_obj.browse(cr, uid, context['active_ids']):
            if rec['train_data']:
                data += rec['train_data']
        result_lang = []
        if data:
            myfile = file("/tmp/crm_bayes.bay", 'w')
            myfile.write(data)
            myfile.close()
            guesser.load('/tmp/crm_bayes.bay')
            message = self.read(cr, uid, ids, ['name'])
            result_lang = guesser.guess(message[0]['name'])

        cat_obj = self.pool.get('crm.bayes.categories')
        cat_id = cat_obj.search(cr, uid, [])
        for re in cat_obj.read(cr, uid, cat_id, ['name']):
            flag = False
            for r in result_lang:
                if r[0] == re['name']:
                    result.append(r)
                    flag = True
                    break
            if not flag:
                result.append((re['name'], 0))
        context_new = {}
        context_new.update({'from_wiz': True})
        context_new.update({'group_id': context.get('active_id', False)})
        return {
            'context': context_new,
            'view_type': 'form',
            "view_mode": 'form',
            'res_model': 'crm.bayes.test.train',
            'type': 'ir.actions.act_window',
            'target': 'new',
        }
Beispiel #13
0
def classificar():

    print ">>> Instanciando classificador"    
    guesser = Bayes()
    print ">>> Carregando base de conhecimento"    
    try:
        guesser.load(CAMINHO_CONHECIMENTO)
    except IOError: 
        print "Erro. Não foi possível carregar a base. Certifique-se de que existe o arquivo %s." % CAMINHO_CONHECIMENTO
        sys.exit(1)

    try:
        arquivos = os.listdir("%s/" % CAMINHO_TOCLASSIFY)
        if '.svn' in arquivos:
            arquivos.remove('.svn')
        for nome_arquivo in arquivos:
            arquivo = open('%s/%s' % (CAMINHO_TOCLASSIFY, nome_arquivo), 'r')               
            texto = arquivo.read()
            guess = guesser.guess(texto)
            print "\n>>> Arquivo %s:\n %s\n" % (nome_arquivo, guess)
    except:
        print "Erro. Não foi possível classificar."
Beispiel #14
0
 def guess_message(self, cr, uid, ids, context={}):
     cases = self.browse(cr, uid, ids)
     result_lang = []
     if cases.description:
         guesser = Bayes()
         group_obj = self.pool.get('crm.bayes.group')
         data = ""
         for rec in group_obj.browse(
                 cr, uid, group_obj.search(cr, uid,
                                           [('active', '=', True)])):
             if rec['train_data']:
                 data += rec['train_data']
         if data:
             myfile = file("/tmp/crm_bayes.bay", 'w')
             myfile.write(data)
             myfile.close()
             guesser.load('/tmp/crm_bayes.bay')
             result_lang = guesser.guess(cases.description)
     guess_re = []
     for le in result_lang:
         guess_re.append((le[0], le[1] * 100))
     return guess_re
Beispiel #15
0
    def treino (self):    
        banco_do_jornal = Server()
        genero=[banco_do_jornal[doc] for doc in GENEROS]
        #dicionários
        dicionario_artigo={'enunciados de opiniao':'eu acredito''eu acho''nós entendemos que'}
        dicionario_resenha={'auxiliar modal':'pode''deve','lexico':'filme''peça''livro''artista'}
        dicionario_horoscopo={'lexico':'signo''peixes''áries''capricórnio''escorpião''cancer''gêmeos''touro''libra''sargitário''aquario''planeta''mercurio''vênus''marte''jupter''saturno''urano''netuno''ascendente''amor''saúde''trabalho''carta''sorte''dinheiro'}
        dicionario_noticia={'marcadores de data':'janeiro''fevereiro''março''abril''maio''junho''julho''agosto''setembro''outubro''novembro''dezenbro'}
        
         #treinando o reverend
        from reverend.thomas import Bayes
        guesser = Bayes()
        guesser.train('artigo', ' '.join(genero[0][doc]['texto'] for doc in genero[0]) )
        guesser.train('resenha',' '.join(genero[6][doc]['texto'] for doc in genero[6]))  
        guesser.train('noticia',' '.join(genero[1][doc]['texto'] for doc in genero [1]))
        guesser.train('cronica',' '.join(genero[5][doc]['texto']for doc in genero[5] if 'texto' in genero[5][doc] ))
        guesser.train('horoscopo',' '.join(genero[3][doc]['texto']for doc in genero[3]))
        guesser.train('manchete',' '.join(genero[2][doc]['titulo']for doc in genero[2]))
        guesser.train('receita',' '.join(genero[4][doc]['texto']for doc in genero[4]))
        guesser.save('my_guesser.bay')
        variavel = guesser.guess('Lía, Claudia e Dourado se enfrentam no oitavo paredão do BBB10, que acontecerá nesta terça (2)Lia foi a escolha do líder Michel, que justificou que sua opinião vem sendo formada ao longo do jogo. Cacau foi eliminada, pois foram 80% dos votos contra ela, então ela saiu, muitas pessoas não queriam que ela saisse mais foram os votos que decidiram a derrota da cacau (Cláudia)')

        print  'Resultado = ', variavel
Beispiel #16
0
for line in f:
  if i > 50:
    break
  i += 1
  messages.append(line.strip())
spamlog = open('/tmp/asktell.spam.log','a+')
notspamlog = open('/tmp/asktell.notspam.log','a+')
while 1:
  client, address = s.accept()
  data = client.recv(size)
  if data:
    if len(data) > 300:
      spamlog.write(data+"\n")
      spamlog.flush()
      client.send("false")
    elif len(guesser.guess(data)) > 0 and guesser.guess(data)[0][0] == 'spam':
      spamlog.write(data+"\n")
      spamlog.flush()
      client.send("false")
    else:
      if data == '<ask>':
        client.send(next_msg)
        if len(messages) > 0:
          if len(messages) > 5:
            denom = 5.0
          else:
            if float(len(messages)-1) < 1e-2:
              denom = 1.0
            else:
              denom = float(len(messages)-1)
          ind = int(round(random.expovariate(1.0/denom),0))
Beispiel #17
0
class NaiveBayesClassifier(object):
    def __init__(self, non_spam_train_dir, spam_train_dir):
        self.non_spam_train_dir = non_spam_train_dir
        self.spam_train_dir = spam_train_dir
        self.naive_bayes_classifier = Bayes()
        self.total_num_train_files = 0
        self.total_num_test_files = 0
        self.num_misclass = 0

    def make_single_line_from_body_of_file(self, filename):
        fd = open(filename)
        total = ''
        return total.join(line.strip() for line in fd)

    def train(self):
        for subdir, dirs, files in os.walk(self.non_spam_train_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                self.naive_bayes_classifier.train('nonspam', full_text_line)


        for subdir, dirs, files in os.walk(self.spam_train_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                self.naive_bayes_classifier.train('spam', full_text_line)

    def train_for_given_dirs(self, non_spam_train_dir, spam_train_dir):
        for subdir, dirs, files in os.walk(non_spam_train_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                self.naive_bayes_classifier.train('nonspam', full_text_line)


        for subdir, dirs, files in os.walk(spam_train_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                self.naive_bayes_classifier.train('spam', full_text_line)

    def train_two_files(self):
        fd = open(self.non_spam_train_dir, 'r')
        for line in fd:
            self.naive_bayes_classifier.train('nonspam', line)

        fd = open(self.spam_train_dir, 'r')
        for line in fd:
            self.naive_bayes_classifier.train('spam', line)

    def train_for_two_exogenous_files(self, non_spam_train_file, spam_train_file):
        if non_spam_train_file != '':
            fd = open(non_spam_train_file, 'r')
            for line in fd:
                self.naive_bayes_classifier.train('nonspam', line)
        if spam_train_file != '':
            fd = open(spam_train_file, 'r')
            for line in fd:
                self.naive_bayes_classifier.train('spam', line)

    def test(self, non_spam_test_dir, spam_test_dir):
        # rb.classify('sloths are so cute i love them') == 'good'
        for subdir, dirs, files in os.walk(non_spam_test_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                class_prob_vec = self.naive_bayes_classifier.guess(full_text_line)
                self.total_num_test_files += 1
                y_hat = class_prob_vec[0][0]
                if y_hat != 'nonspam':
                    self.num_misclass += 1

        for subdir, dirs, files in os.walk(spam_test_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                class_prob_vec = self.naive_bayes_classifier.guess(full_text_line)
                self.total_num_test_files += 1
                y_hat = class_prob_vec[0][0]
                print class_prob_vec
                if y_hat != 'spam':
                    self.num_misclass += 1
        misclass_rate = (self.num_misclass/float(self.total_num_test_files))
        accuracy = 1 - misclass_rate
        print 'Misclassification rate is %f' % misclass_rate
        print 'Accuracy is %f' % accuracy

    def make_single_line_from_body(self, text_body):
        total = ' '
        return total.join(line.strip() for line in text_body)

    def make_single_line_from_body2(self, text_body):
        total = ''
        for line in text_body:
            total += line + ' '
        return total

    def create_nonspam_spam_datasets(self, text_body):
        return text_body

    def classify(self, text_body):
        class_prob_vec = self.naive_bayes_classifier.guess(text_body)
        y_hat = 'nonspam'
        if len(class_prob_vec) != 0:
            y_hat = class_prob_vec[0][0]
        return y_hat
Beispiel #18
0
class BayesianClassifier:

    POSITIVE = POSITIVE
    NEGATIVE = NEGATIVE
    NEUTRAL = NEUTRAL

    THRESHHOLD = 0.1
    guesser = None

    def __init__(self):
        self.guesser = Bayes()

    def train(self, example_tweets):
        for t in example_tweets:
            self.guesser.train(t.sentiment, t.text)

        self.guesser.train(POSITIVE, "cool")
        self.guesser.train(POSITIVE, "Woo")
        self.guesser.train(POSITIVE, "quite amazing")
        self.guesser.train(POSITIVE, "thks")
        self.guesser.train(POSITIVE, "looking forward to")
        self.guesser.train(POSITIVE, "damn good")
        self.guesser.train(POSITIVE, "frickin ruled")
        self.guesser.train(POSITIVE, "frickin rules")
        self.guesser.train(POSITIVE, "Way to go")
        self.guesser.train(POSITIVE, "cute")
        self.guesser.train(POSITIVE, "comeback")
        self.guesser.train(POSITIVE, "not suck")
        self.guesser.train(POSITIVE, "prop")
        self.guesser.train(POSITIVE, "kinda impressed")
        self.guesser.train(POSITIVE, "props")
        self.guesser.train(POSITIVE, "come on")
        self.guesser.train(POSITIVE, "congratulation")
        self.guesser.train(POSITIVE, "gtd")
        self.guesser.train(POSITIVE, "proud")
        self.guesser.train(POSITIVE, "thanks")
        self.guesser.train(POSITIVE, "can help")
        self.guesser.train(POSITIVE, "thanks!")
        self.guesser.train(POSITIVE, "pumped")
        self.guesser.train(POSITIVE, "integrate")
        self.guesser.train(POSITIVE, "really like")
        self.guesser.train(POSITIVE, "loves it")
        self.guesser.train(POSITIVE, "yay")
        self.guesser.train(POSITIVE, "amazing")
        self.guesser.train(POSITIVE, "epic flail")
        self.guesser.train(POSITIVE, "flail")
        self.guesser.train(POSITIVE, "good luck")
        self.guesser.train(POSITIVE, "fail")
        self.guesser.train(POSITIVE, "life saver")
        self.guesser.train(POSITIVE, "piece of cake")
        self.guesser.train(POSITIVE, "good thing")
        self.guesser.train(POSITIVE, "hawt")
        self.guesser.train(POSITIVE, "hawtness")
        self.guesser.train(POSITIVE, "highly positive")
        self.guesser.train(POSITIVE, "my hero")
        self.guesser.train(POSITIVE, "yummy")
        self.guesser.train(POSITIVE, "awesome")
        self.guesser.train(POSITIVE, "congrats")
        self.guesser.train(POSITIVE, "would recommend")
        self.guesser.train(POSITIVE, "intellectual vigor")
        self.guesser.train(POSITIVE, "really neat")
        self.guesser.train(POSITIVE, "yay")
        self.guesser.train(POSITIVE, "ftw")
        self.guesser.train(POSITIVE, "I want")
        self.guesser.train(POSITIVE, "best looking")
        self.guesser.train(POSITIVE, "imrpessive")
        self.guesser.train(POSITIVE, "positive")
        self.guesser.train(POSITIVE, "thx")
        self.guesser.train(POSITIVE, "thanks")
        self.guesser.train(POSITIVE, "thank you")
        self.guesser.train(POSITIVE, "endorse")
        self.guesser.train(POSITIVE, "clearly superior")
        self.guesser.train(POSITIVE, "superior")
        self.guesser.train(POSITIVE, "really love")
        self.guesser.train(POSITIVE, "woot")
        self.guesser.train(POSITIVE, "w00t")
        self.guesser.train(POSITIVE, "super")
        self.guesser.train(POSITIVE, "wonderful")
        self.guesser.train(POSITIVE, "leaning towards")
        self.guesser.train(POSITIVE, "rally")
        self.guesser.train(POSITIVE, "incredible")
        self.guesser.train(POSITIVE, "the best")
        self.guesser.train(POSITIVE, "is the best")
        self.guesser.train(POSITIVE, "strong")
        self.guesser.train(POSITIVE, "would love")
        self.guesser.train(POSITIVE, "rally")
        self.guesser.train(POSITIVE, "very quickly")
        self.guesser.train(POSITIVE, "very cool")
        self.guesser.train(POSITIVE, "absolutely love")
        self.guesser.train(POSITIVE, "very exceptional")
        self.guesser.train(POSITIVE, "so proud")
        self.guesser.train(POSITIVE, "funny")
        self.guesser.train(POSITIVE, "recommend")
        self.guesser.train(POSITIVE, "so proud")
        self.guesser.train(POSITIVE, "so great")
        self.guesser.train(POSITIVE, "so cool")
        self.guesser.train(POSITIVE, "cool")
        self.guesser.train(POSITIVE, "wowsers")
        self.guesser.train(POSITIVE, "plus")
        self.guesser.train(POSITIVE, "liked it")
        self.guesser.train(POSITIVE, "make a difference")
        self.guesser.train(POSITIVE, "moves me")
        self.guesser.train(POSITIVE, "inspired")
        self.guesser.train(POSITIVE, "OK")
        self.guesser.train(POSITIVE, "love it")
        self.guesser.train(POSITIVE, "LOL")
        self.guesser.train(POSITIVE, ":)")
        self.guesser.train(POSITIVE, ";)")
        self.guesser.train(POSITIVE, ":-)")
        self.guesser.train(POSITIVE, ";-)")
        self.guesser.train(POSITIVE, ":D")
        self.guesser.train(POSITIVE, ";]")
        self.guesser.train(POSITIVE, ":]")
        self.guesser.train(POSITIVE, ":p")
        self.guesser.train(POSITIVE, ";p")
        self.guesser.train(POSITIVE, "voting for")
        self.guesser.train(POSITIVE, "great")
        self.guesser.train(POSITIVE, "agreeable")
        self.guesser.train(POSITIVE, "amused")
        self.guesser.train(POSITIVE, "brave")
        self.guesser.train(POSITIVE, "calm")
        self.guesser.train(POSITIVE, "charming")
        self.guesser.train(POSITIVE, "cheerful")
        self.guesser.train(POSITIVE, "comfortable")
        self.guesser.train(POSITIVE, "cooperative")
        self.guesser.train(POSITIVE, "courageous")
        self.guesser.train(POSITIVE, "delightful")
        self.guesser.train(POSITIVE, "determined")
        self.guesser.train(POSITIVE, "eager")
        self.guesser.train(POSITIVE, "elated")
        self.guesser.train(POSITIVE, "enchanting")
        self.guesser.train(POSITIVE, "encouraging")
        self.guesser.train(POSITIVE, "energetic")
        self.guesser.train(POSITIVE, "enthusiastic")
        self.guesser.train(POSITIVE, "excited")
        self.guesser.train(POSITIVE, "exuberant")
        self.guesser.train(POSITIVE, "excellent")
        self.guesser.train(POSITIVE, "I like")
        self.guesser.train(POSITIVE, "fine")
        self.guesser.train(POSITIVE, "fair")
        self.guesser.train(POSITIVE, "faithful")
        self.guesser.train(POSITIVE, "fantastic")
        self.guesser.train(POSITIVE, "fine")
        self.guesser.train(POSITIVE, "friendly")
        self.guesser.train(POSITIVE, "fun ")
        self.guesser.train(POSITIVE, "funny")
        self.guesser.train(POSITIVE, "gentle")
        self.guesser.train(POSITIVE, "glorious")
        self.guesser.train(POSITIVE, "good")
        self.guesser.train(POSITIVE, "pretty good")
        self.guesser.train(POSITIVE, "happy")
        self.guesser.train(POSITIVE, "healthy")
        self.guesser.train(POSITIVE, "helpful")
        self.guesser.train(POSITIVE, "high")
        self.guesser.train(POSITIVE, "agile")
        self.guesser.train(POSITIVE, "responsive")
        self.guesser.train(POSITIVE, "hilarious")
        self.guesser.train(POSITIVE, "jolly")
        self.guesser.train(POSITIVE, "joyous")
        self.guesser.train(POSITIVE, "kind")
        self.guesser.train(POSITIVE, "lively")
        self.guesser.train(POSITIVE, "lovely")
        self.guesser.train(POSITIVE, "lucky")
        self.guesser.train(POSITIVE, "nice")
        self.guesser.train(POSITIVE, "nicely")
        self.guesser.train(POSITIVE, "obedient")
        self.guesser.train(POSITIVE, "perfect")
        self.guesser.train(POSITIVE, "pleasant")
        self.guesser.train(POSITIVE, "proud")
        self.guesser.train(POSITIVE, "relieved")
        self.guesser.train(POSITIVE, "silly")
        self.guesser.train(POSITIVE, "smiling")
        self.guesser.train(POSITIVE, "splendid")
        self.guesser.train(POSITIVE, "successful")
        self.guesser.train(POSITIVE, "thankful")
        self.guesser.train(POSITIVE, "thoughtful")
        self.guesser.train(POSITIVE, "victorious")
        self.guesser.train(POSITIVE, "vivacious")
        self.guesser.train(POSITIVE, "witty")
        self.guesser.train(POSITIVE, "wonderful")
        self.guesser.train(POSITIVE, "zealous")
        self.guesser.train(POSITIVE, "zany")
        self.guesser.train(POSITIVE, "rocks")
        self.guesser.train(POSITIVE, "comeback")
        self.guesser.train(POSITIVE, "pleasantly surprised")
        self.guesser.train(POSITIVE, "pleasantly")
        self.guesser.train(POSITIVE, "surprised")
        self.guesser.train(POSITIVE, "love")
        self.guesser.train(POSITIVE, "glad")
        self.guesser.train(POSITIVE, "yum")
        self.guesser.train(POSITIVE, "interesting")

        self.guesser.train(NEGATIVE, "FTL")
        self.guesser.train(NEGATIVE, "irritating")
        self.guesser.train(NEGATIVE, "not that good")
        self.guesser.train(NEGATIVE, "suck")
        self.guesser.train(NEGATIVE, "lying")
        self.guesser.train(NEGATIVE, "duplicity")
        self.guesser.train(NEGATIVE, "angered")
        self.guesser.train(NEGATIVE, "dumbfounding")
        self.guesser.train(NEGATIVE, "dumbifying")
        self.guesser.train(NEGATIVE, "not as good")
        self.guesser.train(NEGATIVE, "not impressed")
        self.guesser.train(NEGATIVE, "stomach it")
        self.guesser.train(NEGATIVE, "pw")
        self.guesser.train(NEGATIVE, "pwns")
        self.guesser.train(NEGATIVE, "pwnd")
        self.guesser.train(NEGATIVE, "pwning")
        self.guesser.train(NEGATIVE, "in a bad way")
        self.guesser.train(NEGATIVE, "horrifying")
        self.guesser.train(NEGATIVE, "wrong")
        self.guesser.train(NEGATIVE, "flailing")
        self.guesser.train(NEGATIVE, "failing")
        self.guesser.train(NEGATIVE, "fallen way behind")
        self.guesser.train(NEGATIVE, "fallen behind")
        self.guesser.train(NEGATIVE, "lose")
        self.guesser.train(NEGATIVE, "fallen")
        self.guesser.train(NEGATIVE, "self-deprecating")
        self.guesser.train(NEGATIVE, "hunker down")
        self.guesser.train(NEGATIVE, "duh")
        self.guesser.train(NEGATIVE, "get killed by")
        self.guesser.train(NEGATIVE, "got killed by")
        self.guesser.train(NEGATIVE, "hated us")
        self.guesser.train(NEGATIVE, "only works in safari")
        self.guesser.train(NEGATIVE, "must have ie")
        self.guesser.train(NEGATIVE, "fuming and frothing")
        self.guesser.train(NEGATIVE, "heavy")
        self.guesser.train(NEGATIVE, "buggy")
        self.guesser.train(NEGATIVE, "unusable")
        self.guesser.train(NEGATIVE, "nothing is")
        self.guesser.train(NEGATIVE, "is great until")
        self.guesser.train(NEGATIVE, "don't support")
        self.guesser.train(NEGATIVE, "despise")
        self.guesser.train(NEGATIVE, "pos")
        self.guesser.train(NEGATIVE, "hindrance")
        self.guesser.train(NEGATIVE, "sucks")
        self.guesser.train(NEGATIVE, "problems")
        self.guesser.train(NEGATIVE, "not working")
        self.guesser.train(NEGATIVE, "fuming")
        self.guesser.train(NEGATIVE, "annoying")
        self.guesser.train(NEGATIVE, "frothing")
        self.guesser.train(NEGATIVE, "poorly")
        self.guesser.train(NEGATIVE, "headache")
        self.guesser.train(NEGATIVE, "completely wrong")
        self.guesser.train(NEGATIVE, "sad news")
        self.guesser.train(NEGATIVE, "didn't last")
        self.guesser.train(NEGATIVE, "lame")
        self.guesser.train(NEGATIVE, "pet peeves")
        self.guesser.train(NEGATIVE, "pet peeve")
        self.guesser.train(NEGATIVE, "can't send")
        self.guesser.train(NEGATIVE, "bullshit")
        self.guesser.train(NEGATIVE, "fail")
        self.guesser.train(NEGATIVE, "so terrible")
        self.guesser.train(NEGATIVE, "negative")
        self.guesser.train(NEGATIVE, "anooying")
        self.guesser.train(NEGATIVE, "an issue")
        self.guesser.train(NEGATIVE, "drop dead")
        self.guesser.train(NEGATIVE, "trouble")
        self.guesser.train(NEGATIVE, "brainwashed")
        self.guesser.train(NEGATIVE, "smear")
        self.guesser.train(NEGATIVE, "commie")
        self.guesser.train(NEGATIVE, "communist")
        self.guesser.train(NEGATIVE, "anti-women")
        self.guesser.train(NEGATIVE, "WTF")
        self.guesser.train(NEGATIVE, "anxiety")
        self.guesser.train(NEGATIVE, "STING")
        self.guesser.train(NEGATIVE, "nobody spoke")
        self.guesser.train(NEGATIVE, "yell")
        self.guesser.train(NEGATIVE, "Damn")
        self.guesser.train(NEGATIVE, "aren't")
        self.guesser.train(NEGATIVE, "anti")
        self.guesser.train(NEGATIVE, "i hate")
        self.guesser.train(NEGATIVE, "hate")
        self.guesser.train(NEGATIVE, "dissapointing")
        self.guesser.train(NEGATIVE, "doesn't recommend")
        self.guesser.train(NEGATIVE, "the worst")
        self.guesser.train(NEGATIVE, "worst")
        self.guesser.train(NEGATIVE, "expensive")
        self.guesser.train(NEGATIVE, "crap")
        self.guesser.train(NEGATIVE, "socialist")
        self.guesser.train(NEGATIVE, "won't")
        self.guesser.train(NEGATIVE, "wont")
        self.guesser.train(NEGATIVE, ":(")
        self.guesser.train(NEGATIVE, ":-(")
        self.guesser.train(NEGATIVE, "Thanks")
        self.guesser.train(NEGATIVE, "smartass")
        self.guesser.train(NEGATIVE, "don't like")
        self.guesser.train(NEGATIVE, "too bad")
        self.guesser.train(NEGATIVE, "frickin")
        self.guesser.train(NEGATIVE, "snooty")
        self.guesser.train(NEGATIVE, "knee jerk")
        self.guesser.train(NEGATIVE, "jerk")
        self.guesser.train(NEGATIVE, "reactionist")
        self.guesser.train(NEGATIVE, "MUST DIE")
        self.guesser.train(NEGATIVE, "no more")
        self.guesser.train(NEGATIVE, "hypocrisy")
        self.guesser.train(NEGATIVE, "ugly")
        self.guesser.train(NEGATIVE, "too slow")
        self.guesser.train(NEGATIVE, "not reliable")
        self.guesser.train(NEGATIVE, "noise")
        self.guesser.train(NEGATIVE, "crappy")
        self.guesser.train(NEGATIVE, "horrible")
        self.guesser.train(NEGATIVE, "bad quality")
        self.guesser.train(NEGATIVE, "angry")
        self.guesser.train(NEGATIVE, "annoyed")
        self.guesser.train(NEGATIVE, "anxious")
        self.guesser.train(NEGATIVE, "arrogant")
        self.guesser.train(NEGATIVE, "ashamed")
        self.guesser.train(NEGATIVE, "awful")
        self.guesser.train(NEGATIVE, "bad")
        self.guesser.train(NEGATIVE, "bewildered")
        self.guesser.train(NEGATIVE, "blues")
        self.guesser.train(NEGATIVE, "bored")
        self.guesser.train(NEGATIVE, "clumsy")
        self.guesser.train(NEGATIVE, "combative")
        self.guesser.train(NEGATIVE, "condemned")
        self.guesser.train(NEGATIVE, "confused")
        self.guesser.train(NEGATIVE, "crazy")
        self.guesser.train(NEGATIVE, "flipped-out")
        self.guesser.train(NEGATIVE, "creepy")
        self.guesser.train(NEGATIVE, "cruel")
        self.guesser.train(NEGATIVE, "dangerous")
        self.guesser.train(NEGATIVE, "defeated")
        self.guesser.train(NEGATIVE, "defiant")
        self.guesser.train(NEGATIVE, "depressed")
        self.guesser.train(NEGATIVE, "disgusted")
        self.guesser.train(NEGATIVE, "disturbed")
        self.guesser.train(NEGATIVE, "dizzy")
        self.guesser.train(NEGATIVE, "dull")
        self.guesser.train(NEGATIVE, "embarrassed")
        self.guesser.train(NEGATIVE, "envious")
        self.guesser.train(NEGATIVE, "evil")
        self.guesser.train(NEGATIVE, "fierce")
        self.guesser.train(NEGATIVE, "foolish")
        self.guesser.train(NEGATIVE, "frantic")
        self.guesser.train(NEGATIVE, "frightened")
        self.guesser.train(NEGATIVE, "grieving")
        self.guesser.train(NEGATIVE, "grumpy")
        self.guesser.train(NEGATIVE, "helpless")
        self.guesser.train(NEGATIVE, "homeless")
        self.guesser.train(NEGATIVE, "hungry")
        self.guesser.train(NEGATIVE, "hurt")
        self.guesser.train(NEGATIVE, "ill")
        self.guesser.train(NEGATIVE, "itchy")
        self.guesser.train(NEGATIVE, "jealous")
        self.guesser.train(NEGATIVE, "jittery")
        self.guesser.train(NEGATIVE, "lazy")
        self.guesser.train(NEGATIVE, "lonely")
        self.guesser.train(NEGATIVE, "mysterious")
        self.guesser.train(NEGATIVE, "nasty")
        self.guesser.train(NEGATIVE, "rape")
        self.guesser.train(NEGATIVE, "naughty")
        self.guesser.train(NEGATIVE, "nervous")
        self.guesser.train(NEGATIVE, "nutty")
        self.guesser.train(NEGATIVE, "obnoxious")
        self.guesser.train(NEGATIVE, "outrageous")
        self.guesser.train(NEGATIVE, "panicky")
        self.guesser.train(NEGATIVE, "f*****g up")
        self.guesser.train(NEGATIVE, "repulsive")
        self.guesser.train(NEGATIVE, "scary")
        self.guesser.train(NEGATIVE, "selfish")
        self.guesser.train(NEGATIVE, "sore")
        self.guesser.train(NEGATIVE, "tense")
        self.guesser.train(NEGATIVE, "terrible")
        self.guesser.train(NEGATIVE, "testy")
        self.guesser.train(NEGATIVE, "thoughtless")
        self.guesser.train(NEGATIVE, "tired")
        self.guesser.train(NEGATIVE, "troubled")
        self.guesser.train(NEGATIVE, "upset")
        self.guesser.train(NEGATIVE, "uptight")
        self.guesser.train(NEGATIVE, "weary")
        self.guesser.train(NEGATIVE, "wicked")
        self.guesser.train(NEGATIVE, "worried")
        self.guesser.train(NEGATIVE, "is a fool")
        self.guesser.train(NEGATIVE, "painful")
        self.guesser.train(NEGATIVE, "pain")
        self.guesser.train(NEGATIVE, "gross")

    def classify(self, sentence):
        guess = self.guesser.guess(sentence)
        if len(guess) == 0:
            return NEUTRAL

        if len(guess) == 1:
            (sentiment, probabitily) = guess[0]
            return sentiment

        (max_sentiment, max_value) = guess[0]
        (min_sentiment, min_value) = guess[1]
        if max_value - min_value > self.THRESHHOLD:
            return max_sentiment

        return NEUTRAL
Beispiel #19
0
class Trainer(Frame):
    def __init__(self, parent, guesser=None, itemClass=None):
        self.status = StatusBar(parent)
        self.status.pack(side=BOTTOM, fill=X)
        Frame.__init__(self, parent)
        self.pack(side=TOP, fill=BOTH)
        self.itemsPerPage = 20
        self.rows = []
        for i in range(self.itemsPerPage):
            self.rows.append(ItemRow())
        self.items = []
        self.files = []
        self.cursor = 0
        self.dirty = False
        if guesser is None:
            from reverend.thomas import Bayes
            self.guesser = Bayes()
        else:
            self.guesser = guesser
        if itemClass is None:
            self.itemClass = TextItem
        else:
            self.itemClass = itemClass
        for row in self.rows:
            row.summary.set('foo')
        self.initViews()

    def initViews(self):
        self.nb = Notebook(self)
##        frame1 = Frame(self.nb())
##        self.poolView = PoolView(frame1, guesser=self.guesser, app=self)
##        self.poolView.pack(side=TOP)
        frame2 = Frame(self.nb())
        self.poolView = PoolView(frame2, guesser=self.guesser, app=self)
        self.poolView.pack(side=TOP)
        self.listView = Canvas(frame2, relief=GROOVE)
        self.listView.pack(padx=3)
        bn = Button(self.listView, text="Load training", command=self.loadCorpus)
        bn.pack(side=RIGHT, anchor=NE, fill=X)
        self.columnHeadings()
        self.addNextPrev()
        
        frame3 = Frame(self.nb())
        self.testView = TestView(frame3, guesser=self.guesser, app=self)
        self.testView.pack()

        frame4 = Frame(self.nb())
        bp = Button(frame4, text="Quit", command=self.quitNow)
        bp.pack(side=BOTTOM)
        
        #self.nb.add_screen(frame1, 'Reverend')
        self.nb.add_screen(frame2, 'Training')
        self.nb.add_screen(frame3, 'Testing')
        self.nb.add_screen(frame4, 'Quit')
        

    def addNextPrev(self):
        npFrame = Frame(self.listView)
        npFrame.pack(side=BOTTOM, fill=X)
        bn = Button(npFrame, text="Prev Page", command=self.prevPage)
        bn.grid(row=0, column=0)
        bn = Button(npFrame, text="Next Page", command=self.nextPage)
        bn.grid(row=0, column=1)


    def loadCorpus(self):
        path = tkFileDialog.askdirectory()
        if not path:
            return
        self.loadFileList(path)
        self.displayItems()
        self.displayRows()

    def bulkTest(self):
        dirs = []
        for pool in self.guesser.poolNames():
            path = tkFileDialog.askdirectory()
            dirs.append((pool, path))
        for pool, path in dirs:
            print pool, path
            

    def displayList(self):
        for item in self.items:
            self.itemRow(item)
            
    def displayRows(self):
        for row in self.rows:
            self.displayRow(row)

    def loadFileList(self, path):
        listing = os.listdir(path)
        self.files = [os.path.join(path, file) for file in listing]
        self.cursor = 0

    def prevPage(self):
        self.cursor = max(0, self.cursor - self.itemsPerPage)
        self.displayItems()

    def nextPage(self):
        self.cursor = min(len(self.files), self.cursor + self.itemsPerPage)
        self.displayItems()
        
    def displayItems(self):
        theseFiles = self.files[self.cursor:self.cursor + self.itemsPerPage]
        items = []
        for file, row in zip(theseFiles, self.rows):
            fp = open(file, 'rb')
            try:
                item = self.itemClass.fromFile(fp)
            finally:
                fp.close()
            if item is None:
                continue
            items.append(item)
            guesses = self.guesser.guess(item)
            summary = item.summary()
            cols = item.columnDefs()
            s = ''
            for c, ignore in cols:
                s += summary[c] + ' '
            row.initialize(item, s, guesses, self.guesser.poolNames())
        self.items = items
        
    def quitNow(self):
        if self.dirty:
            if tkMessageBox.askyesno("You have unsaved changes!", "Quit without saving?"):
                self.quit()
        self.quit()

    def columnHeadings(self):
        # FIXME - Something better for columns and rows in general
        line = Frame(self.listView, relief=RAISED, borderwidth=1)
        line.pack(side=TOP, padx=2, pady=1)
        colHeadings = self.itemClass.columnDefs()
        currCol = 0
        for cHdr, width in colHeadings:
            l = Label(line, text=cHdr, width=width, bg='lightblue')
            l.grid(row=0, column=currCol)
            currCol += 1
        line = Frame(self)
        line.pack(fill=X)

    def training(self, row):
        sel = row.selection.get()
        self.guesser.train(sel, row.original)
        row.current = sel
        self.guessAll()

    def guessAll(self):
        self.poolView.refresh()
        pools = self.guesser.poolNames()
        for row in self.rows:
            row.setGuess(self.guesser.guess(row.original), pools)
            
    def displayRow(self, row, bgc=None):
        # UGH - REWRITE!
        line = Frame(self.listView, bg=bgc)
        line.pack(pady=1)
        row.line = line
        self.insertRadios(row)
        Label(line, text=row.summary.get(), textvariable=row.summary, width=60, bg=bgc,
              anchor=W).grid(row=0, column=2)
        #Label(line, text=row.guess, width=7, bg=bgc, anchor=W).grid(row=0, column=1)
        colourStripe = Label(line, text=' ', width=1, bg=bgc, anchor=W, relief=GROOVE)
        colourStripe.grid(row=0, column=1)
        line.colourStripe = colourStripe
        pools = self.guesser.poolNames()
        row.refreshColour(pools)

    def poolAdded(self):
        if not self.items:
            return
        pools = self.guesser.poolNames()
        for row in self.rows:
            for r in row.radios:
                r.destroy()
            self.insertRadios(row)
            row.refreshColour(pools)
        self.dirty = True

    def insertRadios(self, row):
        radioFrame = Frame(row.line)
        radioFrame.grid(row=0, column=0)
        currCol = 0
        radios = []
        v = row.selection
        ci = 0
        colours = row.defaultColours()
        pools = self.guesser.poolNames()
        for pool in pools:
            rb = Radiobutton(radioFrame, text=pool, variable=v, value=pool, command=Command(self.training, row), bg=None)
            rb.grid(row=0, column=currCol)
            radios.append(rb)
            currCol += 1
            ci += 1
        row.radios = radios
Beispiel #20
0
neg_as_neg = 0
neg_as_pos = 0
pos_as_pos = 0
pos_as_neg = 0
below_thrs = 0
total_pos = 0
total_neg = 0

threshold = 0.0 #

pos = open('rt-polaritydata/rt-polarity.500.pos')

for sent in pos:
    total_pos += 1
    polarity = guesser.guess(sent.rstrip())
    for possible in polarity:
        if possible[0]=='pos':
            cur_pos = possible[1]
        elif possible[0] =='neg':
            cur_neg = possible[1]
    
    if cur_pos - cur_neg > threshold:
        pos_as_pos += 1
    elif cur_neg - cur_pos > threshold:
        pos_as_neg += 1
    else:
        below_thrs += 1

print "Threshold: %s" % threshold
print "%s pos correct. %s incorrect as neg. %s unknown" % (pos_as_pos, pos_as_neg, below_thrs)
Beispiel #21
0
# instantiate URL retriever class
urlRetriever = retriever.URLRetriever()

# try retrieval of url
try:
    corpusSet = urlRetriever.retrieveURL(url)
    corpus = corpusSet['corpus']
    charset = corpusSet['charset']
except IOError:
    error = 1
    errorMessage = 'URL could not be retrieved'

# stop word object
stopWords = retriever.StopWords()

# guess language
guesser = Bayes()
for selectLanguage in languages:
    if selectLanguage != 'automatic':
        stopWordString = stopWords.getStopWordString(selectLanguage)
        guesser.train(selectLanguage, stopWordString)
        language = guesser.guess(corpus)

        # print stopword string
        print stopWordString

# print language
# print language.pop(0)[0]
print language
Beispiel #22
0
 def guess(self,line):
   """
   Guess what category these words apply to
   """
   #print Bayes.guess(self,line)
   return Bayes.guess(self,line)
Beispiel #23
0
from build import generatePostList
from renderer import readFileContents
from reverend.thomas import Bayes

import json

guesser = Bayes()

for controlFilename in generatePostList("posts"):
    control = json.loads(readFileContents(controlFilename), encoding='utf-8')
    content = readFileContents(controlFilename.replace(".control", ""))

    for cat in control["categories"]:
        guesser.train(cat, content)

for controlFilename in generatePostList("posts"):
    control = json.loads(readFileContents(controlFilename), encoding='utf-8')
    content = readFileContents(controlFilename.replace(".control", ""))

    for guess in guesser.guess(content):
        if guess[1] > 0.05 and guess[0] not in control["categories"] and not guess[0] == "personal":
            print control["title"], guess[0]
def load_csv_to_bayes(filename):
    reader = csv.reader(file(filename))
    reader.next()
    counts = defaultdict(int)
    for line in reader:
        body = line[1]
        if line[2] == "visible":
            status = "visible"
        else:
            status = "moderated"
        clean_body = re.sub("<[^>]*>","",body)
        guesser.train(status, clean_body)


try:
    guesser.load('dataset.dat')
except IOError as e:
    load_csv_to_bayes('good.csv')
    load_csv_to_bayes('bad.csv')
    guesser.save('dataset.dat')



import sys
inp = 'notend'
while inp != 'END':
    print "Word >"
    inp = raw_input()
    print "Word has moderate value: ",guesser.guess(inp)

Beispiel #25
0
class Guesser():
    
    def __init__(self, feed, user, config):
        import os.path

        self.user = user
        self.filename = config['bayes_dir']
        self.filename += "/users/%s" % user.id
        if not os.path.exists(self.filename):
            os.makedirs(self.filename)
        self.filename += '/feed_%s.bayes' % str(feed.id)
        log.debug("filename:%s" % self.filename)

        stopwords = meta.Session\
                .query(model.Stopword)\
                .filter_by(feed_id=feed.id).all()
        self.stopwords = map(lambda x: x.word, stopwords)

        self.trainer = Bayes()
        self.trainer.getTokens = lambda x: my_tokenize(x, self.stopwords)
        if os.path.exists(self.filename):
            self.trainer.load(self.filename)
        else:
            self.trainer.newPool('ham')
            self.trainer.newPool('spam')

    def save(self):
        self.trainer.save(self.filename)

    def clear(self):
        self.trainer = Bayes()
#        self.trainer.getTokens = my_tokenize
        self.trainer.getTokens = lambda x: my_tokenize(x, self.stopwords)
        self.trainer.newPool('ham')
        self.trainer.newPool('spam')
    
    def is_spam(self, entry, use_classified=True):
        if use_classified:
            classy = meta.Session\
                    .query(model.Classification)\
                    .filter_by(user_id = self.user.id, entry_id=entry.id).first()
            if classy:
                if classy.pool == 'spam':
                    return True
                elif classy.pool == 'ham':
                    return False
                else:
                    raise "bad pool"
                                
        g = self.guess(entry)

        if g['spam'] and not g['ham']:
            return True
            
        if not g['spam'] and g['ham']:
            return False
            
        return (g['spam'] > g['ham'])

    def guess(self, entry):
        from rssmonster.controllers.bayes import __relevant__
        
        log.debug("__relevant__(entry) %s" % __relevant__(entry))
        log.debug("__relevant__(entry) %s" % self.trainer.guess(__relevant__(entry)))
        log.debug('self.filename: %s' % self.filename)
#        ret = dict(self.trainer.guess(__relevant__(entry)))
        ret = dict(self.trainer.guess(__relevant__(entry)))
        log.debug("ret: %s" % ret)
        if not 'spam' in ret:
            ret['spam'] = None
        if not 'ham' in ret:
            ret['ham'] = None
        
        return ret
Beispiel #26
0
# train on the full set minus 500 reviews of each type

pos = open('pos_smiles_5k')
for sent in pos:
    guesser.train('pos', sent.rstrip())

neg = open('neg_smiles_5k')
    
for sent in neg:
    guesser.train('neg', sent.rstrip())    

guesser.save('twitter_guesser.bay')

api = twitter.Api()
latest = api.GetPublicTimeline()

threshold = 0.1

for tweet in latest:
    classif = guesser.guess(tweet.text)
    if len(classif) == 2:
        if classif[0][1] - classif[1][1] > threshold:
            print "%s : %s!" % (tweet.text, classif[0][0])
        else:
           print "%s : NOISE" % tweet.text
    else:
        if len(classif) == 1:
            print "%s : %s!" % (tweet.text, classif[0][0])
        else:
           print "%s : NOISE" % tweet.text
Beispiel #27
0
from pysrt import SubRipFile
import sys
import os
import itertools
from reverend.thomas import Bayes
from collections import defaultdict

guesser = Bayes()

for f in os.listdir(sys.argv[1]):
	f_train = os.path.join(sys.argv[1], f)
	for line in open(f_train, "r"):
		line = line.strip()
		if not line: continue
		guesser.train(os.path.basename(f), line)

for line in sys.stdin:
	accum, count = defaultdict(float), defaultdict(int)
	line = line.strip()
	lines = SubRipFile.open(line, encoding='iso-8859-1')
	lines = map(lambda k: k.text.lower().strip(), lines)
	if not lines: continue
	for line_ in lines:
		for lang, precision in guesser.guess(line_):
			accum[lang] = accum[lang] + precision
			count[lang] = count[lang] + 1
	
	langs = sorted([(k, accum[k] / count[k]) for k in accum.keys()], key=lambda (a, b): b, reverse=True)
	for lang in langs:
		print "\t".join(map(str, [lang[0], lang[1], line]))
Beispiel #28
0
    post.dead = True
    brain.train(t1.name, post.title+post.summary)
    print "Tagging " + t1.name
    post.save()


brain = Bayes()
brain.load('fish.db')


from reverend.thomas import Bayes
posts = Post.objects.all()


for post in posts:
  tagset = brain.guess(post.summary)
  for t in tagset:
      if t[1] > 0.90: 
          tag = Tag.objects.get(name=t[0])
          post.tags.add(tag)

  if keyword in post.title.lower():
    post.tags.add(t1)
    post.dead = True
    brain.train(t1.name, post.title+post.summary)
    print "Tagging " + t1.name
    post.save()


def beautify(value):
from reverend.thomas import Bayes

guesser = Bayes()
guesser.train('fish', 'salmon trout cod carp')
guesser.train('fowl', 'hen chicken duck goose')

guesser.guess('chicken tikka marsala')

guesser.untrain('fish', 'salmon carp')
Beispiel #30
0
from reverend.thomas import Bayes
guesser = Bayes()
guesser.train('french', 'le la les du un une je il elle de en')
guesser.train('german', 'der die das ein eine')
guesser.train('spanish', 'el uno una las de la en')
guesser.train('english', 'the it she he they them are were to')
guesser.guess('they went to el cantina')
guesser.guess('they were flying planes')
guesser.train('english', 'the rain in spain falls mainly on the plain')
guesser.save('my_guesser.bay')
"""
pip install reverend
pip install sets
Source Code :https://laslabs.github.io/python-reverend/_modules/reverend/thomas.html
Overview of Bayes Rule: https://towardsdatascience.com/bayes-rule-with-a-simple-and-practical-example-2bce3d0f4ad0
"""
from reverend.thomas import Bayes
g = Bayes()    # guesser
g.train('french','La souris est rentre dans son trou.')
g.train('english','my tailor is rich.')
g.train('french','Je ne sais pas si je viendrai demain.')
g.train('english','I do not plan to update my website soon and I would really like some help from the rest of you idiots.')

print(g.guess('Jumping out of cliffs it not a good idea.'))

# print(g.guess('Demain il fera trs probablement chaud.'))
Beispiel #32
0
# instantiate URL retriever class
urlRetriever = retriever.URLRetriever()

# try retrieval of url
try:
    corpusSet = urlRetriever.retrieveURL(url)
    corpus = corpusSet['corpus']
    charset = corpusSet['charset']
except IOError:
    error = 1
    errorMessage = 'URL could not be retrieved'

# stop word object
stopWords = retriever.StopWords()

# guess language
guesser = Bayes()
for selectLanguage in languages:
    if selectLanguage != 'automatic':
	stopWordString = stopWords.getStopWordString(selectLanguage)
	guesser.train(selectLanguage, stopWordString)
	language = guesser.guess(corpus)

	# print stopword string
	print stopWordString

# print language
# print language.pop(0)[0]
print language
Beispiel #33
0
test = tweets[countTrain:]

guesser = Bayes()

for tweet in train:
    guesser.train(tweet.classification, tweet.text.lower())


correct = 0
correctHarassing = 0
totalHarassing = 0
incorrect = 0
falsePos = 0
falseNeg = 0
for tweet in test:
    resultsRaw = guesser.guess(tweet.text.lower())
    results = {}
    for k,v in resultsRaw:
        results[k] = v

    guess = 'harassing' if results.get('harassing', 0.0) > 0.4 else 'ok'

    if tweet.classification == 'harassing':
        totalHarassing += 1

    if (guess == tweet.classification):
        correct += 1
        if (tweet.classification == 'harassing'):
            correctHarassing += 1
    else:
        incorrect += 1
Beispiel #34
0
'Goal:  Build a language recognizer using a naive bayesian classifier'

# Make a 50 language reconizer trained on 10 books per language at:
# http://www.gutenberg.org/browse/languages/en
# http://www.gutenberg.org/files/1342/1342-0.txt

from reverend.thomas import Bayes

# Train the classifier
language_sniffer = Bayes()
for lang in ['en', 'es', 'fr', 'de', 'it']:
    filename = 'notes/proverbs_%s.txt' % lang
    with open(filename) as f:
        data = f.read().decode('utf-8')
        language_sniffer.train(lang, data)

# Apply the classifier
phrases = u'''\
All the leaves are brown and the sky is gray.  I've been for a walk on a winter's day.
De colores, todos los colores. De colores se visten los campos en la primavera.
Jingle bells, jingle all the way. Oh what fun it is to ride in a one horse open sleigh.
Casca belles, hoy es navidad.  Es un dia, de allegria y felicidad.
'''.splitlines()

for phrase in phrases:
    best_guess = language_sniffer.guess(phrase)[0][0]
    print best_guess, '<--', phrase[:30]
Beispiel #35
0
                        "author": author,
                        "description": description,
                        "summary": summary,
                        "content": content,
                        "link": link,
                    },
                )

                # Autotagging new posts
                if created:
                    try:
                        bayes = Brain.objects.get(user=user)
                        brain = Bayes()
                        brain.loads(base64.decodestring(bayes.data))
                        text = "%s %s %s" % (title, author, summary)
                        guess = brain.guess(text)
                        for t in guess:
                            if t[1] > 0.75:
                                tag = Tag.objects.filter(user=user).filter(name=t[0])
                                if tag:
                                    print "Autotagging %s as %s" % (title, t[0])
                                    post.tags.add(tag[0].id)
                    except Exception, e:
                        print "Problem autotagging %s, Exception says: %s" % (title, e)

                dtMax = max(dtMax, post.dt_published)
                post.current = True
                if created and isDuplicate(post.title):
                    print "Skipping duplicate or old news"
                else:
                    post.save()
Beispiel #36
0
Doing hard work
INFO:root:Called big_func() with (10,) giving 11 in 1.074376 seconds
>>> y = big_func(20)
Doing hard work
INFO:root:Called big_func() with (20,) giving 21 in 1.100503 seconds
>>> show_cache(big_func)
{10: 11, 20: 21}
SyntaxError: invalid syntax
>>> 

>>> 
>>> from reverend.thomas import Bayes
>>> gender = Bayes()
>>> gender.train('male', 'bill hank chris mark martin pat adam hank chris zack sean')
>>> gender.train('female', 'mindy shelly pat mary daisy amber chris pat becky sue')
>>> gender.guess('hank')
[('male', 0.9999)]
>>> gender.guess('mindy')
[('female', 0.9999)]
>>> gender.guess('pat')
[('female', 0.6451612903225806), ('male', 0.35483870967741926)]
>>> gender.guess('chris')
[('male', 0.6875000000000001), ('female', 0.3125)]
>>> gender.train('male', 'red red orange yellow red orange blue black brown blue red yellow')
>>> gender.train('female', 'pink red green green blue blue chartreuse green blue yellow orange blue green')
>>> gender.guess('red')
[('male', 0.8), ('female', 0.19999999999999996)]
>>> gender.guess('pink')
[('female', 0.9999)]
>>> gender.guess('green')
[('female', 0.9999)]
from reverend.thomas import Bayes

guesser = Bayes()
guesser.train('fish', 'salmon trout cod carp')
guesser.train('fowl', 'hen chicken duck goose')

guesser.guess('chicken tikka marsala')

guesser.untrain('fish','salmon carp')
    def local_search(self, cid, term_unstemmed, recent):
        term = self.stem(term_unstemmed)
        exemplar_pids = self.get_term_exemplars(cid, term)
        if len(exemplar_pids) < 4:
            return self.fulltext(cid, term, recent)

        log_tmp("SEARCH: %s exemplars" % len(exemplar_pids))

        guesser = Bayes()

        for ex_pid in exemplar_pids:
            ex = state.the.get_post(ex_pid, content=True)
            log_tmp("SEARCH: exemplar tokens: [%s]" % ex.tokens())
            guesser.train("relevant", ex.tokens())  # get normalized content from p.
            # TODO Toss in other factors, if possible.

        for neg_ex_pid in state.the.get_random_pids(len(exemplar_pids)):  # probably cacheable, if we use a bigger pool
            guesser.train("random", state.the.get_post(neg_ex_pid, content=True).tokens())

        log_tmp("SEARCH: trained")

        proportions = [
            (tok, (count + 1) / (1.0 * guesser.pools["random"].get(tok, 0) + 1))
            for (tok, count) in guesser.poolData("relevant")
        ]

        proportions = [  # knock out the weak and irrelevant ones before sorting
            (tok, prop) for (tok, prop) in proportions if prop > 2
        ]

        fulltext_fallback = len(proportions) < 3

        if fulltext_fallback:
            query = xapian.Query(xapian.Query.OP_AND, [term])
        else:
            proportions.sort(key=operator.itemgetter(1), reverse=True)
            log_tmp("SEARCH: proportions: " + str(proportions))
            # search for the twelve best words
            query = xapian.Query(xapian.Query.OP_OR, [tok for (tok, prop) in proportions[:12]])

        log_tmp("SEARCH: query: " + str(query))

        enq = xapian.Enquire(self.mainabase)
        enq.set_query(
            #            xapian.Query(xapian.Query.OP_AND,
            query
            #                , ##Something scoring for BROAD_SUPPORT##)
            ##Something scoring for recency, if appropriate
        )
        mset = enq.get_mset(0, 25)

        results = []
        for m in mset:
            doc = m.get_document()
            post = state.the.get_post(int(doc.get_data()), True)

            for (pool, prob) in guesser.guess(post.tokens()):
                if pool == "relevant":
                    rel_prob = prob
            score = rel_prob
            score *= post.broad_support
            if recent:
                score *= _post_age_score(post)
            results.append(SearchResult(post, term, score))
            # results.append( (post, score, "rel: %f  b_s: %f  root age: %f" %
            #                 (rel_prob, post.broad_support, sqrt(age_days)) ) )
        results.sort(lambda x, y: cmp(x.score, y.score), reverse=True)
        return results[:10]
Beispiel #39
0
def run(corpus,
        verbose=False,
        hkap_file=os.path.join(software, 'libs/PACManData.bay'),
        train=False,
        authors=False,
        exact_names=False,
        first_only=False,
        nyears=10,
        plotit=False,
        hst=False,
        clobber=False,
        rs_exceptions=''):
    f = open(os.path.join(software, 'category_synonyms.txt'), 'r')
    lines = f.readlines()
    f.close()
    acronyms = {}
    for line in lines:
        if line.startswith('#'): continue
        key, value = line.split('=')
        acronyms[key.strip()] = value.strip().split(',')
    uber_categories = acronyms

    stopwords = load_stopwords()

    dguesser = Bayes()
    dguesser.load(hkap_file)

    if not authors:
        if hst:
            ## Below, proposals are retrieved, then parsed.
            abs = parse_abstracts_proposals(corpus)
            text = parse_science_justification_proposals(corpus)
            justification = abs + text
            bayesString = " " + justification
        else:
            f = open(corpus)
            lines = f.readlines()
            f.close()
            text = ''
            for line in lines:
                if line.startswith('#'): continue
                if not line.strip(): continue
                text += line.strip() + ' '
            bayesString = text
        bayesString = work_string(bayesString, stopwords)
        result = dguesser.guess(bayesString)
        result = normalize_result(result)

    else:
        ## assumes input is a person report
        ## if .pkl report not available, creates new one
        import util

        records = []
        results_dict = {}
        results_pkl = corpus.replace(corpus.split('.')[-1], 'pkl')
        if not os.path.isfile(results_pkl) or clobber:
            f = open(corpus)
            lines = f.readlines()
            f.close()
            for line in lines:
                if line.startswith('#'): continue
                if not line.strip(): continue
                info = line.rstrip().split("\t")
                if info[0] == '': continue
                # records.append(info[0].replace(' ','').replace('"','').replace("'",'').lower())
                records.append(info[0].replace('"', '').replace("'",
                                                                '').lower())
            author_dict, cite_dict = util.adscrawl.run_authors(
                records, nyears=nyears, rs_exceptions=rs_exceptions)
            ## author_dict, cite_dict = util.adscrawl.run_exact_authors(records, nyears=nyears)
            pickle.dump(author_dict, open(results_pkl, 'wb'))
            pickle.dump(cite_dict, open('cites.pkl', 'wb'))
        else:
            author_dict = pickle.load(open(results_pkl, 'rb'))
            cite_dict = pickle.load(open('cites.pkl', 'rb'))
        for author in author_dict.keys():
            bayesString = ''
            for abstract in author_dict[author]:
                bayesString = ' ' + abstract

            bayesString = work_string(bayesString, stopwords)
            result = dguesser.guess(bayesString)
            ## result = normalize_result(result)
            results_dict[author] = {}
            results_dict[author]['hkap'] = rec.fromrecords(result)
            try:
                results_dict[author]['cites'] = sorted(cite_dict[author],
                                                       reverse=True)
            except:
                results_dict[author]['cites'] = [0]
        result = results_dict
    return (result, uber_categories)
Beispiel #40
0
 def guess(self, line):
     """
 Guess what category these words apply to
 """
     #print Bayes.guess(self,line)
     return Bayes.guess(self, line)
Beispiel #41
0
class NaiveBayesClassifier(object):
    def __init__(self, non_spam_train_dir, spam_train_dir):
        self.non_spam_train_dir = non_spam_train_dir
        self.spam_train_dir = spam_train_dir
        self.naive_bayes_classifier = Bayes()
        self.total_num_train_files = 0
        self.total_num_test_files = 0
        self.num_misclass = 0

    def make_single_line_from_body_of_file(self, filename):
        fd = open(filename)
        total = ''
        return total.join(line.strip() for line in fd)

    def train(self):
        for subdir, dirs, files in os.walk(self.non_spam_train_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                self.naive_bayes_classifier.train('nonspam', full_text_line)


        for subdir, dirs, files in os.walk(self.spam_train_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                self.naive_bayes_classifier.train('spam', full_text_line)

    def train_for_given_dirs(self, non_spam_train_dir, spam_train_dir):
        for subdir, dirs, files in os.walk(non_spam_train_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                self.naive_bayes_classifier.train('nonspam', full_text_line)


        for subdir, dirs, files in os.walk(spam_train_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                self.naive_bayes_classifier.train('spam', full_text_line)

    def train_two_files(self):
        fd = open(self.non_spam_train_dir, 'r')
        for line in fd:
            self.naive_bayes_classifier.train('nonspam', line)

        fd = open(self.spam_train_dir, 'r')
        for line in fd:
            self.naive_bayes_classifier.train('spam', line)

    def train_for_two_exogenous_files(self, non_spam_train_file, spam_train_file):
        if non_spam_train_file != '':
            fd = open(non_spam_train_file, 'r')
            for line in fd:
                self.naive_bayes_classifier.train('nonspam', line)
        if spam_train_file != '':
            fd = open(spam_train_file, 'r')
            for line in fd:
                self.naive_bayes_classifier.train('spam', line)

    def test(self, non_spam_test_dir, spam_test_dir):
        # rb.classify('sloths are so cute i love them') == 'good'
        for subdir, dirs, files in os.walk(non_spam_test_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                class_prob_vec = self.naive_bayes_classifier.guess(full_text_line)
                self.total_num_test_files += 1
                y_hat = class_prob_vec[0][0]
                if y_hat != 'nonspam':
                    self.num_misclass += 1

        for subdir, dirs, files in os.walk(spam_test_dir):
            for file_i in files:
                self.total_num_train_files += 1
                filename = os.path.join(subdir, file_i)
                full_text_line = self.make_single_line_from_body_of_file(filename)
                class_prob_vec = self.naive_bayes_classifier.guess(full_text_line)
                self.total_num_test_files += 1
                y_hat = class_prob_vec[0][0]
                print class_prob_vec
                if y_hat != 'spam':
                    self.num_misclass += 1
        misclass_rate = (self.num_misclass/float(self.total_num_test_files))
        accuracy = 1 - misclass_rate
        print 'Misclassification rate is %f' % misclass_rate
        print 'Accuracy is %f' % accuracy

    def make_single_line_from_body(self, text_body):
        total = ' '
        return total.join(line.strip() for line in text_body)

    def make_single_line_from_body2(self, text_body):
        total = ''
        for line in text_body:
            total += line + ' '
        return total

    def create_nonspam_spam_datasets(self, text_body):
        return text_body

    def classify(self, text_body):
        class_prob_vec = self.naive_bayes_classifier.guess(text_body)
        y_hat = 'nonspam'
        if len(class_prob_vec) != 0:
            y_hat = class_prob_vec[0][0]
        return y_hat
Beispiel #42
0
class BayesianClassifier:

  POSITIVE = POSITIVE
  NEGATIVE = NEGATIVE
  NEUTRAL  = NEUTRAL

  THRESHHOLD = 0.1
  guesser = None

  def __init__(self):
    self.guesser = Bayes()

  def train(self, example_tweets):
    for t in example_tweets:
      self.guesser.train(t.sentiment, t.message)

    self.guesser.train(POSITIVE, "cool")
    self.guesser.train(POSITIVE, "Woo")
    self.guesser.train(POSITIVE, "quite amazing")
    self.guesser.train(POSITIVE, "thks")
    self.guesser.train(POSITIVE, "looking forward to")
    self.guesser.train(POSITIVE, "damn good")
    self.guesser.train(POSITIVE, "frickin ruled")
    self.guesser.train(POSITIVE, "frickin rules")
    self.guesser.train(POSITIVE, "Way to go")
    self.guesser.train(POSITIVE, "cute")
    self.guesser.train(POSITIVE, "comeback")
    self.guesser.train(POSITIVE, "not suck")
    self.guesser.train(POSITIVE, "prop")
    self.guesser.train(POSITIVE, "kinda impressed")
    self.guesser.train(POSITIVE, "props")
    self.guesser.train(POSITIVE, "come on")
    self.guesser.train(POSITIVE, "congratulation")
    self.guesser.train(POSITIVE, "gtd")
    self.guesser.train(POSITIVE, "proud")
    self.guesser.train(POSITIVE, "thanks")
    self.guesser.train(POSITIVE, "can help")
    self.guesser.train(POSITIVE, "thanks!")
    self.guesser.train(POSITIVE, "pumped")
    self.guesser.train(POSITIVE, "integrate")
    self.guesser.train(POSITIVE, "really like")
    self.guesser.train(POSITIVE, "loves it")
    self.guesser.train(POSITIVE, "yay")
    self.guesser.train(POSITIVE, "amazing")
    self.guesser.train(POSITIVE, "epic flail")
    self.guesser.train(POSITIVE, "flail")
    self.guesser.train(POSITIVE, "good luck")
    self.guesser.train(POSITIVE, "fail")
    self.guesser.train(POSITIVE, "life saver")
    self.guesser.train(POSITIVE, "piece of cake")
    self.guesser.train(POSITIVE, "good thing")
    self.guesser.train(POSITIVE, "hawt")
    self.guesser.train(POSITIVE, "hawtness")
    self.guesser.train(POSITIVE, "highly positive")
    self.guesser.train(POSITIVE, "my hero")
    self.guesser.train(POSITIVE, "yummy")
    self.guesser.train(POSITIVE, "awesome")
    self.guesser.train(POSITIVE, "congrats")
    self.guesser.train(POSITIVE, "would recommend")
    self.guesser.train(POSITIVE, "intellectual vigor")
    self.guesser.train(POSITIVE, "really neat")
    self.guesser.train(POSITIVE, "yay")
    self.guesser.train(POSITIVE, "ftw")
    self.guesser.train(POSITIVE, "I want")
    self.guesser.train(POSITIVE, "best looking")
    self.guesser.train(POSITIVE, "imrpessive")
    self.guesser.train(POSITIVE, "positive")
    self.guesser.train(POSITIVE, "thx")
    self.guesser.train(POSITIVE, "thanks")
    self.guesser.train(POSITIVE, "thank you")
    self.guesser.train(POSITIVE, "endorse")
    self.guesser.train(POSITIVE, "clearly superior")
    self.guesser.train(POSITIVE, "superior")
    self.guesser.train(POSITIVE, "really love")
    self.guesser.train(POSITIVE, "woot")
    self.guesser.train(POSITIVE, "w00t")
    self.guesser.train(POSITIVE, "super")
    self.guesser.train(POSITIVE, "wonderful")
    self.guesser.train(POSITIVE, "leaning towards")
    self.guesser.train(POSITIVE, "rally")
    self.guesser.train(POSITIVE, "incredible")
    self.guesser.train(POSITIVE, "the best")
    self.guesser.train(POSITIVE, "is the best")
    self.guesser.train(POSITIVE, "strong")
    self.guesser.train(POSITIVE, "would love")
    self.guesser.train(POSITIVE, "rally")
    self.guesser.train(POSITIVE, "very quickly")
    self.guesser.train(POSITIVE, "very cool")
    self.guesser.train(POSITIVE, "absolutely love")
    self.guesser.train(POSITIVE, "very exceptional")
    self.guesser.train(POSITIVE, "so proud")
    self.guesser.train(POSITIVE, "funny")
    self.guesser.train(POSITIVE, "recommend")
    self.guesser.train(POSITIVE, "so proud")
    self.guesser.train(POSITIVE, "so great")
    self.guesser.train(POSITIVE, "so cool")
    self.guesser.train(POSITIVE, "cool")
    self.guesser.train(POSITIVE, "wowsers")
    self.guesser.train(POSITIVE, "plus")
    self.guesser.train(POSITIVE, "liked it")
    self.guesser.train(POSITIVE, "make a difference")
    self.guesser.train(POSITIVE, "moves me")
    self.guesser.train(POSITIVE, "inspired")
    self.guesser.train(POSITIVE, "OK")
    self.guesser.train(POSITIVE, "love it")
    self.guesser.train(POSITIVE, "LOL")
    self.guesser.train(POSITIVE, ":)")
    self.guesser.train(POSITIVE, ";)")
    self.guesser.train(POSITIVE, ":-)")
    self.guesser.train(POSITIVE, ";-)")
    self.guesser.train(POSITIVE, ":D")
    self.guesser.train(POSITIVE, ";]")
    self.guesser.train(POSITIVE, ":]")
    self.guesser.train(POSITIVE, ":p")
    self.guesser.train(POSITIVE, ";p")
    self.guesser.train(POSITIVE, "voting for")
    self.guesser.train(POSITIVE, "great")
    self.guesser.train(POSITIVE, "agreeable")
    self.guesser.train(POSITIVE, "amused")
    self.guesser.train(POSITIVE, "brave")
    self.guesser.train(POSITIVE, "calm")
    self.guesser.train(POSITIVE, "charming")
    self.guesser.train(POSITIVE, "cheerful")
    self.guesser.train(POSITIVE, "comfortable")
    self.guesser.train(POSITIVE, "cooperative")
    self.guesser.train(POSITIVE, "courageous")
    self.guesser.train(POSITIVE, "delightful")
    self.guesser.train(POSITIVE, "determined")
    self.guesser.train(POSITIVE, "eager")
    self.guesser.train(POSITIVE, "elated")
    self.guesser.train(POSITIVE, "enchanting")
    self.guesser.train(POSITIVE, "encouraging")
    self.guesser.train(POSITIVE, "energetic")
    self.guesser.train(POSITIVE, "enthusiastic")
    self.guesser.train(POSITIVE, "excited")
    self.guesser.train(POSITIVE, "exuberant")
    self.guesser.train(POSITIVE, "excellent")
    self.guesser.train(POSITIVE, "I like")
    self.guesser.train(POSITIVE, "fine")
    self.guesser.train(POSITIVE, "fair")
    self.guesser.train(POSITIVE, "faithful")
    self.guesser.train(POSITIVE, "fantastic")
    self.guesser.train(POSITIVE, "fine")
    self.guesser.train(POSITIVE, "friendly")
    self.guesser.train(POSITIVE, "fun ")
    self.guesser.train(POSITIVE, "funny")
    self.guesser.train(POSITIVE, "gentle")
    self.guesser.train(POSITIVE, "glorious")
    self.guesser.train(POSITIVE, "good")
    self.guesser.train(POSITIVE, "pretty good")
    self.guesser.train(POSITIVE, "happy")
    self.guesser.train(POSITIVE, "healthy")
    self.guesser.train(POSITIVE, "helpful")
    self.guesser.train(POSITIVE, "high")
    self.guesser.train(POSITIVE, "agile")
    self.guesser.train(POSITIVE, "responsive")
    self.guesser.train(POSITIVE, "hilarious")
    self.guesser.train(POSITIVE, "jolly")
    self.guesser.train(POSITIVE, "joyous")
    self.guesser.train(POSITIVE, "kind")
    self.guesser.train(POSITIVE, "lively")
    self.guesser.train(POSITIVE, "lovely")
    self.guesser.train(POSITIVE, "lucky")
    self.guesser.train(POSITIVE, "nice")
    self.guesser.train(POSITIVE, "nicely")
    self.guesser.train(POSITIVE, "obedient")
    self.guesser.train(POSITIVE, "perfect")
    self.guesser.train(POSITIVE, "pleasant")
    self.guesser.train(POSITIVE, "proud")
    self.guesser.train(POSITIVE, "relieved")
    self.guesser.train(POSITIVE, "silly")
    self.guesser.train(POSITIVE, "smiling")
    self.guesser.train(POSITIVE, "splendid")
    self.guesser.train(POSITIVE, "successful")
    self.guesser.train(POSITIVE, "thankful")
    self.guesser.train(POSITIVE, "thoughtful")
    self.guesser.train(POSITIVE, "victorious")
    self.guesser.train(POSITIVE, "vivacious")
    self.guesser.train(POSITIVE, "witty")
    self.guesser.train(POSITIVE, "wonderful")
    self.guesser.train(POSITIVE, "zealous")
    self.guesser.train(POSITIVE, "zany")
    self.guesser.train(POSITIVE, "rocks")
    self.guesser.train(POSITIVE, "comeback")
    self.guesser.train(POSITIVE, "pleasantly surprised")
    self.guesser.train(POSITIVE, "pleasantly")
    self.guesser.train(POSITIVE, "surprised")
    self.guesser.train(POSITIVE, "love")
    self.guesser.train(POSITIVE, "glad")
    self.guesser.train(POSITIVE, "yum")
    self.guesser.train(POSITIVE, "interesting")



    self.guesser.train(NEGATIVE, "FTL")
    self.guesser.train(NEGATIVE, "f**k")
    self.guesser.train(NEGATIVE, "irritating")
    self.guesser.train(NEGATIVE, "not that good")
    self.guesser.train(NEGATIVE, "suck")
    self.guesser.train(NEGATIVE, "lying")
    self.guesser.train(NEGATIVE, "duplicity")
    self.guesser.train(NEGATIVE, "angered")
    self.guesser.train(NEGATIVE, "dumbfounding")
    self.guesser.train(NEGATIVE, "dumbifying")
    self.guesser.train(NEGATIVE, "not as good")
    self.guesser.train(NEGATIVE, "not impressed")
    self.guesser.train(NEGATIVE, "stomach it")
    self.guesser.train(NEGATIVE, "pw")
    self.guesser.train(NEGATIVE, "pwns")
    self.guesser.train(NEGATIVE, "pwnd")
    self.guesser.train(NEGATIVE, "pwning")
    self.guesser.train(NEGATIVE, "in a bad way")
    self.guesser.train(NEGATIVE, "horrifying")
    self.guesser.train(NEGATIVE, "wrong")
    self.guesser.train(NEGATIVE, "flailing")
    self.guesser.train(NEGATIVE, "failing")
    self.guesser.train(NEGATIVE, "fallen way behind")
    self.guesser.train(NEGATIVE, "fallen behind")
    self.guesser.train(NEGATIVE, "lose")
    self.guesser.train(NEGATIVE, "fallen")
    self.guesser.train(NEGATIVE, "self-deprecating")
    self.guesser.train(NEGATIVE, "hunker down")
    self.guesser.train(NEGATIVE, "duh")
    self.guesser.train(NEGATIVE, "get killed by")
    self.guesser.train(NEGATIVE, "got killed by")
    self.guesser.train(NEGATIVE, "hated us")
    self.guesser.train(NEGATIVE, "only works in safari")
    self.guesser.train(NEGATIVE, "must have ie")
    self.guesser.train(NEGATIVE, "fuming and frothing")
    self.guesser.train(NEGATIVE, "heavy")
    self.guesser.train(NEGATIVE, "buggy")
    self.guesser.train(NEGATIVE, "unusable")
    self.guesser.train(NEGATIVE, "nothing is")
    self.guesser.train(NEGATIVE, "is great until")
    self.guesser.train(NEGATIVE, "don't support")
    self.guesser.train(NEGATIVE, "despise")
    self.guesser.train(NEGATIVE, "pos")
    self.guesser.train(NEGATIVE, "hindrance")
    self.guesser.train(NEGATIVE, "sucks")
    self.guesser.train(NEGATIVE, "problems")
    self.guesser.train(NEGATIVE, "not working")
    self.guesser.train(NEGATIVE, "fuming")
    self.guesser.train(NEGATIVE, "annoying")
    self.guesser.train(NEGATIVE, "frothing")
    self.guesser.train(NEGATIVE, "poorly")
    self.guesser.train(NEGATIVE, "headache")
    self.guesser.train(NEGATIVE, "completely wrong")
    self.guesser.train(NEGATIVE, "sad news")
    self.guesser.train(NEGATIVE, "didn't last")
    self.guesser.train(NEGATIVE, "lame")
    self.guesser.train(NEGATIVE, "pet peeves")
    self.guesser.train(NEGATIVE, "pet peeve")
    self.guesser.train(NEGATIVE, "can't send")
    self.guesser.train(NEGATIVE, "bullshit")
    self.guesser.train(NEGATIVE, "fail")
    self.guesser.train(NEGATIVE, "so terrible")
    self.guesser.train(NEGATIVE, "negative")
    self.guesser.train(NEGATIVE, "anooying")
    self.guesser.train(NEGATIVE, "an issue")
    self.guesser.train(NEGATIVE, "drop dead")
    self.guesser.train(NEGATIVE, "trouble")
    self.guesser.train(NEGATIVE, "brainwashed")
    self.guesser.train(NEGATIVE, "smear")
    self.guesser.train(NEGATIVE, "commie")
    self.guesser.train(NEGATIVE, "communist")
    self.guesser.train(NEGATIVE, "anti-women")
    self.guesser.train(NEGATIVE, "WTF")
    self.guesser.train(NEGATIVE, "anxiety")
    self.guesser.train(NEGATIVE, "STING")
    self.guesser.train(NEGATIVE, "nobody spoke")
    self.guesser.train(NEGATIVE, "yell")
    self.guesser.train(NEGATIVE, "Damn")
    self.guesser.train(NEGATIVE, "aren't")
    self.guesser.train(NEGATIVE, "anti")
    self.guesser.train(NEGATIVE, "i hate")
    self.guesser.train(NEGATIVE, "hate")
    self.guesser.train(NEGATIVE, "dissapointing")
    self.guesser.train(NEGATIVE, "doesn't recommend")
    self.guesser.train(NEGATIVE, "the worst")
    self.guesser.train(NEGATIVE, "worst")
    self.guesser.train(NEGATIVE, "expensive")
    self.guesser.train(NEGATIVE, "crap")
    self.guesser.train(NEGATIVE, "socialist")
    self.guesser.train(NEGATIVE, "won't")
    self.guesser.train(NEGATIVE, "wont")
    self.guesser.train(NEGATIVE, ":(")
    self.guesser.train(NEGATIVE, ":-(")
    self.guesser.train(NEGATIVE, "Thanks")
    self.guesser.train(NEGATIVE, "smartass")
    self.guesser.train(NEGATIVE, "don't like")
    self.guesser.train(NEGATIVE, "too bad")
    self.guesser.train(NEGATIVE, "frickin")
    self.guesser.train(NEGATIVE, "snooty")
    self.guesser.train(NEGATIVE, "knee jerk")
    self.guesser.train(NEGATIVE, "jerk")
    self.guesser.train(NEGATIVE, "reactionist")
    self.guesser.train(NEGATIVE, "MUST DIE")
    self.guesser.train(NEGATIVE, "no more")
    self.guesser.train(NEGATIVE, "hypocrisy")
    self.guesser.train(NEGATIVE, "ugly")
    self.guesser.train(NEGATIVE, "too slow")
    self.guesser.train(NEGATIVE, "not reliable")
    self.guesser.train(NEGATIVE, "noise")
    self.guesser.train(NEGATIVE, "crappy")
    self.guesser.train(NEGATIVE, "horrible")
    self.guesser.train(NEGATIVE, "bad quality")
    self.guesser.train(NEGATIVE, "angry")
    self.guesser.train(NEGATIVE, "annoyed")
    self.guesser.train(NEGATIVE, "anxious")
    self.guesser.train(NEGATIVE, "arrogant")
    self.guesser.train(NEGATIVE, "ashamed")
    self.guesser.train(NEGATIVE, "awful")
    self.guesser.train(NEGATIVE, "bad")
    self.guesser.train(NEGATIVE, "bewildered")
    self.guesser.train(NEGATIVE, "blues")
    self.guesser.train(NEGATIVE, "bored")
    self.guesser.train(NEGATIVE, "clumsy")
    self.guesser.train(NEGATIVE, "combative")
    self.guesser.train(NEGATIVE, "condemned")
    self.guesser.train(NEGATIVE, "confused")
    self.guesser.train(NEGATIVE, "crazy")
    self.guesser.train(NEGATIVE, "flipped-out")
    self.guesser.train(NEGATIVE, "creepy")
    self.guesser.train(NEGATIVE, "cruel")
    self.guesser.train(NEGATIVE, "dangerous")
    self.guesser.train(NEGATIVE, "defeated")
    self.guesser.train(NEGATIVE, "defiant")
    self.guesser.train(NEGATIVE, "depressed")
    self.guesser.train(NEGATIVE, "disgusted")
    self.guesser.train(NEGATIVE, "disturbed")
    self.guesser.train(NEGATIVE, "dizzy")
    self.guesser.train(NEGATIVE, "dull")
    self.guesser.train(NEGATIVE, "embarrassed")
    self.guesser.train(NEGATIVE, "envious")
    self.guesser.train(NEGATIVE, "evil")
    self.guesser.train(NEGATIVE, "fierce")
    self.guesser.train(NEGATIVE, "foolish")
    self.guesser.train(NEGATIVE, "frantic")
    self.guesser.train(NEGATIVE, "frightened")
    self.guesser.train(NEGATIVE, "grieving")
    self.guesser.train(NEGATIVE, "grumpy")
    self.guesser.train(NEGATIVE, "helpless")
    self.guesser.train(NEGATIVE, "homeless")
    self.guesser.train(NEGATIVE, "hungry")
    self.guesser.train(NEGATIVE, "hurt")
    self.guesser.train(NEGATIVE, "ill")
    self.guesser.train(NEGATIVE, "itchy")
    self.guesser.train(NEGATIVE, "jealous")
    self.guesser.train(NEGATIVE, "jittery")
    self.guesser.train(NEGATIVE, "lazy")
    self.guesser.train(NEGATIVE, "lonely")
    self.guesser.train(NEGATIVE, "mysterious")
    self.guesser.train(NEGATIVE, "nasty")
    self.guesser.train(NEGATIVE, "rape")
    self.guesser.train(NEGATIVE, "naughty")
    self.guesser.train(NEGATIVE, "nervous")
    self.guesser.train(NEGATIVE, "nutty")
    self.guesser.train(NEGATIVE, "obnoxious")
    self.guesser.train(NEGATIVE, "outrageous")
    self.guesser.train(NEGATIVE, "panicky")
    self.guesser.train(NEGATIVE, "f*****g up")
    self.guesser.train(NEGATIVE, "repulsive")
    self.guesser.train(NEGATIVE, "scary")
    self.guesser.train(NEGATIVE, "selfish")
    self.guesser.train(NEGATIVE, "sore")
    self.guesser.train(NEGATIVE, "tense")
    self.guesser.train(NEGATIVE, "terrible")
    self.guesser.train(NEGATIVE, "testy")
    self.guesser.train(NEGATIVE, "thoughtless")
    self.guesser.train(NEGATIVE, "tired")
    self.guesser.train(NEGATIVE, "troubled")
    self.guesser.train(NEGATIVE, "upset")
    self.guesser.train(NEGATIVE, "uptight")
    self.guesser.train(NEGATIVE, "weary")
    self.guesser.train(NEGATIVE, "wicked")
    self.guesser.train(NEGATIVE, "worried")
    self.guesser.train(NEGATIVE, "is a fool")
    self.guesser.train(NEGATIVE, "painful")
    self.guesser.train(NEGATIVE, "pain")
    self.guesser.train(NEGATIVE, "gross")

  def classify(self, sentence):
    guess = self.guesser.guess(sentence)
    if len(guess) == 0:
      return NEUTRAL

    if len(guess) == 1:
      (sentiment, probabitily) = guess[0]
      return sentiment

    (max_sentiment, max_value) = guess[0]
    (min_sentiment, min_value) = guess[1]
    if max_value - min_value > self.THRESHHOLD:
      return max_sentiment

    return NEUTRAL
Beispiel #43
0
                           l'homme la souhaite")]

for uneCategorie, uneProposition in uneListeDePropositions:
    # entrainement du réseau
    unReseauBayesiens.train(uneCategorie, uneProposition)


phraseAnalyz1 = 'voici un résultat  : 66/6 = 11 '
phraseAnalyz2 = "je ne saurais dire s'il  pourra tout comprendre ... "
phraseAnalyz3 = "le phénomène de la pluie pourrait être d'origine divine"
phraseAnalyz4 = 'la représentation bourbakiste des chiffres assure leur \
                    détermination'

for unePhrase in (phraseAnalyz1, phraseAnalyz2, phraseAnalyz3, phraseAnalyz4):
    # calculs de la catégorie
    solutions = unReseauBayesiens.guess(unePhrase)
    categorie = solutions[0][0]
    probabilite = solutions[0][1]
    print "la phrase '%s' est de catégorie '%s' avec une \
          proba de '%d /100' " % (unePhrase, categorie, probabilite * 100)


# Résultats :
# la phrase 'voici un résultat  : 66/6 = 11 ' est de catégorie 'math'
# avec une probabilité de '99 /100'
# la phrase 'je ne saurais dire s'il  pourra tout comprendre ... ' est
# de catégorie 'philosophie' avec une probabilité de '99 /100'
# la phrase 'le phénomène de la pluie pourrait être d'origine divine' est
# de catégorie 'philosophie' avec une probabilité de '92 /100'
# la phrase 'la représentation bourbakiste des chiffres assure leur déter-
# -mination' est de catégorie 'philosophie' avec une probabilité de '55 /100'