资源简介

基于贝叶斯分类的中文垃圾信息分类识别核心核心代码,可直接运行的源程序。public void loadTrainingDataChinies(File trainingDataFile,String infoType) { //加载中文分词其 NLPIR.init("lib"); // System.out.println(trainingDataFile.isFile()+"=============="); // 尝试加载学习数据文件 try { // 针对学习数据文件构建缓存的字符流,利用其可以采用行的方式读取学习数据 BufferedR

资源截图

代码片段和文件信息

package spam;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;

import util.nlpir.NLPIR;

/**
 * 


 * title: BayesUtil
 * 


 * 


 * Description:利用贝叶斯分类判定垃圾信息的核心工具类
 * 


 * 



 * 
 * @author zlq
 * @version 1.0
 */
public class BayesUtil {

/**
 * 合法信息数量
 * */
private int hamNum;
/**
 * 垃圾信息数量
 * */
private int spamNum;

/**
 * 合法信息字符串集合
 * */
private ArrayList hams = new ArrayList();
/**
 * 非法信息字符串结合
 * */
private ArrayList spams = new ArrayList();

/**
 * 保存分词结果对应出现在合法信息和非法信息中的次数的Map集合,WordInfo类保存了单一的分词结果在非法信息和和合法信息中分别出现的次数
 * */
private HashMap infoMap = new HashMap();

/**
 * 消息中出现特定字符串出现在合法信息中的比例
 * */
private HashMap wordHamPossibility = new HashMap();
/**
 * 消息中出现特定字符串出现在非法信息中的比例
 * */
private HashMap wordSpamPossibility = new HashMap();

/**
 * 加载贝叶斯分类需要的学习数据
 * 
 * @param trainingDataFile
 *            为贝叶斯分类判定垃圾信息所提供的学习数据文件
 * */
public void loadTrainingData(File trainingDataFile) {
System.out.println(trainingDataFile.isFile()+“==============“);
// 尝试加载学习数据文件
try {
// 针对学习数据文件构建缓存的字符流,利用其可以采用行的方式读取学习数据
BufferedReader fileReader = new BufferedReader(new FileReader(
trainingDataFile));
// 定义按照行的方式读取学习数据的临时变量
String data = ““;
// 循环读取学习文件中的数据
while ((data = fileReader.readLine()) != null) {
// 按照格式分割字符串,将会分割成两部分,第一部分为ham或spam用于说明本行数据是有效消息还是垃圾消息,第二部分为消息体本身
String[] datas = data.split(“ “);
// 对消息体本身进行简单分词(本学习数据均为英文数据,因此可以利用空格进行自然分词,但是直接用空格分割还是有些简单粗暴,因为没有处理标点符号,大家可以对其进行扩展,先用正则表达式处理标点符号后再进行分词,也可以扩展加入中文的分词功能)
String[] words = datas[1].split(“ “);
// 判定本条消息是否为有效消息
if (“ham“.equals(datas[0])) {
// 如果是有效消息,则将其加入有效消息集合
hams.add(datas[1]);
// 遍历消息的分词结果
for (String word : words) {
// 如果保存单次的集合中已经存在该单词
if (infoMap.containsKey(word)) {
// 则将该单次在有效消息中出现的次数加1
infoMap.get(word).setHamNum(
infoMap.get(word).getHamNum() + 1);
// 如果以前没有出现过该单词
} else {
// 创建信息的单词描述信息对象
WordInfo info = new WordInfo();
// 设置单词本体
info.setWord(word);
// 设置在有效消息中出现的次数为1
info.setHamNum(1);
// 加入单词信息集合
infoMap.put(word info);
}

}
// 如果该消息为垃圾消息
} else {
// 将其加入垃圾消息集合
spams.add(datas[1]);
// 循环遍历分词结果
for (String word : words) {
// 如果保存单次的集合中已经存在该单词
if (infoMap.containsKey(word)) {
// 则将该单次在垃圾消息中出现的次数加1
infoMap.get(word).setSpamNum(
infoMap.get(word).getSpamNum() + 1);
// 如果以前没有出现过该单词
} else {
// 创建信息的单词描述信息对象
WordInfo info = new WordInfo();
// 设置单词本体
info.setWord(


评论

共有 条评论