package NaviveBayesClassify;java
import java.io.BufferedReader;app
import java.io.File;ui
import java.io.FileInputStream;this
import java.io.FileNotFoundException;.net
import java.io.IOException;get
import java.io.InputStreamReader;io
//import java.util.Properties;class
import java.util.logging.Level;import
import java.util.logging.Logger;file
/**
* 訓練集管理器
*/
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.separator +classification);
String[] ret = classDir.list();
for (int i = 0; i < ret.length; i++)
{
ret[i] = traningTextDir.getPath() +File.separator +classification +File.separator +ret[i];
}
return ret;
}
/**
* 返回給定路徑的文本文件內容
* @param filePath 給定的文本文件路徑
* @return 文本內容
* @throws java.io.FileNotFoundException
* @throws java.io.IOException
*/
public static String getText(String filePath) throws FileNotFoundException,IOException
{
InputStreamReader isReader =new InputStreamReader(new FileInputStream(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(traningFileClassifications[i]);
}
return ret;
}
/**
* 返回訓練文本集中在給定分類下的訓練文本數目
* @param classification 給定的分類
* @return 訓練文本集中在給定分類下的訓練文本數目
*/
public int getTrainingFileCountOfClassification(String classification)
{
File classDir = new File(traningTextDir.getPath() +File.separator +classification);
return classDir.list().length;
}
/**
* 返回給定分類中包含關鍵字/詞的訓練文本的數目
* @param classification 給定的分類
* @param key 給定的關鍵字/詞
* @return 給定分類中包含關鍵字/詞的訓練文本的數目
*/
public int getCountContainKeyOfClassification(String classification,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;
}
}