Cocos2d如何发音?

时间:2024-10-01 10:45 人气:0 编辑:招聘街

一、Cocos2d如何发音?

[ˈkəukəus tu: D](扣扣斯兔地)最后的d 为字母D的发音2D 指的是 二维(two dimension)cocos2d是一个开源框架,用于构建2D游戏、演示程序和其他图形界面交互应用等。

二、cocos2d文档

深入理解Cocos2d文档

Cocos2d是开发2D游戏的一款强大的游戏引擎,它提供了丰富的功能和灵活的工具,使开发者能够轻松地创造出令人惊叹的游戏作品。然而,对于新手开发者来说,Cocos2d的文档可能会让人感到有些困惑。在本篇博客中,我们将深入研究Cocos2d文档,帮助您更好地理解和使用这个强大的引擎。

1. Cocos2d文档的结构

Cocos2d的文档是以官方网站为主要平台进行发布和更新。您可以通过访问官方网站来获取最新的文档版本。文档主要包含以下几个部分:

  • 入门指南:介绍Cocos2d的基本概念和使用方法。
  • API参考:包含Cocos2d的各个模块和类的详细说明。
  • 教程和示例:提供一系列实用的教程和示例代码,帮助您更好地理解Cocos2d的用法。
  • 社区支持:包括用户论坛、官方博客和其他资源链接,帮助您解决开发中遇到的问题。

了解文档的结构对于快速找到需要的信息非常重要。同时,Cocos2d文档还提供了搜索功能,您可以通过关键字搜索来查找特定的内容。

2. 入门指南

入门指南是Cocos2d文档的第一部分,它为新手开发者提供了一个系统的学习路径。在入门指南中,您将学习到以下内容:

  • 安装和配置Cocos2d:包括下载和安装Cocos2d引擎以及相关的开发环境。
  • 创建新项目:介绍如何通过Cocos2d命令行工具创建新的游戏项目。
  • 基本概念:涵盖了Cocos2d的基本概念,如场景、图层、精灵和动作等。
  • 游戏逻辑:介绍如何处理用户输入、碰撞检测等游戏逻辑开发的相关知识。

通过入门指南,您将建立起对Cocos2d的基本理解,为后续的开发工作打下坚实的基础。

3. API参考

API参考是Cocos2d文档的核心部分,它提供了关于Cocos2d引擎各个模块和类的详细说明。在API参考中,您可以找到以下内容:

  • 类和模块的概述:介绍每个类和模块的基本功能和用法。
  • 成员变量和方法:列出每个类和模块的成员变量和方法,并提供详细的说明。
  • 示例代码:提供丰富的示例代码,帮助您更好地理解和使用各个类和模块。

API参考是Cocos2d文档中最重要的部分之一,它提供了丰富的信息和实例,帮助您深入理解和熟练使用Cocos2d的各个功能。

4. 教程和示例

教程和示例是Cocos2d文档中另一个非常有价值的部分。通过教程和示例,您可以学习到如何实现特定的功能或者解决常见的问题。Cocos2d文档中的教程和示例包括但不限于以下内容:

  • 游戏开发教程:从头开始构建一个完整的游戏项目,介绍游戏开发的各个方面。
  • 特定功能实现:包括碰撞检测、动画效果、场景切换等特定功能的实现方法。
  • 最佳实践:介绍一些Cocos2d开发的最佳实践,帮助您写出高效、可维护的代码。

通过教程和示例,您可以通过实际的代码和案例加深对Cocos2d的理解,提高自己的开发能力。

5. 社区支持

Cocos2d拥有一个强大的社区支持,您可以通过访问官方网站的社区支持页面来获取更多的资源和帮助。社区支持包括以下内容:

  • 用户论坛:您可以在论坛中与其他开发者交流经验、提出问题以及分享您的作品。
  • 官方博客:官方博客发布了Cocos2d的最新动态、开发技巧和使用建议。
  • 其他资源链接:包括开发工具、第三方库、插件等相关资源的链接。

通过社区支持,您可以扩展自己的知识和技能,解决开发过程中遇到的问题,还可以结识到来自世界各地的其他Cocos2d开发者。

总结

Cocos2d文档是学习和使用Cocos2d引擎的重要工具。通过深入理解Cocos2d文档的结构和内容,您将更好地掌握这个强大的游戏引擎,实现您的创意和梦想。当您遇到问题或者需要更多帮助时,不要忘记利用Cocos2d社区支持的资源,与其他开发者一起成长和进步。祝愿您在Cocos2d的开发之路上取得巨大的成功!

三、cocos2d 文档

欢迎来到本篇博客,今天我们将聚焦于Cocos2d文档。无论您是初学者还是有经验的开发者,文档是学习和使用Cocos2d游戏引擎的重要资源。本文将引导您了解Cocos2d文档的重要性以及如何利用文档来提升您的开发效率。

1. 为什么需要Cocos2d文档?

Cocos2d是一个功能强大且广受欢迎的游戏开发框架,但它也是一个复杂的工具。文档为使用Cocos2d的开发者提供了必要的指导和资源,以便更好地理解框架的各个方面。文档包含了关于Cocos2d的详细说明、示例代码、API参考等重要信息。

使用文档可以帮助您快速入门并提高开发效率。无论您是在探索Cocos2d的基本概念还是处理高级特性,文档都是您的良好指南。

2. 如何使用Cocos2d文档

使用Cocos2d文档需要一些技巧,下面是一些利用文档的实用建议:

  • 阅读官方文档:首先,要确保阅读官方Cocos2d文档。官方文档包含了最新更新和详细的说明,是您学习Cocos2d的最佳途径。
  • 参考示例代码:文档中通常包含了示例代码,这些代码对于理解特定功能或使用Cocos2d的最佳实践非常有帮助。阅读并分析示例代码可以加深对Cocos2d的理解。
  • 查找API参考:当您需要了解Cocos2d引擎的特定类或方法时,API参考是您的首要选择。API参考提供了详细的说明和示例,帮助您正确地使用Cocos2d的各种功能。
  • 参与社区:除了官方文档,Cocos2d社区也是一个宝贵的资源。在社区中,您可以与其他开发者交流经验、提问问题,并从他人的经验中学习。参与社区可以扩大您的知识圈并解决开发中遇到的疑惑。

3. 如何优化使用Cocos2d文档的效果

以下是一些技巧,可帮助您更有效地利用Cocos2d文档:

  • 结合实践:仅仅阅读文档是不够的,将所学知识与实践结合起来才能真正理解和掌握Cocos2d。在开发过程中,不断尝试文档中的示例代码,并应用到您自己的项目中。
  • 建立书签和笔记:当您发现文档中有重要的内容时,不妨在浏览器中添加书签或记录下来。同时,在学习过程中,写下自己的笔记和理解,这将帮助您更好地回顾和复习所学内容。
  • 跟踪文档更新:Cocos2d不断更新和发展,新的功能、改进和修复也随之而来。保持跟踪官方文档的更新,可以了解最新的改动和新功能,使您的开发工作保持在最新的状态。

4. Cocos2d文档的重要性总结

Cocos2d文档对于开发Cocos2d游戏的人们来说是一个宝贵的资源。它提供了全面的指导、示例代码和API参考,帮助您更好地理解和应用Cocos2d的各个方面。通过阅读官方文档、查看示例代码、参考API文档以及参与社区,您可以更快地掌握Cocos2d的技巧和技术,从而提高开发效率和质量。

因此,无论您是刚起步还是有一定经验的Cocos2d开发者,花费时间和精力去借助Cocos2d文档进行学习是非常值得的。希望这篇博客能够帮助您更好地利用Cocos2d文档,并取得开发上的成功。

四、会unity学cocos2d

Unity与Cocos2d-X:哪个更适合新手游戏开发者?

作为游戏开发领域两大知名引擎,Unity和Cocos2d-X都拥有自己的一席之地。对于初学者来说,选择哪个引擎进行学习和开发是一个重要的抉择。本文将从新手角度出发,探讨Unity与Cocos2d-X的优劣势以及哪个更适合新手游戏开发者入门学习。

Unity

  • Unity是一款跨平台的游戏开发引擎,能够支持多种平台,包括PC、移动设备和主机。对于初学者来说,这意味着可以使用Unity开发游戏并轻松将其部署到不同平台上。
  • Unity拥有强大的视觉化编辑器,使得新手开发者无需深入了解编程知识即可开始创建游戏。通过拖放操作,可快速生成游戏场景、添加素材和设置游戏逻辑。
  • Unity社区庞大活跃,有众多教程、插件和资源可供学习和使用。新手开发者可以通过查阅文档、参与论坛交流等途径快速解决问题。

Cocos2d-X

  • Cocos2d-X是一款开源的2D游戏开发框架,主要面向移动游戏开发。对于新手开发者来说,Cocos2d-X提供了丰富的2D游戏开发功能,适合于想要专注于2D游戏制作的开发者。
  • Cocos2d-X采用C++语言作为开发语言,对于有一定编程基础的新手开发者来说,可以通过学习C++进一步了解游戏开发的底层原理和逻辑。
  • Cocos2d-X对于性能优化较为友好,尤其适合于对游戏性能要求较高的项目。同时,Cocos2d-X也有活跃的社区和丰富的资源支持。

了解了Unity和Cocos2d-X各自的特点后,新手开发者可以根据自身需求和兴趣选择合适的引擎进行学习和开发。若是希望快速上手、跨平台部署游戏,那么Unity可能更适合;若是对2D游戏开发感兴趣、并且喜欢深入学习底层原理,那么Cocos2d-X可能更适合。

五、cocos2d的编程语言是?

学习cocos2d-x需要学习计算机语言,cocos2d有多个语言的版本,建议用C++因为跨平台比较容易些,javaC#object-c的版本都有,html5的也有,但是有局限性。计算机语言(computerlanguage)指用于人与计算机之间通讯的语言,是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器,为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由这些字符和语法规则组成计算机各种指令(或各种语句),这些就是计算机能接受的语言。计算机语言的概念比通用的编程语言要更广泛,例如,HTML是置标语言,也是计算机语言,但并不是编程语言。

六、游戏引擎unity cocos2d

游戏引擎是游戏开发中至关重要的工具之一,它提供了开发人员创建游戏所需的基本框架和功能。在众多游戏引擎中,UnityCocos2d 等引擎备受开发者青睐。

Unity游戏引擎

Unity 是一款功能强大的跨平台游戏引擎,提供了丰富的开发工具和资源,使开发者能够轻松创建高质量的游戏作品。其灵活性和易用性使其成为业内领先的游戏开发引擎之一。

Cocos2d 游戏引擎

Cocos2d 是另一款备受好评的游戏引擎,特别适合2D游戏的开发。其简单易学的特点吸引了许多开发者选择使用它来开发手机游戏和小型游戏项目。

两者特点对比

  • 对于3D游戏开发,Unity拥有更为丰富的功能和资源,适用于制作高质量的3D游戏作品。
  • 而在2D游戏开发领域,Cocos2d的简单易用性则成为开发者偏爱的选择。

哪个游戏引擎更适合您?

决定选择哪款游戏引擎取决于您的项目需求和个人偏好。如果您的项目需要制作复杂、高质量的3D游戏,Unity可能更适合您;如果您偏爱二维游戏开发,Cocos2d将是不错的选择。

无论您选择哪款游戏引擎,都可以通过学习相应的文档和教程来提升开发技能,创作出引人入胜的游戏作品。希望您能根据个人需求,选择一款适合自己的游戏引擎,开发出令人惊艳的游戏作品!

七、怎么生成cocos2d可用的plist文件?

1. 什么是plist文件格式?这是一种人类可读的串行化对象文件,由苹果公司发明,最早用于NeXTSTEP系统。详情看这里: Plist 。cocos2d-x 从 cocos2d-iphone 发展而来,因此在引擎中大量使用了这种文件格式。

2. 如何编辑plist文件?在 OS X 系统上,XCode 就可以直接打开和编辑plist文件。而在Windows上,我还没有找到可用的plist编辑软件。当然,plist是基于XML的纯文本格式,随便找个文本编辑器就可以编辑了。

3. cocos2d-x在哪些地方使用了plist格式?图像纹理定义文件 将多个纹理拼在一张大图上,使用 CCSpriteFrameCache 可以载入这类plist文件; 这里有一个图像纹理定义文件的范例: [cocos2d-x]\samples\Cpp\TestCpp\Resources\animations\grossini_family.plist。Label纹理定义文件 作用与图像纹理定义文件类似,只不过处理的是自己,面向 CCLabelAtlas ; 这里有一个Label纹理定义文件的范例: [cocos2d-x]\samples\Cpp\TestCpp\Resources\fonts\tuffy_bold_italic-charmap.plist 。帧动画定义 定义一个或多个动画中,使用哪些纹理,使用 CCAnimationCache 可以载入这类plist文件; 这里有一个帧动画定义文件的范例: [cocos2d-x]\samples\Cpp\TestCpp\Resources\animations\animations.plist 。

4. 生成plist文件的工具对于纹理定义文件来说,它的作用是如何在大图中找到碎图的坐标。因此很多拼合碎图的软件可以在拼合碎图的同时生成plist文件。TexturePacker 是所有平台上最好用的工具了;Zwoptex 是MAC Only的软件,我不太喜欢用;SpritePacker 是Windows Only的软件,功能尚可。

5. 图像纹理定义文件格式说明cocos2d-x中的纹理定义格式,是以Zwoptex生成的格式为标准的。Zwoptex生成的格式,有4种主要不同的版本:format值为0,代表Flash版本;format值为1,Zwoptex 0.4b以前支持;format值为2,Zwoptex 1.0以后支持,与format1的区别在于支持旋转;format值为3,属性名称进行了大幅修改,Zwoptes1.0.2之后支持。这3种格式的plist文件,cocos2d-x都能支持,具体的解析代码在CCSpriteFrameCache::addSpriteFramesWithDictionary 。TexturePacker生成的for cocos2d plist格式与Zwoptex生成的format为2的格式相同。5.1 format为0的plist文件这里贴一个比较完整plist文件,为了方便描述,其中仅包含一个frame。

八、python能用来写cocos2d游戏吗?

pygame在PC上写小游戏非常方便,可能几十行代码就可以实现一个简单的小游戏,使用pygame编写贪吃蛇、俄罗斯放开、连连看等小游戏很简单,有Python基础,可能半天就可以完成了!

九、cocos2d容易学吗?自学能学好不?

Cocos2d是一个面向移动设备的开源游戏框架,它是基于OpenGL ES 2.0的,由Cocos2d-iPhone和Cocos2d-X两个分支组成。相对于其他游戏引擎,Cocos2d具有轻量级、易学易用、跨平台等优点,因此很受开发者的欢迎。

对于有编程经验或有一定编程基础的开发者来说,学习Cocos2d并不是非常困难。但是对于完全没有编程经验或编程基础的开发者来说,学习Cocos2d可能会比较困难,需要花费更长的时间和精力。同时,需要学习的内容也比较多,包括Cocos2d的架构、语法、API等等。

不过,自学Cocos2d是可以学好的,只需要有耐心、勤奋和坚持不懈的学习精神。建议初学者可以通过查看Cocos2d官方文档、视频教程、相关书籍等多种方式来学习。另外,加入Cocos2d社区可以获得更多的帮助和支持,可以向经验丰富的开发者请教问题,也可以了解最新的技术和开发动态。

十、mahout面试题?

之前看了Mahout官方示例 20news 的调用实现;于是想根据示例的流程实现其他例子。网上看到了一个关于天气适不适合打羽毛球的例子。

训练数据:

Day Outlook Temperature Humidity Wind PlayTennis

D1 Sunny Hot High Weak No

D2 Sunny Hot High Strong No

D3 Overcast Hot High Weak Yes

D4 Rain Mild High Weak Yes

D5 Rain Cool Normal Weak Yes

D6 Rain Cool Normal Strong No

D7 Overcast Cool Normal Strong Yes

D8 Sunny Mild High Weak No

D9 Sunny Cool Normal Weak Yes

D10 Rain Mild Normal Weak Yes

D11 Sunny Mild Normal Strong Yes

D12 Overcast Mild High Strong Yes

D13 Overcast Hot Normal Weak Yes

D14 Rain Mild High Strong No

检测数据:

sunny,hot,high,weak

结果:

Yes=》 0.007039

No=》 0.027418

于是使用Java代码调用Mahout的工具类实现分类。

基本思想:

1. 构造分类数据。

2. 使用Mahout工具类进行训练,得到训练模型。

3。将要检测数据转换成vector数据。

4. 分类器对vector数据进行分类。

接下来贴下我的代码实现=》

1. 构造分类数据:

在hdfs主要创建一个文件夹路径 /zhoujainfeng/playtennis/input 并将分类文件夹 no 和 yes 的数据传到hdfs上面。

数据文件格式,如D1文件内容: Sunny Hot High Weak

2. 使用Mahout工具类进行训练,得到训练模型。

3。将要检测数据转换成vector数据。

4. 分类器对vector数据进行分类。

这三步,代码我就一次全贴出来;主要是两个类 PlayTennis1 和 BayesCheckData = =》

package myTesting.bayes;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.util.ToolRunner;

import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;

import org.apache.mahout.text.SequenceFilesFromDirectory;

import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;

public class PlayTennis1 {

private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";

/*

* 测试代码

*/

public static void main(String[] args) {

//将训练数据转换成 vector数据

makeTrainVector();

//产生训练模型

makeModel(false);

//测试检测数据

BayesCheckData.printResult();

}

public static void makeCheckVector(){

//将测试数据转换成序列化文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"testinput";

String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();

String[] params = new String[]{"-i",input,"-o",output,"-ow"};

ToolRunner.run(sffd, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("文件序列化失败!");

System.exit(1);

}

//将序列化文件转换成向量文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";

String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();

String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};

ToolRunner.run(svfsf, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("序列化文件转换成向量失败!");

System.out.println(2);

}

}

public static void makeTrainVector(){

//将测试数据转换成序列化文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"input";

String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();

String[] params = new String[]{"-i",input,"-o",output,"-ow"};

ToolRunner.run(sffd, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("文件序列化失败!");

System.exit(1);

}

//将序列化文件转换成向量文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";

String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();

String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};

ToolRunner.run(svfsf, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("序列化文件转换成向量失败!");

System.out.println(2);

}

}

public static void makeModel(boolean completelyNB){

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";

String model = WORK_DIR+Path.SEPARATOR+"model";

String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";

Path in = new Path(input);

Path out = new Path(model);

Path label = new Path(labelindex);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

if(fs.exists(label)){

//boolean参数是,是否递归删除的意思

fs.delete(label, true);

}

TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();

String[] params =null;

if(completelyNB){

params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};

}else{

params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};

}

ToolRunner.run(tnbj, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("生成训练模型失败!");

System.exit(3);

}

}

}

package myTesting.bayes;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import org.apache.commons.lang.StringUtils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.fs.PathFilter;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.mahout.classifier.naivebayes.BayesUtils;

import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;

import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;

import org.apache.mahout.common.Pair;

import org.apache.mahout.common.iterator.sequencefile.PathType;

import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;

import org.apache.mahout.math.RandomAccessSparseVector;

import org.apache.mahout.math.Vector;

import org.apache.mahout.math.Vector.Element;

import org.apache.mahout.vectorizer.TFIDF;

import com.google.common.collect.ConcurrentHashMultiset;

import com.google.common.collect.Multiset;

public class BayesCheckData {

private static StandardNaiveBayesClassifier classifier;

private static Map<String, Integer> dictionary;

private static Map<Integer, Long> documentFrequency;

private static Map<Integer, String> labelIndex;

public void init(Configuration conf){

try {

String modelPath = "/zhoujianfeng/playtennis/model";

String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";

String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";

String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";

dictionary = readDictionnary(conf, new Path(dictionaryPath));

documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));

labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));

NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);

classifier = new StandardNaiveBayesClassifier(model);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("检测数据构造成vectors初始化时报错。。。。");

System.exit(4);

}

}

/**

* 加载字典文件,Key: TermValue; Value:TermID

* @param conf

* @param dictionnaryDir

* @return

*/

private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {

Map<String, Integer> dictionnary = new HashMap<String, Integer>();

PathFilter filter = new PathFilter() {

@Override

public boolean accept(Path path) {

String name = path.getName();

return name.startsWith("dictionary.file");

}

};

for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {

dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());

}

return dictionnary;

}

/**

* 加载df-count目录下TermDoc频率文件,Key: TermID; Value:DocFreq

* @param conf

* @param dictionnaryDir

* @return

*/

private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {

Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();

PathFilter filter = new PathFilter() {

@Override

public boolean accept(Path path) {

return path.getName().startsWith("part-r");

}

};

for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {

documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());

}

return documentFrequency;

}

public static String getCheckResult(){

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String classify = "NaN";

BayesCheckData cdv = new BayesCheckData();

cdv.init(conf);

System.out.println("init done...............");

Vector vector = new RandomAccessSparseVector(10000);

TFIDF tfidf = new TFIDF();

//sunny,hot,high,weak

Multiset<String> words = ConcurrentHashMultiset.create();

words.add("sunny",1);

words.add("hot",1);

words.add("high",1);

words.add("weak",1);

int documentCount = documentFrequency.get(-1).intValue(); // key=-1时表示总文档数

for (Multiset.Entry<String> entry : words.entrySet()) {

String word = entry.getElement();

int count = entry.getCount();

Integer wordId = dictionary.get(word); // 需要从dictionary.file-0文件(tf-vector)下得到wordID,

if (StringUtils.isEmpty(wordId.toString())){

continue;

}

if (documentFrequency.get(wordId) == null){

continue;

}

Long freq = documentFrequency.get(wordId);

double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);

vector.setQuick(wordId, tfIdfValue);

}

// 利用贝叶斯算法开始分类,并提取得分最好的分类label

Vector resultVector = classifier.classifyFull(vector);

double bestScore = -Double.MAX_VALUE;

int bestCategoryId = -1;

for(Element element: resultVector.all()) {

int categoryId = element.index();

double score = element.get();

System.out.println("categoryId:"+categoryId+" score:"+score);

if (score > bestScore) {

bestScore = score;

bestCategoryId = categoryId;

}

}

classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";

return classify;

}

public static void printResult(){

System.out.println("检测所属类别是:"+getCheckResult());

}

}

相关资讯
热门频道

Copyright © 2024 招聘街 滇ICP备2024020316号-38