本站首页    管理页面    写新日志    退出

公告

宿命宽恕轮回修仙


我的分类(专题)

日志更新

最新评论

留言板

链接

-----------数据挖掘-----------

Data Mining Community's Top Resource(KDnuggets)
Information Management(DMReview)
STATISTICA Software(StatSoft)
IIR USA(CRM Community)
Editor's Picks(CustomerThink)
Data Mining Group
ACM SIGKDD(DM顶级国际会议)
SourceForge.NET(Open Source Software)

SAS
SPSS
KXEN
WEKA
AlphaMiner
RapidMiner

中国万维网联盟(W3CHINA)
中国统计网
数据库专委会
数据挖掘研究院(China Data Mining Research)
LAMDA机器学习与数据挖掘研究组
北京大学计算语言学研究所
北京大学Dlib组
哈工大信息检索研究室论坛
神威学术资源中心

CRMSKY
数据挖掘学习交流论坛
计算机科学论坛
数据分析论坛
Weka中文站
R语言中文论坛
SAS中文论坛

ECT 584

-----------同行博客-----------

数据挖掘者(IDMer)
数据挖掘青年(DMman)
数据挖掘斗士(DMFighter)
神威异度空间
一维空间
不准阁
不断学习
欧燊怡
Datamining&BI
王义
Koala++

-----------学者信息-----------

Jiawei Han(韩家炜)
张鹏
曾元顯
吴俊杰

-----------回忆过去-----------

www.5im.cn
www.ustbhrm.com
www.finance3399.cn
www.xueyuanlu.cn
www.ccesr.com
econometrics.buaa.edu.cn

 


Blog信息
blog名称:宿命宽恕轮回修仙
日志总数:18
评论数量:3
留言数量:0
访问次数:114687
建立时间:2009年3月18日

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930




[WEKA](转)利用Weka实现文本分类
文章收藏,  软件技术

宿命宽恕轮回修仙 发表于 2009/6/5 23:14:09

来源:http://www.w3china.org/blog/more.asp?name=DMman&id=25987 1 介绍:嵌入式机器学习,在自己的算法中调用Weka现文本分类,是一个小的数据挖掘程序,虽然实用价值不是很大,但对于Weka的理解和使用是有帮助的。本例子来自《数据挖掘:实用机器学习技术》第2版(好像是倒数第三章)。大家可以到http://blogger.org.cn/blog/message.asp?name=DMman#23691 下载该书察看对算法的详细解释。算法中作了详细的注释,虽然是英文的,但还是比较简单。下面对例子的使用作了浅显的介绍,有兴趣的朋友可以研究。 2 功能:使用weka中的j48分类器实现了文本分类的一个小程序。文本文件通过weka的过滤器StringToWordVector预处理。 3 注意:把weka.jar加入你的classpath中,才可以通过编译。 4 使用方法:命令行参数: -t 文本文件路径 -m 你的模型文件路径 -c 可选,类别(hit 或 miss)如果提供了-c则用于训练,否则被模型分类,输出该文本的类型(hit或miss)  模型是动态建立的,第一次使用命令行必须指定-c参数,才可以建立模型。1) 建立模型>java MessageClassifier -t data/1.bmp -m myModel -c hit可以看到myModel建立了。然后继续训练一下这个模型。使用的文本实例越多,模型的分类性能越好>java MessageClassifier -t data/2.bmp -m myModel -c hit>java MessageClassifier -t data/1.gif -m myModel -c miss......2) 使用模型分类有了模型,就可以使用它为文本文件分类了,如>java MessageClassifier -t data/2.gif -m myModel 3) 可以使用提供-c参数的命令继续完善模型   原文件MessageClassifier .java /*** Java program for classifying text messages into two classes.*/import weka.core.Attribute;import weka.core.Instance;import weka.core.Instances;import weka.core.FastVector;import weka.core.Utils;import weka.classifiers.Classifier;import weka.classifiers.trees.J48;import weka.filters.Filter;import weka.filters.unsupervised.attribute.StringToWordVector;import java.io.*;public class MessageClassifier implements Serializable {/* The training data gathered so far. */private Instances m_Data = null;/* The filter used to generate the word counts. */private StringToWordVector m_Filter = new StringToWordVector();/* The actual classifier. */private Classifier m_Classifier = new J48();/* Whether the model is up to date. */private boolean m_UpToDate;/*** Constructs empty training dataset.*/public MessageClassifier() throws Exception {String nameOfDataset = "MessageClassificationProblem";// Create vector of attributes.FastVector attributes = new FastVector(2);// Add attribute for holding messages.attributes.addElement(new Attribute("Message", (FastVector)null));// Add class attribute.FastVector classValues = new FastVector(2);classValues.addElement("miss");classValues.addElement("hit");attributes.addElement(new Attribute("Class", classValues));// Create dataset with initial capacity of 100, and set index of class.m_Data = new Instances(nameOfDataset, attributes, 100);m_Data.setClassIndex(m_Data.numAttributes() - 1);}/*** Updates data using the given training message.*/public void updateData(String message, String classValue) throws Exception {// Make message into instance.Instance instance = makeInstance(message, m_Data);// Set class value for instance.instance.setClassValue(classValue);// Add instance to training data.m_Data.add(instance);m_UpToDate = false;}/*** Classifies a given message.*/public void classifyMessage(String message) throws Exception {// Check whether classifier has been built.if (m_Data.numInstances() == 0) {////throw new Exception("No classifier available.");}// Check whether classifier and filter are up to date.if (!m_UpToDate) { // Initialize filter and tell it about the input format.m_Filter.setInputFormat(m_Data);// Generate word counts from the training data.Instances filteredData = Filter.useFilter(m_Data, m_Filter);// Rebuild classifier.m_Classifier.buildClassifier(filteredData);m_UpToDate = true;}// Make separate little test set so that message// does not get added to string attribute in m_Data.Instances testset = m_Data.stringFreeStructure();// Make message into test instance.Instance instance = makeInstance(message, testset);// Filter instance.m_Filter.input(instance);Instance filteredInstance = m_Filter.output();// Get index of predicted class value.double predicted = m_Classifier.classifyInstance(filteredInstance);// Output class value.System.err.println("Message classified as : " +m_Data.classAttribute().value((int)predicted));}/*** Method that converts a text message into an instance.*/private Instance makeInstance(String text, Instances data) {// Create instance of length two.Instance instance = new Instance(2);// Set value for message attributeAttribute messageAtt = data.attribute("Message");instance.setValue(messageAtt, messageAtt.addStringValue(text));// Give instance access to attribute information from the dataset.instance.setDataset(data);return instance;}/*** Main method.*/public static void main(String[] options) {try {// Read message file into string.String messageName = Utils.getOption('t', options);if (messageName.length() == 0) {throw new Exception("Must provide name of message file.");}FileReader m = new FileReader(messageName);StringBuffer message = new StringBuffer(); int l;while ((l = m.read()) != -1) {message.append((char)l);}m.close();// Check if class value is given.String classValue = Utils.getOption('c', options);// If model file exists, read it, otherwise create new one.String modelName = Utils.getOption('m', options);if (modelName.length() == 0) {throw new Exception("Must provide name of model file.");}MessageClassifier messageCl;try {ObjectInputStream modelInObjectFile =new ObjectInputStream(new FileInputStream(modelName));messageCl = (MessageClassifier) modelInObjectFile.readObject();modelInObjectFile.close();} catch (FileNotFoundException e) {messageCl = new MessageClassifier();}// Check if there are any options leftUtils.checkForRemainingOptions(options);// Process message.if (classValue.length() != 0) {messageCl.updateData(message.toString(), classValue);} else {messageCl.classifyMessage(message.toString());}// Save message classifier object.ObjectOutputStream modelOutObjectFile =new ObjectOutputStream(new FileOutputStream(modelName));modelOutObjectFile.writeObject(messageCl);modelOutObjectFile.close();} catch (Exception e) {e.printStackTrace();}}} 下载源码:500)this.width=500'>500)this.width=500" border=0>文本分类算法.rar


阅读全文(2682) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144770350 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号