[原]数据挖掘-基于Kmeans算法、MBSAS算法及DBSCAN算法的newsgroup18828文本聚类器的JAVA实现(上)
2012-4-18阅读10359 评论26
(update 2012.12.28 关于本项目下载及运行的常见问题 FAQ见 newsgroup18828文本分类器、文本聚类器、关联分析频繁模式挖掘算法的Java实现工程下载及运行FAQ ) 本文要点如下:
对newsgroup文档集进行预处理,按照DF法及SVD分解法抽取特征词,实现降维 实现了K-Means,MBSAS,DBSCAN三种聚类算法 用weka工具进行newsgroup文档聚类
计算各种算法聚类的熵,进行算法评价 1、newsgroup文档集预处理
newsgroup是常用的数据挖掘实验数据。文本预处理主要包括单词分片、去除标点等无关符号、去停用词等等,相关详细介绍见我的另一篇博文数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上),此处只给出文本预处理和向量化不同的部分代码。 文本预处理类DataPreProcess.java package com.pku.yangliu; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; /** * Newsgroups文档集预处理类 * @author yangliu * @qq 772330184 * @mail yang.liu@pku.edu.cn */ public class DataPreProcess { /**输入文件调用处理数据函数 * @param strDir newsgroup文件目录的绝对路径 * @throws IOException */ public void doProcess(String strDir) throws IOException{ File fileDir = new File(strDir); if(!fileDir.exists()){ System.out.println(\ } } return; String subStrDir = strDir.substring(strDir.lastIndexOf('/')); String dirTarget = strDir + File fileTarget = new File(dirTarget); if(!fileTarget.exists()){//注意processedSample需要先建立目录建 } File[] srcFiles = fileDir.listFiles(); String[] stemFileNames = new String[srcFiles.length]; for(int i = 0; i < srcFiles.length; i++){ } //下面调用stem算法 if(stemFileNames.length > 0 && stemFileNames[0] != null){ } Stemmer.porterMain(stemFileNames); String fileFullName = srcFiles[i].getCanonicalPath(); String fileShortName = srcFiles[i].getName(); if(!new File(fileFullName).isDirectory()){//确认子文 } else { } fileFullName = doProcess(fileFullName); System.out.println(\StringBuilder stringBuilder = new stringBuilder.append(dirTarget + \createProcessFile(fileFullName, stemFileNames[i] = stringBuilder.toString(); fileTarget.mkdir(); \出来,否则会报错,因为母目录不存在 件名不是目录如果是可以再次递归调用 preprocess:\StringBuilder(); fileShortName); stringBuilder.toString()); fileFullName.replace(\/**进行文本预处理生成目标文件 * @param srcDir 源文件文件目录的绝对路径 * @param targetDir 生成的目标文件的绝对路径 * @throws IOException */ private static void createProcessFile(String srcDir, String targetDir) } /**对每行字符串进行处理,主要是词法分析、去停用词和stemming * @param line 待处理的一行字符串 * @param ArrayList