您好,欢迎访问三七文档
Python运行下——贝叶斯分类代码最近在网站上谩骂的人比较多,想写一个语义分类器,让电脑自动屏蔽那些骂人的评论,怎么办呢?这就用到了一个机器学习的算法——贝叶斯文本分类器。这个算法很有用处,可以让电脑识别人类语言,如果加上一点心理学的知识,可以让电脑理解人类的文章并让电脑判断作者的个性特征,这就复杂了,现在我们先做一个简单的示范。1.首先是需要一个样本集,用于训练文本分类器:这里面用到了一个分词算法【cs.perse】,其实是一个机械分词算法,cs.py文件的代码粘贴在最下面。2.下面的函数利用样本创建一个词表,也就是所有词的集合3.下面的函数将一个词表转换成词向量4.训练样本得到脏话/非脏话的词分布概率5.利用贝叶斯条件概率,计算输入的一句话到底是不是骂人的话,如果是骂人的话,就返回1,否则返回06.最后测试一下【'fuckyou!motherfucker!'】这句话,输出结果为:1##########以下是cs.py文件的代码#####################coding:utf8importtimeimportpandasaspdimportstringdefload_words(dic_file='./Freq/SogouLabDic.dic'):t=time.time()word_dic={}first_word_dic={}forlineinopen(dic_file):line=unicode(line,'utf8').split()word=line[0]word_len=line[1]sex=line[2]iflen(line)==3elseNonefirst_word_dic.setdefault(word[0],[])first_word_dic[word[0]].append(word)word_dic[word]=(word_len,sex)forfirst_word,wordsinfirst_word_dic.items():word_dic[first_word]=sorted(words,key=lambdax:len(x),reverse=False)print'load_wordstime:',time.time()-treturnfirst_word_dic,word_dicfirst_word_dic,word_dic=load_words()model_dic={'letters':string.ascii_letters,'digits':string.digits,'punctuation':string.punctuation,}defmatch_ascii(i,sentence):result=''foriinrange(i,len(sentence)):ifnotsentence[i]instring.ascii_letters:breakresult+=sentence[i]returnresultdefmatch_word(i,sentence,first_word_dic=first_word_dic):first_word=sentence[i]ifnotfirst_word_dic.has_key(first_word):iffirst_wordinstring.ascii_letters:returnmatch_ascii(i,sentence)return''words=first_word_dic[first_word]forwordinwords:ifsentence[i:i+len(word)]==word:returnwordreturnfirst_worddefperse(sentence):ifsentence:words=[]i=0whileilen(sentence):matched_word=match_word(i,sentence)ifnotmatched_word=='':words.append(matched_word)i+=len(matched_word)returnwordsif__name__=='__main__':sentence=u'我曾经跨过山和abddfdf大海!互,联网词语搭配关系库来自于对SOGOU搜索引擎所索引到的中文互联网语料的统计分析,统计所进行的时间是2006年10月,涉及到的互联网语料规模在1亿页面以上。涉及到的搭配样例超过2000万,涉及到的高频词超过15万。'words=perse(sentence)forwinwords:printw
本文标题:贝叶斯分类代码
链接地址:https://www.777doc.com/doc-2034584 .html