贝叶斯算法(文本分类算法)java源码

合集下载

朴素贝叶斯分类器详解及中文文本舆情分析(附代码实践)

朴素贝叶斯分类器详解及中文文本舆情分析(附代码实践)

朴素贝叶斯分类器详解及中⽂⽂本舆情分析(附代码实践)本⽂主要讲述朴素贝叶斯分类算法并实现中⽂数据集的舆情分析案例,希望这篇⽂章对⼤家有所帮助,提供些思路。

内容包括:1.朴素贝叶斯数学原理知识2.naive_bayes⽤法及简单案例3.中⽂⽂本数据集预处理4.朴素贝叶斯中⽂⽂本舆情分析本篇⽂章为基础性⽂章,希望对你有所帮助,如果⽂章中存在错误或不⾜之处,还请海涵。

同时,推荐⼤家阅读我以前的⽂章了解基础知识。

▌⼀. 朴素贝叶斯数学原理知识朴素贝叶斯(Naive Bayesian)是基于贝叶斯定理和特征条件独⽴假设的分类⽅法,它通过特征计算分类的概率,选取概率⼤的情况,是基于概率论的⼀种机器学习分类(监督学习)⽅法,被⼴泛应⽤于情感分类领域的分类器。

下⾯简单回顾下概率论知识:1.什么是基于概率论的⽅法?通过概率来衡量事件发⽣的可能性。

概率论和统计学是两个相反的概念,统计学是抽取部分样本统计来估算总体情况,⽽概率论是通过总体情况来估计单个事件或部分事情的发⽣情况。

概率论需要已知数据去预测未知的事件。

例如,我们看到天⽓乌云密布,电闪雷鸣并阵阵狂风,在这样的天⽓特征(F)下,我们推断下⾬的概率⽐不下⾬的概率⼤,也就是p(下⾬)>p(不下⾬),所以认为待会⼉会下⾬,这个从经验上看对概率进⾏判断。

⽽⽓象局通过多年长期积累的数据,经过计算,今天下⾬的概率p(下⾬)=85%、p(不下⾬)=15%,同样的 p(下⾬)>p(不下⾬),因此今天的天⽓预报肯定预报下⾬。

这是通过⼀定的⽅法计算概率从⽽对下⾬事件进⾏判断。

2.条件概率若Ω是全集,A、B是其中的事件(⼦集),P表⽰事件发⽣的概率,则条件概率表⽰某个事件发⽣时另⼀个事件发⽣的概率。

假设事件B发⽣后事件A发⽣的概率为:设P(A)>0,则有 P(AB) = P(B|A)P(A) = P(A|B)P(B)。

设A、B、C为事件,且P(AB)>0,则有 P(ABC) = P(A)P(B|A)P(C|AB)。

朴素贝叶斯算法及其代码实现

朴素贝叶斯算法及其代码实现

朴素贝叶斯算法及其代码实现朴素贝叶斯朴素贝叶斯是经典的机器学习算法之⼀,也是为数不多的基于概率论的分类算法。

在机器学习分类算法中,朴素贝叶斯和其他绝多⼤的分类算法都不同,⽐如决策树,KNN,逻辑回归,⽀持向量机等,他们都是判别⽅法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数,要么是条件分布。

但是朴素贝叶斯却是⽣成⽅法,这种算法简单,也易于实现。

1.基本概念朴素贝叶斯:贝叶斯分类是⼀类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。

⽽朴素贝叶斯分类时贝叶斯分类中最简单,也是最常见的⼀种分类⽅法。

贝叶斯公式:先验概率P(X):先验概率是指根据以往经验和分析得到的概率。

后验概率P(Y|X):事情已经发⽣,要求这件事情发⽣的原因是由某个因素引起的可能性的⼤⼩,后验分布P(Y|X)表⽰事件X已经发⽣的前提下,事件Y发⽣的概率,叫做事件X发⽣下事件Y的条件概率。

后验概率P(X|Y):在已知Y发⽣后X的条件概率,也由于知道Y的取值⽽被称为X的后验概率。

朴素:朴素贝叶斯算法是假设各个特征之间相互独⽴,也是朴素这词的意思,那么贝叶斯公式中的P(X|Y)可写成:朴素贝叶斯公式:2,贝叶斯算法简介 贝叶斯⽅法源域它⽣前为解决⼀个“逆概”问题写的⼀篇⽂章。

其要解决的问题: 正向概率:假设袋⼦⾥⾯有N个⽩球,M个⿊球,你伸⼿进去摸⼀把,摸出⿊球的概率是多⼤ 逆向概率:如果我们事先不知道袋⼦⾥⾯⿊⽩球的⽐例,⽽是闭着眼睛摸出⼀个(或者好⼏个)球,观察这些取出来的球的颜⾊之后,那么我们可以就此对袋⼦⾥⾯的⿊⽩球的⽐例做出什么样的推测。

那么什么是贝叶斯呢?1,现实世界本⾝就是不确定的,⼈类的观察能⼒是有局限性的2,我们⽇常观察到的只是事物表明上的结果,因此我们需要提供⼀个猜测 NaiveBayes算法,⼜称朴素贝叶斯算法。

朴素:特征条件独⽴;贝叶斯:基于贝叶斯定理。

属于监督学习的⽣成模型,实现监督,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为⽀撑。

一种结合参数优化的贝叶斯文本分类算法

一种结合参数优化的贝叶斯文本分类算法

。 },*任{0, 其中}V }表示单词表的尺寸, Iv。 。 1}, 。 1 表示单词 。 在文档d 中出现, *二 ; 反之则表示 。 在文档中 。 不出现. BIM 假定对于给定的类“ 文 , 档 d 中的单词。 和。是否出现相互独立. 令 凡*表 * , 示尸 。 1}c*) , ) 可表示为 ( *二 式(1
effect iveness .
Key words simplified model; fa t na ve bayesian algorithm ; optimized parameter s l
摘 要 朴素贝叶斯算法的主要特征是分类速度快而分类精度较低 , 算法的 目 标是在传统贝叶斯文本分 类算法的前提下达到令人满意的分类精度, 并进一步提高分类速度, 算法的技术手段 包括在原有多项 式贝叶斯模型的基础上建立简化的贝叶斯实现模型, 建立仅 包含单词在类别 中信息的类别特征信息数 据库和优化 hd t n 修正因子等. 算法实验在 Re t r Z 5 8 浏试语料集上进行. 结果表明, s oe u es 1 7 与相关文献 相比, 分类速度明显高于对比算法, 且精度优于或近于相关文献的改进 贝叶斯算法, 关健词 简化模型;快速 贝叶斯算法; 参数优化
先验概率为p ( c‘ 对于任一测试文档 d , ). 其归属于 类别 : *的类条件概率为尸 d }。 . 算法描述为: 在 ( ‘ ) 训练阶段, 对每一个 d , 估计先验条件概率尸 川 。 ‘ ( c‘ )和概率 P ( c‘; 在分类阶段, ) 计算后验概率, 返回
使后验概率最大的类 , 即
中图法分类号 TP39 1
朴素贝 叶斯(nave baye , ) ‘ i s N [ 〕 B 算法将概率模型

机器学习:贝叶斯分类器(二)——高斯朴素贝叶斯分类器代码实现

机器学习:贝叶斯分类器(二)——高斯朴素贝叶斯分类器代码实现

机器学习:贝叶斯分类器(⼆)——⾼斯朴素贝叶斯分类器代码实现⼀⾼斯朴素贝叶斯分类器代码实现⽹上搜索不调⽤sklearn实现的朴素贝叶斯分类器基本很少,即使有也是结合⽂本分类的多项式或伯努利类型,因此⾃⼰写了⼀遍能直接封装的⾼斯类型NB分类器,当然与真正的源码相⽐少了很多属性和⽅法,有兴趣的可以⾃⼰添加。

代码如下(有详细注释):class NaiveBayes():'''⾼斯朴素贝叶斯分类器'''def __init__(self):self._X_train = Noneself._y_train = Noneself._classes = Noneself._priorlist = Noneself._meanmat = Noneself._varmat = Nonedef fit(self, X_train, y_train):self._X_train = X_trainself._y_train = y_trainself._classes = np.unique(self._y_train) # 得到各个类别priorlist = []meanmat0 = np.array([[0, 0, 0, 0]])varmat0 = np.array([[0, 0, 0, 0]])for i, c in enumerate(self._classes):# 计算每个种类的平均值,⽅差,先验概率X_Index_c = self._X_train[np.where(self._y_train == c)] # 属于某个类别的样本组成的“矩阵”priorlist.append(X_Index_c.shape[0] / self._X_train.shape[0]) # 计算类别的先验概率X_index_c_mean = np.mean(X_Index_c, axis=0, keepdims=True) # 计算该类别下每个特征的均值,结果保持⼆维状态[[3 4 6 2 1]]X_index_c_var = np.var(X_Index_c, axis=0, keepdims=True) # ⽅差meanmat0 = np.append(meanmat0, X_index_c_mean, axis=0) # 各个类别下的特征均值矩阵罗成新的矩阵,每⾏代表⼀个类别。

贝叶斯方法进行数据融合的代码

贝叶斯方法进行数据融合的代码

贝叶斯方法进行数据融合的代码贝叶斯方法是一种经典的统计学方法,广泛应用于数据融合问题。

数据融合是指将来自不同传感器或不同来源的数据合并在一起,以产生更准确、可靠和全面的信息。

贝叶斯方法通过将先验知识与观测数据结合起来,可以推断出最可能的后验概率分布,从而实现数据融合的目标。

在贝叶斯方法中,我们首先需要定义一个先验概率分布,表示我们对未观测到的变量的先验信念。

然后,我们根据观测数据对先验分布进行更新,得到后验概率分布。

最终,我们可以基于后验分布对未观测到的变量进行预测或推断。

下面是一个简单的贝叶斯方法的数据融合的代码例子,用Python语言实现:```pythonimport numpy as npfrom scipy.stats import norm#定义先验分布prior_mean = 10.0prior_std = 2.0prior = norm(loc=prior_mean, scale=prior_std)#观测数据data = np.array([11.2, 12.5, 10.8, 9.7])#计算后验分布posterior_mean = (prior_mean / prior_std**2 + np.sum(data) / data.size) / (1 / prior_std**2 + data.size / prior_std**2) posterior_std = np.sqrt(1 / (1 / prior_std**2 + data.size / prior_std**2))posterior = norm(loc=posterior_mean, scale=posterior_std) #预测或推断未观测变量prediction = posterior.rvs()confidence_interval = posterior.interval(0.95)print("后验分布的均值和标准差:")print("均值: ", posterior_mean)print("标准差: ", posterior_std)print("预测值: ", prediction)print("95%置信区间: ", confidence_interval)```在上述代码中,我们首先定义了先验分布对象`prior`,即我们对未观测到的变量的先验信念。

朴素贝叶斯文本分类代码(详解)

朴素贝叶斯文本分类代码(详解)

朴素贝叶斯⽂本分类代码(详解)1from numpy import zeros,array2from math import log34def loadDataSet():5#词条切分后的⽂档集合,列表每⼀⾏代表⼀个email6 postingList=[['your','mobile','number','is','award','bonus','prize'],7 ['new','car','and','house','for','my','parents'],8 ['my','dalmation','is','so','cute','I','love','him'],9 ['today','voda','number','prize', 'receive','award'],10 ['get','new','job','in','company','how','to','get','that'],11 ['free','prize','buy','winner','receive','cash']]12#由⼈⼯标注的每篇⽂档的类标签13 classVec=[1,0,0,1,0,1] #1-spam, 0-ham14return postingList,classVec15 postingList,classVec = loadDataSet()161718#统计所有⽂档中出现的词条列表19def createVocabList(dataSet):20 vocabSet=set([])21#遍历⽂档集合中的每⼀篇⽂档22for document in dataSet:23 vocabSet=vocabSet|set(document)24return list(vocabSet)25 vocabSet = createVocabList(postingList)262728#根据词条列表中的词条是否在⽂档中出现(出现1,未出现0),将⽂档转化为词条向量29def setOfWords2Vec(vocabSet,inputSet):30#新建⼀个长度为vocabSet的列表,并且各维度元素初始化为031 returnVec=[0]*len(vocabSet)32#遍历⽂档中的每⼀个词条33for word in inputSet:34#如果词条在词条列表中出现35if word in vocabSet:36#通过列表获取当前word的索引(下标)37#将词条向量中的对应下标的项由0改为138 returnVec[vocabSet.index(word)]=139else: print('the word: %s is not in my vocabulary! '%'word')40#返回inputet转化后的词条向量41return returnVec4243 trainMatrix = [setOfWords2Vec(vocabSet,inputSet) for inputSet in postingList]444546#训练算法,从词向量计算概率p(w0|ci)...及p(ci)47#@trainMatrix:由每篇⽂档的词条向量组成的⽂档矩阵48#@trainCategory:每篇⽂档的类标签组成的向量49def trainNB0(trainMatrix,trainCategory):50#获取⽂档矩阵中⽂档的数⽬51 numTrainDocs=len(trainMatrix)52#获取词条向量的长度53 numWords=len(trainMatrix[0])54#所有⽂档中属于类1所占的⽐例p(c=1)55 pAbusive=sum(trainCategory)/float(numTrainDocs)56#创建⼀个长度为词条向量等长的列表57 p0Num=zeros(numWords) #ham58 p1Num=zeros(numWords) #spam59 p0Denom=0.060 p1Denom=0.061#遍历每⼀篇⽂档的词条向量62for i in range(numTrainDocs):63#如果该词条向量对应的标签为164if trainCategory[i]==1:65#统计所有类别为1的词条向量中各个词条出现的次数66 p1Num+=trainMatrix[i]67#统计类别为1的词条向量中出现的所有词条的总数68#即统计类1所有⽂档中出现单词的数⽬69 p1Denom+=sum(trainMatrix[i])70else:71#统计所有类别为0的词条向量中各个词条出现的次数72 p0Num+=trainMatrix[i]73#统计类别为0的词条向量中出现的所有词条的总数74#即统计类0所有⽂档中出现单词的数⽬75 p0Denom+=sum(trainMatrix[i])76print(p1Num, p1Denom, p0Num,p0Denom )77#利⽤NumPy数组计算p(wi|c1)78 p1Vect=p1Num/p1Denom #为避免下溢出问题,需要改为log()79#利⽤NumPy数组计算p(wi|c0)80 p0Vect=p0Num/p0Denom #为避免下溢出问题,需要改为log()81return p0Vect,p1Vect,pAbusive8283 p0Vect,p1Vect,pAbusive= trainNB0(trainMatrix,classVec)848586#朴素贝叶斯分类函数87#@vec2Classify:待测试分类的词条向量88#@p0Vec:类别0所有⽂档中各个词条出现的频数p(wi|c0)89#@p0Vec:类别1所有⽂档中各个词条出现的频数p(wi|c1)90#@pClass1:类别为1的⽂档占⽂档总数⽐例91def classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):92#根据朴素贝叶斯分类函数分别计算待分类⽂档属于类1和类0的概率93 p1=sum(vec2Classify*p1Vec)+log(pClass1)94 p0=sum(vec2Classify*p0Vec)+log(1.0-pClass1)95if p1>p0:96return'spam'97else:98return'not spam'99100101102 testEntry=['love','my','job']103 thisDoc=array(setOfWords2Vec(vocabSet,testEntry))104print(testEntry,'classified as:',classifyNB(thisDoc,p0Vect,p1Vect,pAbusive))。

bayes分类的算法代码

bayes分类的算法代码Bayes分类算法是一种常用的机器学习算法,它基于贝叶斯定理,通过计算样本的条件概率来进行分类。

本文将介绍Bayes分类算法的基本原理和实现代码。

一、Bayes分类算法原理Bayes分类算法是一种概率模型,它基于贝叶斯定理,通过计算样本的条件概率来进行分类。

其基本原理如下:1. 假设有N个类别,C1、C2、...、CN,每个类别对应的样本集合为D1、D2、...、DN。

2. 对于待分类样本X,根据贝叶斯定理,可以计算出该样本属于每个类别的概率。

即P(Ci|X) = P(X|Ci) * P(Ci) / P(X),其中P(Ci|X)表示样本X属于类别Ci的概率,P(X|Ci)表示在样本属于类别Ci的条件下,样本X出现的概率,P(Ci)表示类别Ci出现的概率,P(X)表示样本X出现的概率。

3. 根据贝叶斯定理,可以将P(X)看做一个常数,因此只需要比较P(X|Ci) * P(Ci)的大小即可确定样本X的类别。

二、Bayes分类算法实现下面是一个简单的Bayes分类算法的实现代码:```pythonimport numpy as npdef bayes_classify(train_data, train_labels, test_data):# 计算每个类别的先验概率labels = list(set(train_labels))prior_prob = {}for label in labels:prior_prob[label] = np.sum(np.array(train_labels) == label) / len(train_labels)# 计算每个特征在每个类别下的条件概率conditional_prob = {}for label in labels:label_data = train_data[np.array(train_labels) == label]for i in range(len(label_data[0])):feature_values = set(label_data[:, i])for value in feature_values:if (i, value, label) not in conditional_prob:conditional_prob[(i, value, label)] = np.sum(label_data[:, i] == value) / len(label_data)# 对测试样本进行分类test_labels = []for test_sample in test_data:max_prob = -1max_label = ''for label in labels:prob = prior_prob[label]for i in range(len(test_sample)):if (i, test_sample[i], label) in conditional_prob:prob *= conditional_prob[(i, test_sample[i], label)]if prob > max_prob:max_prob = probmax_label = labeltest_labels.append(max_label)return test_labels```三、代码解析上述代码中,我们首先计算了每个类别的先验概率,即P(Ci),然后计算了每个特征在每个类别下的条件概率,即P(X|Ci)。

伯努利朴素贝叶斯进行中文文本分类

伯努利朴素贝叶斯进行中文文本分类伯努利朴素贝叶斯算法(Bernoulli Naive Bayes)是一种基于概率的分类器,用于处理二元特征(即特征值为0或1)的问题。

它的基础思想是将特征的条件独立性假设应用于二元特征,并利用贝叶斯定理进行分类。

对于中文文本分类,伯努利朴素贝叶斯算法的基本步骤如下:1. **特征提取**:首先,需要对中文文本进行特征提取。

这通常涉及到分词、去除停用词等预处理步骤。

然后,每个单词或n-gram可以被视为一个特征。

2. **特征表示**:在伯努利朴素贝叶斯算法中,每个特征都有一个二元值(0或1),表示该特征是否出现在文档中。

3. **概率模型**:伯努利朴素贝叶斯算法基于一个简单的概率模型,即每个特征独立地对分类结果产生影响。

因此,可以计算给定类别的条件概率,公式如下:P(C|F1,F2,...,Fn) = P(C) * P(F1|C) * P(F2|C) * ... * P(Fn|C)其中,C是类别,F1,F2,...,Fn是特征。

4. **分类**:基于最大的后验概率,伯努利朴素贝叶斯算法可以判断文本的类别。

这个过程涉及到计算每个类别的概率,并选择具有最大概率的类别作为文本的分类结果。

5. **训练**:在训练阶段,算法需要从训练语料库中学习各类别的概率和条件概率。

这些概率值可以通过统计方法获得。

6. **评估**:评估阶段通常涉及到使用测试语料库来评估分类器的性能。

常用的评估指标包括准确率、召回率和F1分数等。

需要注意的是,中文文本分类是一个复杂的任务,涉及到语言处理、文本分析和机器学习等多个领域的知识。

虽然伯努利朴素贝叶斯算法在某些情况下可以用于中文文本分类,但它可能不是最有效的算法。

更先进的算法和技术(如深度学习)通常在中文文本分类任务中表现更好。

贝叶斯分类分类算法

贝叶斯分类分类算法贝叶斯分类(Bayesian classification)是一种基于贝叶斯定理的分类算法,它将特征之间的条件概率和类别的先验概率组合起来,通过计算后验概率来确定一个样本属于其中一类别的概率。

贝叶斯分类算法在文本分类、垃圾邮件过滤和情感分析等领域都有广泛应用。

贝叶斯分类的核心思想是通过条件概率来计算后验概率。

在分类问题中,我们要将一个样本进行分类,假设有 n 个特征变量 x1, x2, ..., xn,每个特征变量有 k 个可能的取值,将样本分为 m 个类别 C1,C2, ..., Cm。

需要计算的是给定样本的特征值 x1, x2, ..., xn 下,它属于每个类别的概率 P(C1,x1, x2, ..., xn), P(C2,x1, x2, ..., xn), ..., P(Cm,x1, x2, ..., xn)。

根据贝叶斯定理,P(Ci,x1, x2, ..., xn) = P(Ci) * P(x1,x2, ..., xn,Ci) / P(x1, x2, ..., xn)。

其中,P(Ci) 是类别 Ci 的先验概率,P(x1, x2, ..., xn,Ci) 是样本 x1, x2, ..., xn 在给定类别 Ci 的条件下的概率,P(x1, x2, ..., xn) 是样本 x1, x2, ..., xn出现的概率。

贝叶斯分类算法的核心是学习类别的先验概率和特征之间的条件概率。

通常采用的方法是从已有数据中估计这些概率。

假设训练数据集中有 N个样本,属于类别 Ci 的样本有 Ni 个。

类别 Ci 的先验概率可以估计为P(Ci) = Ni / N。

而特征之间的条件概率可以通过计算样本中特征的频率来估计,比如计算属于类别 Ci 的样本中特征 xj 取值为 a 的频率 P(xj = a,Ci) = Nij / Ni,其中 Nij 是属于类别 Ci 的样本中特征 xj 取值为 a 的个数。

贝叶斯算法实现文本分类器


( )引言 一
上世纪九十年代 以来 ,计算机和信息技术发展迅速 ,各 类信息以级数倍的速度在 I tr e n e n t上广泛传播 ,尤其 是种类
贝叶斯公式定义为:设试验 E的样本空间为 A 为 E的事 ,A
件,

繁多的文本信息 。因此如何在众多文本 中掌握最有效 的信息
始终是信 息处理的 目标 。基于人工智能技术的文本分类系统 能依据文本 的语义将大 量的文本 自动分 门别类,从而帮助人 们更好地把握 文本 信息。近 年来,文本分类技术 已经逐渐与 搜 索引擎 、信 息推送 、信 息过滤等信息处理技术相结合,有 效地提高 了信 息服务 的质量 。
设 S为试 验 E的样 本 空 间 ,
, ,.. . .
为 E的一 组 事 件 , u = 则称
 ̄ BB , ≠ J , , , , u u f j= , J … n:

cq . ,) 【,, 为给定的类别体系。 . …. 求解 向量
, , . .…
【 摘 要 】 文本 自动 分 类 系统是 信 息 处理 的重 要 研 究 方 向 ,它是指在给定的分类体 系下 ,根据 文本 的内容 自动判别文本类
别的过程。文章将对基 于贝叶斯算法的文本分类技 术进 行论述 。 【 关键词】贝叶斯算法 ;文本分类;模 式识别
【 图分 类号 】T 3 1 中 P0. 6 【 献 标 识码 】A 文 【 章 编 号 】 10 — 112 1)2 0 1— 3 文 0 8 1 5(0 1 — O 8 0 0 则 P = ( 马) ( +P l ) ( ) () P A1 P 且) P +…. + I )( 。 尸 )
21 0 1年第 2期 ( 总第 1 8期 ) 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package com.vista;import java.io.IOException;import jeasy.analysis.MMAnalyzer;/*** 中文分词器*/public class ChineseSpliter{/*** 对给定的文本进行中文分词* @param text 给定的文本* @param splitToken 用于分割的标记,如"|"* @return 分词完毕的文本*/public static String split(String text,String splitToken){String result = null;MMAnalyzer analyzer = new MMAnalyzer();try{result = analyzer.segment(text, splitToken);}catch (IOException e){e.printStackTrace();}return result;}}停用词处理去掉文档中无意思的词语也是必须的一项工作,这里简单的定义了一些常见的停用词,并根据这些常用停用词在分词时进行判断。

package com.vista;/*** 停用词处理器* @author phinecos**/public class StopWordsHandler{private static String stopWordsList[] ={"的", "我们","要","自己","之","将","“","”",",","(",")","后","应","到","某","后","个","是","位","新","一","两","在","中","或","有","更","好",""};//常用停用词public static boolean IsStopWord(String word){for(int i=0;i<stopWordsList.length;++i){if(word.equalsIgnoreCase(stopWordsList[i]))return true;}return false;}}训练集管理器我们的系统首先需要从训练样本集中得到假设的先验概率和给定假设下观察到不同数据的概率。

package com.vista;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.Properties;import java.util.logging.Level;import java.util.logging.Logger;/*** 训练集管理器*/public class TrainingDataManager{private String[] traningFileClassifications;//训练语料分类集合private File traningTextDir;//训练语料存放目录private static String defaultPath = "D:\\TrainningSet";public TrainingDataManager(){traningTextDir = new File(defaultPath);if (!traningTextDir.isDirectory()){throw new IllegalArgumentException("训练语料库搜索失败! [" +defaultPath + "]");}this.traningFileClassifications = traningTextDir.list(); }/*** 返回训练文本类别,这个类别就是目录名* @return训练文本类别*/public String[] getTraningClassifications(){return this.traningFileClassifications;}/*** 根据训练文本类别返回这个类别下的所有训练文本路径(full path)* @param classification 给定的分类* @return给定分类下所有文件的路径(full path)*/public String[] getFilesPath(String classification){File classDir = new File(traningTextDir.getPath() +File.s eparator +classification);String[] ret = classDir.list();for (int i = 0; i < ret.length; i++){ret[i] = traningTextDir.getPath() +File.separator +cl assification +File.separator +ret[i];}return ret;}/*** 返回给定路径的文本文件内容* @param filePath 给定的文本文件路径* @return文本内容* @throws java.io.FileNotFoundException* @throws java.io.IOException*/public static String getText(String filePath) throws FileNotF oundException,IOException{InputStreamReader isReader =new InputStreamReader(new Fil eInputStream(filePath),"GBK");BufferedReader reader = new BufferedReader(isReader);String aline;StringBuilder sb = new StringBuilder();while ((aline = reader.readLine()) != null){sb.append(aline + " ");}isReader.close();reader.close();return sb.toString();}/*** 返回训练文本集中所有的文本数目* @return训练文本集中所有的文本数目*/public int getTrainingFileCount(){int ret = 0;for (int i = 0; i < traningFileClassifications.length; i+ +){ret +=getTrainingFileCountOfClassification(traningFil eClassifications[i]);}return ret;}/*** 返回训练文本集中在给定分类下的训练文本数目* @param classification 给定的分类* @return训练文本集中在给定分类下的训练文本数目*/public int getTrainingFileCountOfClassification(String classi fication){File classDir = new File(traningTextDir.getPath() +File.s eparator +classification);return classDir.list().length;}/*** 返回给定分类中包含关键字/词的训练文本的数目* @param classification 给定的分类* @param key 给定的关键字/词* @return给定分类中包含关键字/词的训练文本的数目*/public int getCountContainKeyOfClassification(String classifi cation,String key){int ret = 0;try{String[] filePath = getFilesPath(classification);for (int j = 0; j < filePath.length; j++){String text = getText(filePath[j]);if (text.contains(key)){ret++;}}}catch (FileNotFoundException ex){Logger.getLogger(TrainingDataManager.class.getName()).log (Level.SEVERE, null,ex);}catch (IOException ex){Logger.getLogger(TrainingDataManager.class.getName()) .log(Level.SEVERE, null,ex);}return ret;}}先验概率先验概率是我们需要计算的两大概率值之一package com.vista;/*** 先验概率计算* <h3>先验概率计算</h3>* P(c<sub>j</sub>)=N(C=c<sub>j</sub>)<b>/</b>N <br>* 其中,N(C=c<sub>j</sub>)表示类别c<sub>j</sub>中的训练文本数量;* N表示训练文本集总数量。

相关文档
最新文档