Apache Mahout:入门

最近,我有一个有趣的问题要解决:如何使用自动化对不同来源的文本进行分类? 前一段时间,我读到一个有关该项目以及许多其他文本分析工作的项目– Apache Mahout 。 尽管它不是一个非常成熟的版本(当前版本为0.4 ),但它功能强大且可扩展。 在另一个出色的项目Apache Hadoop的基础上 ,它能够分析大量数据集。

因此,我做了一个小项目,以了解Apache Mahout的工作方式。 我决定使用Apache Maven 2来管理所有依赖关系,因此我将首先从POM文件开始。

<!--?xml version="1.0" encoding="UTF-8"?-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelversion>4.0.0</modelversion><groupid>org.acme</groupid><artifactid>mahout</artifactid><version>0.94</version><name>Mahout Examples</name><description>Scalable machine learning library examples</description><packaging>jar</packaging><properties><project.build.sourceencoding>UTF-8</project.build.sourceencoding><apache.mahout.version>0.4</apache.mahout.version></properties><build><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-compiler-plugin</artifactid><configuration><encoding>UTF-8</encoding><source>1.6<target>1.6</target><optimize>true</optimize></configuration></plugin></plugins></build><dependencies><dependency><groupid>org.apache.mahout</groupid><artifactid>mahout-core</artifactid><version>${apache.mahout.version}</version></dependency><dependency><groupid>org.apache.mahout</groupid><artifactid>mahout-math</artifactid><version>${apache.mahout.version}</version></dependency><dependency><groupid>org.apache.mahout</groupid><artifactid>mahout-utils</artifactid><version>${apache.mahout.version}</version></dependency><dependency><groupid>org.slf4j</groupid><artifactid>slf4j-api</artifactid><version>1.6.0</version></dependency><dependency><groupid>org.slf4j</groupid><artifactid>slf4j-jcl</artifactid><version>1.6.0</version></dependency></dependencies>
</project>

然后,我研究了可用于文本分类问题的Apache Mahout示例和算法。 最简单,最准确的方法是朴素贝叶斯分类器 。 这是一个代码片段:

package org.acme;import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileReader;
import java.util.List;import org.apache.hadoop.fs.Path;
import org.apache.mahout.classifier.ClassifierResult;
import org.apache.mahout.classifier.bayes.TrainClassifier;
import org.apache.mahout.classifier.bayes.algorithm.BayesAlgorithm;
import org.apache.mahout.classifier.bayes.common.BayesParameters;
import org.apache.mahout.classifier.bayes.datastore.InMemoryBayesDatastore;
import org.apache.mahout.classifier.bayes.exceptions.InvalidDatastoreException;
import org.apache.mahout.classifier.bayes.interfaces.Algorithm;
import org.apache.mahout.classifier.bayes.interfaces.Datastore;
import org.apache.mahout.classifier.bayes.model.ClassifierContext;
import org.apache.mahout.common.nlp.NGrams;public class Starter {public static void main( final String[] args ) {final BayesParameters params = new BayesParameters();params.setGramSize( 1 );params.set( "verbose", "true" );params.set( "classifierType", "bayes" );params.set( "defaultCat", "OTHER" );params.set( "encoding", "UTF-8" );params.set( "alpha_i", "1.0" );params.set( "dataSource", "hdfs" );params.set( "basePath", "/tmp/output" );try {Path input = new Path( "/tmp/input" );TrainClassifier.trainNaiveBayes( input, "/tmp/output", params );Algorithm algorithm = new BayesAlgorithm();Datastore datastore = new InMemoryBayesDatastore( params );ClassifierContext classifier = new ClassifierContext( algorithm, datastore );classifier.initialize();final BufferedReader reader = new BufferedReader( new FileReader( args[ 0 ] ) );String entry = reader.readLine();while( entry != null ) {List< String > document = new NGrams( entry, Integer.parseInt( params.get( "gramSize" ) ) ).generateNGramsWithoutLabel();ClassifierResult result = classifier.classifyDocument( document.toArray( new String[ document.size() ] ), params.get( "defaultCat" ) );          entry = reader.readLine();}} catch( final IOException ex ) {ex.printStackTrace();} catch( final InvalidDatastoreException ex ) {ex.printStackTrace();}}
}

这里有一个重要的注意事项:开始分类之前必须教系统。 为此,有必要提供不同文本分类的示例(更多–更好)。 它应该是简单的文件,其中每一行都以用制表符分隔的类别与文本本身开头。 铁

SUGGESTION  That's a great suggestion
QUESTION  Do you sell Microsoft Office?
...

您可以提供更多的文件,可以获得更精确的分类。 所有文件都必须放在“ / tmp / input”文件夹中,它们将首先由Apache Hadoop处理。 :)

参考: JCG合作伙伴的 Apache Mahout入门   Andri Redko {devmind}的 Andrey Redko。


翻译自: https://www.javacodegeeks.com/2012/02/apache-mahout-getting-started.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javascript中最常用的55个经典技巧(转)

1. οncοntextmenu"window.event.returnValuefalse" 将彻底屏蔽鼠标右键 <table border οncοntextmenureturn(false)><td>no</table> 可用于Table 2. <body onselectstart"return false"> 取消选取、防止复制 3. οnpaste"…

向数组添加元素 java_java如何向数组里添加元素

向数组里添加一个元素怎么添加&#xff0c;这儿总结有三种方法&#xff1a;1、一般数组是不能添加元素的&#xff0c;因为他们在初始化时就已定好长度了&#xff0c;不能改变长度。但有个可以改变大小的数组为ArrayList&#xff0c;即可以定义一个ArrayList数组&#xff0c;然后…

JBoss Drools –入门

这篇文章是关于我如何掌握JBoss Drools的 。 其背后的原因是&#xff1a;SAP收购了我公司当前的规则引擎&#xff0c;而Drools是我们将寻找的另一种选择&#xff0c;只要有人掌握了概念验证的技能即可。 尽管似乎有大量的文档&#xff0c;但是我总是会通过示例来发现它是有帮助…

android使用bintray发布aar到jcenter

前言 这两天心血来潮突然想把自己的android library的aar放到jcenter里面&#xff0c;这样一来自己便可以在任何时间任何地点通过internet得到自己的library的引用了&#xff0c;况且现在android studio已经默认使用jcenter的repositories作为依赖来源&#xff0c;以前的mavenc…

Java不是文明语言吗?

几周前&#xff0c;我有机会学习iOS编程。 我的老板认为我更像是“计算机科学家”&#xff0c;而不是开发人员&#xff0c;这意味着我可以将自己的知识应用于开发一两个iPad应用程序–我要做的就是学习Objective-C&#xff0c; iOS SDK&#xff1a;到底有多难&#xff1f; 尽管…

PHP 进程详解

PHP 进程详解PHP 进程详解 如下内容从《操作系统精髓与设计原理》中总结提炼得出&#xff0c;删除了大部分对于理解进程有干扰的文字&#xff0c;对进程知识结构进行的梳理。几乎所有内容为按照书本上摘抄下来的&#xff0c;我目前还总结提炼不出像作者这么深刻的见解。那么就先…

35. Search Insert Position

public class Solution {public int searchInsert(int[] nums, int target) {int lennums.length;int i0;for(;i<len;i){if(nums[i]>target)break;}return i;} } 转载于:https://www.cnblogs.com/aguai1992/p/5351442.html

MySQL 后from多个表_MYSQL回顾(多表查询相关)

前言简单的数据我们可以直接从一个表中获取&#xff0c;但在真实的项目中查询符合条件的数据通常需要牵扯到多张表&#xff0c;这就不得不使用多表查询。多表查询分为多表连接查询、符合条件链接查询、子查询。多表连接查询包括内连接、外连接、全连接。符合条件连接查询本质上…

玩! 框架+ Google Guice

在我目前正在工作的项目中&#xff0c;我们开始使用Google Guice。 对于那些不知道的人&#xff0c; Google Guice是一个依赖项注入框架。 依赖项注入背后的基本思想是提供一个它依赖的类&#xff0c;而不是使依赖类负责实例化它所依赖的对象。 Play具有用于整合Guice的模块&am…

java都要caps标点_第 1 章 管理 Java CAPS 用户

第 1 章 管理 Java CAPS 用户在此处列出的主题提供了有关如何管理 Sun JavaTM Composite Application Platform Suite (Java CAPS) 中的用户的信息。如果您有任何问题&#xff0c;请参见 http://goldstar.stc.com/ 中的 Java CAPS Web 站点。管理系统信息库用户此类别包含以下用…

基于OpenCV 的美颜相机推送直播流

程序流程&#xff1a; 1.图像采集 先从opencv&#xff08;2.4.10版本&#xff09;采集回来摄像头的图像&#xff0c;是一帧一帧的 每一帧图像是一个矩阵&#xff0c;opencv中的mat 数据结构。 2.人脸的美化 人脸美化&#xff0c;我们用的皮肤检测&#xff0c;皮肤在颜色空间是特…

Linux驱动开发常用头文件

头文件目录中总共有32个.h头文件。其中主目录下有13个&#xff0c;asm子目录中有4个&#xff0c;linux子目录中有10个&#xff0c;sys子目录中有5个。这些头文件各自的功能如下&#xff1a; 1、主目录 <a.out.h>&#xff1a;a.out头文件&#xff0c;定义了a.out执行文件格…

Spring线程池服务

线程池对于执行同步和异步过程非常重要。 本文介绍如何使用Spring开发和监视线程池服务。 创建线程池已通过两种替代方法进行了说明。 二手技术 &#xff1a; JDK 1.6.0_21 Spring3.0.5 Maven的3.0.2 步骤1&#xff1a;建立已完成的专案 创建一个Maven项目&#xff0c;如下…

我的世界java村民繁殖_我的世界:Java19w08a更新,村民加强守卫,小狐狸背叛

虽然这句话很绕口&#xff0c;其实意思很简单&#xff0c;那就是之前的隐身药水没有什么用&#xff0c;该被打还是被打。因为这个可是害惨了流浪商人&#xff0c;不过这次好了&#xff0c;流浪商人在喝了隐身药水之后就能安全度过晚上了。NO.3 皮革马铠马铠是属于马的盔甲&…

欧莱雅眉笔banner个人设计

眉笔名称&#xff1a;眉笔大师三头塑形眉笔 &#xff0c;之所以没用吧这个商品名称放大&#xff0c;是我觉得它是一个名称&#xff0c;而我把自己想的广告词“出彩只需一笔” 放大不仅能凸显出这只笔的强大&#xff0c;还表示了一种有了我这支眉笔你会更出彩更漂亮&#xff0c…

使用带有注释和JQuery的Spring MVC 3的Ajax

与Ajax一起工作对我来说一直很有趣&#xff01; 是不是 &#xff1f; 我将使您轻松将Ajax与Spring MVC 3和JQuery结合使用。 这篇文章将向您说明如何在工业编码的现实生活中使用Ajax。 和往常一样&#xff0c;我们将在Spring MVC 3框架中以Ajax的实际示例为例&#xff0c;并将其…

ThinkPHP 3 的输出

一、ThinkPHP 3 的输出 &#xff08;重点&#xff09;a、通过 echo 等PHP原生的输出方式在页面中输出b、通过display方法输出想分配变量可以使用assign方法c、修改左右定界符休要修改配置文件中的配置项TMPL_L_DELIM><{, //修改左定界符TMPL_R_DELIM>}>, //修…

java百度云文件上传_关于如何在自己项目集成百度云BCE文件上传STS方案

1、 项目背景由于本人项目需要&#xff0c;需要在视频点播服务之中需要加载字幕文件(通用格式srt)&#xff0c;经过比较好几家的公有云服务&#xff0c;最后选择只有百度云提供字幕服务。字幕&#xff1a;我们通常在观看外语电影的是&#xff0c;没有国语版时候只能通过下载字幕…

Java 7 – NIO文件革命

Java 7&#xff08;“项目代币”&#xff09;已于去年7月问世。 此版本中的新增功能很有用&#xff0c;例如&#xff0c;尝试使用资源–从try块自动处理可关闭的资源&#xff0c;switch语句中的字符串&#xff0c;用于异常的multicatch以及用于使用泛型的<>运算符。 每个…

hdu 3507 Print Article(斜率优化DP)

题目链接&#xff1a;hdu 3507 Print Article 题意&#xff1a; 每个字有一个值&#xff0c;现在让你分成k段打印&#xff0c;每段打印需要消耗的值用那个公式计算&#xff0c;现在让你求最小值 题解&#xff1a; 设dp[i]表示前i个字符需要消耗的最小值&#xff0c;那么有dp[i]…