正反情话

时间:2024-11-02 13:42 人气:0 编辑:招聘街

一、正反情话

在恋爱关系中,情话无疑是一种浪漫而甜蜜的表达方式。无论是赞美对方的美丽与智慧,还是传达自己的爱意和思念之情,情话都能打动人心,加深两人之间的感情。而正反情话则是恋人间常常使用的一种方式,通过对比对方的优点和自己对对方的看法,以一种有趣而俏皮的方式表达出爱意。

正反情话有助于破冰和增进情感亲密度,让恋人们感受到彼此之间的默契和幽默,加深彼此间的了解和信任。下面,我将为大家分享一些浪漫的正反情话,希望对你们之间的爱情产生积极的影响。

1. 正:你就像一朵盛开的花

你就像一朵盛开的花,美丽动人,散发着芬芳的香气。你的微笑如同太阳的温暖,给予我力量和勇气。每当我看到你,我的心都会因你而跳动起来,因为你就是我生命中最重要的那朵花。

1. 反:我是那个欣赏你的人

我是那个欣赏你的人,你美丽的外表吸引了我的眼球。你那甜美的笑容仿佛一朵绽放的花朵,在人群中格外耀眼。你是那个温暖我的人,因为在你的世界里,我感受到了幸福和安宁。

2. 正:你让我的世界变得完美

你是我的心上人,因为你让我的世界变得完美。有你在我身边,生活充满了欢笑和温暖。你是我生活中的闪耀之星,给予我无尽的幸福与宠爱。

2. 反:我给你的世界增添了色彩

我给你的世界增添了色彩,因为我是一个懂得欣赏你的人。你的存在让我的生活更加丰富多彩,每一天都因你而充满了意义。你让我的世界变得更加美好,带给我无尽的快乐。

3. 正:你是我的灵魂伴侣

你是我的灵魂伴侣,我们彼此之间有着强烈的默契和契合度。你了解我的内心世界,懂得我的喜好和梦想。和你在一起,我感受到了真正的亲密和安全。

3. 反:我成为了你的心灵伴侣

我成为了你的心灵伴侣,我们之间有着奇妙的心灵共鸣。我能够读懂你的眼神和微笑,明白你内心的痛苦和喜悦。我们的心灵相通,这让我感到异常幸福。

4. 正:你是我最心仪的人

你是我最心仪的人,因为你拥有无与伦比的魅力和才华。你的智慧和善良让我深深着迷,你的一举一动都让我为之倾倒。每当我看到你,我的心都会为之跳跃,因为你就是我真正渴望拥有的人。

4. 反:我是你最钟情的人

我是你最钟情的人,因为我痴迷于你的才华和魅力。你的存在让我的世界充满了动力和激情,每一次和你的交流都让我欲罢不能。你是我心中的宠儿,我的爱会宠溺你一辈子。

在正反情话中,我们可以通过对比自己和对方的特点与行为,以一种有趣的方式来表达爱意。每个人都希望被人理解和接受,在恋爱中,通过正反情话的互动,我们能够更好地展示自己的真心和对对方的欣赏。

无论是阳光般的正情话,还是调皮可爱的反情话,都能激发爱情的火花,让两个人更加投入和珍惜彼此。当你对恋人说出这些甜蜜的话语时,相信他/她一定会被深深打动,与你的感情更加紧密。

正反情话的应用需要在适当的时机和适当的方式下进行,不能过于频繁或过于夸张,否则可能会适得其反。在使用正反情话时,要注重言之有物,挑选恰当的词语和形容词,以确保表达出感情的真挚和深度。

细腻的情感表达是爱情中必不可少的一环,而正反情话则是其中的一种特殊方式。用心地给对方送上正反情话,让彼此的爱情之花开得更加绚烂吧!

二、金卤灯 正反

金卤灯的介绍

金卤灯,也被称为金卤合金氙灯,是一种高效的照明设备,由于其优秀的性能和广泛的应用领域,近年来受到了越来越多人的关注和喜爱。

金卤灯的优势

金卤灯相比于传统的白炽灯和荧光灯有着许多优势。

  1. 高能效:金卤灯能够提供更亮、更高效的照明效果,其光效通常比相同功率的白炽灯和荧光灯要高出30%至50%。
  2. 长寿命:金卤灯的寿命通常可达6000至10000小时,比传统的白炽灯和荧光灯要长得多。
  3. 色彩还原性好:金卤灯具有更接近自然光线的色温,能够提供更好的色彩还原性,使得物体的真实色彩更加清晰。
  4. 快速启动和重启:金卤灯的启动和重启时间非常短,几乎可以瞬间达到最大亮度,非常适合需要频繁启动和重启的场合。
  5. 节能环保:金卤灯相比于传统的白炽灯和荧光灯有更低的能耗,能够显著降低能源消耗,减少碳排放,对于节能环保具有重要意义。

金卤灯的工作原理

金卤灯的工作原理是基于正反反应而产生的光效应。正反反应是一种快速的和可逆的离子反应,在金卤灯内部的气体充填物中产生放电,从而使氙气和金卤化合物发生反应,释放出光线。

金卤灯所使用的金属卤化物通常是碘化物、溴化物或氯化物等,而氙气充填则可以使光线发出更稳定的白色光。

金卤灯的应用领域

金卤灯由于其独特的优势,在许多应用领域中得到了广泛的使用。

  1. 户外照明:金卤灯在户外照明中具有亮度高、寿命长、色彩还原性好等优势,常用于街道、城市广场、体育场馆等场所的照明。
  2. 摄影照明:金卤灯能够提供较高的亮度和优秀的色彩还原性,常用于摄影棚、舞台剧院等需要高质量照明的场所。
  3. 商业照明:金卤灯可用于商店、超市、办公室等场所,提供明亮舒适的照明环境,使顾客和员工感到愉悦和舒适。
  4. 汽车照明:金卤灯作为汽车前照灯和远光灯的光源,具有亮度高、视觉效果好等特点,保证了行车的安全性。

总的来说,金卤灯作为一种高效、节能、寿命长的照明设备,不仅在居民生活中得到广泛应用,也在商业、工业等领域发挥着重要作用。随着科技的不断进步和发展,金卤灯有望在未来进一步提升其性能,满足人们对高质量照明的需求。

希望通过本篇文章,对金卤灯有一定的了解和认识,并能够在实际应用中发挥其优势和特点。

谢谢阅读。

三、电子镇流器正反

电子镇流器正反 | 功能、优势和应用领域

电子镇流器是现代照明系统中必不可少的一部分,它能够提供稳定的电流来驱动荧光灯、LED灯等光源。它是一种高效、可靠且节能的电子设备,得到了广泛的应用。

正向工作原理

电子镇流器的正向工作原理十分简单。当电源通电时,电子镇流器接收电流并进行变压、变频处理。这些处理确保电子镇流器输出的电流和频率与所连接的荧光灯或LED灯的要求相匹配。

电子镇流器通过电源将电荷储存到电容器中,然后通过变压器将电荷转换为高频交流电。最后,通过电路的控制和反馈机制,输出稳定的电流和频率。电子镇流器的工作过程精确而高效,使得荧光灯和LED灯能够持久发光。

反向工作原理

与正向工作原理相比,电子镇流器的反向工作原理有所不同。在某些特殊情况下,电子镇流器可以反向工作,将其输出电流与输入电压呈相反的关系。

反向工作的电子镇流器被称为反射式电子镇流器。这种类型的镇流器通过使输入电流具有反向的较高脉冲来工作。这种工作方式通常用于特殊照明应用中,例如需要产生高强度闪光效果的场合。

电子镇流器的功能和优势

电子镇流器相比传统的磁性镇流器具有许多功能和优势。

  • 节能:电子镇流器利用高频变压和变频技术,可将输入电源的电能转化为荧光灯和LED灯所需要的稳定电流。相比之下,传统磁性镇流器会导致一定的能量损耗。
  • 稳定性:电子镇流器能够提供稳定的电流和频率,确保照明系统始终正常工作。这种稳定性对于灯具的寿命和光效非常重要。
  • 延长寿命:通过提供稳定的电流,电子镇流器可以延长荧光灯和LED灯的寿命。同时,它还能减少灯丝老化和灯珠损伤的风险。
  • 减少闪烁:传统镇流器可能会引起荧光灯的闪烁问题,而电子镇流器通过提供稳定的电流来消除闪烁现象。
  • 适应性:电子镇流器适用于各种类型的光源,包括荧光灯、LED灯和气体放电灯。它们在不同的照明应用领域中都能发挥出色的作用。

电子镇流器的应用领域

由于其功能和优势,电子镇流器在各种照明应用领域中得到了广泛的应用。

办公场所:电子镇流器在办公楼、商场和学校等场所中广泛应用于荧光灯照明系统。其低能耗和高效性使得其成为节能照明的首选。

室内照明:电子镇流器适用于室内灯具,如吊灯、台灯和壁灯。它们的稳定性保证了灯光的均匀性和舒适度。

路灯照明:电子镇流器在路灯照明系统中发挥着重要的作用,为城市道路和高速公路提供持久、亮度均匀的照明。

植物生长照明:电子镇流器可用于植物生长灯,为温室、植物工厂和农业领域提供所需的光照条件。

舞台照明:反射式电子镇流器常用于舞台照明系统,在演唱会和剧院中创造出令人惊叹的灯光效果。

总的来说,电子镇流器是现代照明系统中不可或缺的一部分。它们的正向工作原理、功能和优势,以及广泛的应用领域,使得电子镇流器成为提供高效、稳定和节能照明解决方案的理想选择。

四、攀爬正反脚

攀爬正反脚技术指南

攀爬正反脚是一项受欢迎的户外运动,也是一种全身性的健身运动。无论你是初学者还是经验丰富的攀岩者,掌握正反脚技术对于攀岩爱好者来说都是必不可少的。在本指南中,我们将向您介绍攀爬正反脚的基本原理、技巧和注意事项。

什么是攀爬正反脚技术

攀爬正反脚是攀岩运动中的一种技术,它利用身体的力量和平衡来攀登岩壁。该技术中,攀岩者将脚放在岩壁上,用脚部的力量把身体推离岩壁并保持平衡。攀岩者可以通过交替使用正脚和反脚来向上攀爬。正脚指的是脚掌朝上的一只脚,而反脚指的是脚掌朝下的一只脚。

攀爬正反脚的基本步骤

要掌握攀爬正反脚技术,以下是一些基本步骤和技巧:

  1. 寻找合适的攀爬路线。在攀岩区域中,选择适合初学者的标记明显、坚固可靠的攀爬路线。
  2. 正确穿着攀岩装备。戴上头盔并系好攀爬带。
  3. 站立在攀岩起点。将一只脚放在岩壁上作为正脚,另一只脚保持悬空作为反脚。
  4. 向上推动。用正脚的力量把身体推离岩壁,同时用反脚保持平衡。注意保持身体的重心稳定。
  5. 移动反脚。将反脚移到新的位置,作为正脚。
  6. 继续向上攀爬。交替使用正脚和反脚,控制好身体的平衡和力量分配,依次攀爬至目标位置。

攀爬正反脚的技巧和注意事项

除了基本步骤,以下是一些攀爬正反脚的技巧和注意事项:

  • 练习身体的平衡:攀岩过程中,保持良好的身体平衡是非常重要的。通过练习瑜伽、平衡训练等活动,提高身体的平衡能力。
  • 保持放松:攀爬过程中,保持身体的放松是关键。紧绷的身体会浪费能量并降低灵活性。
  • 注意攀岩路线:在攀岩过程中,仔细观察攀岩路线,选择合适的攀爬点,避免遇到难以穿越的地形。
  • 使用适当的攀爬靴:选择合适的攀爬靴对于攀岩的成功至关重要。攀爬靴应该紧身贴合脚部,提供良好的支撑和摩擦力。
  • 与伙伴合作:攀岩是一项危险的活动,与伙伴一起攀岩可以提供更安全的环境。确保与您的攀爬伙伴保持良好的沟通和配合。

攀岩的身体训练

攀岩是一项全身性的活动,需要全面的身体训练才能提高攀爬能力。以下是一些建议的身体训练项目:

  1. 核心力量训练:通过腹肌、腰部和背部的核心力量训练,提高身体的稳定性。
  2. 上肢力量训练:重点训练手臂、肩膀和背部的力量,以增强攀爬时的抓握和拉力。
  3. 下肢力量训练:加强腿部和腿肌的力量,以提供稳定的支撑力。
  4. 柔韧性训练:通过拉伸和瑜伽等活动,增加肌肉的柔韧性,提高身体的灵活性。

攀爬正反脚是攀岩过程中的基本技术之一,掌握这一技术对于攀岩爱好者来说非常重要。通过正确的训练、注意事项和合适的装备,您可以提高攀爬的效率和安全性。尽管攀岩是一项充满挑战的运动,但通过不断的训练和经验积累,您将逐渐掌握攀岩的技巧,享受到这项令人兴奋和充实的运动带来的乐趣。

更多有关户外运动和攀岩的文章,请访问我们的网站。

五、打底裤正反

打底裤正反:解密流行穿搭的必备神器

打底裤,作为现代时尚界的一项重要创新,已经在流行穿搭中扮演着不可或缺的角色。不仅能够提供舒适的穿着感,还能够起到修饰身材、塑造线条的效果。然而,对于很多人来说,往往只关注了打底裤的正面效果,而忽略了其背后的正反两面。本文将带您一起解密打底裤正反,揭示打底裤的时尚秘密。

正面效果:塑造曼妙身姿

要了解打底裤的正面效果,我们首先要明确它与传统裤子的区别。打底裤通常采用弹力材质,能够紧密贴合身体线条,突出曲线美。无论是显瘦高腰款式还是修饰臀部的翘臀版型,都能够帮助女性塑造出一个迷人的身姿。

打底裤的设计还兼顾了穿着的舒适度。弹力材质使得打底裤具有一定的拉伸性和透气性,能够让运动时更加自如,同时也保持肌肤的舒适感。

此外,打底裤的色彩也是其正面效果的关键所在。黑色、灰色等深色调是最常见的选择,这些色彩不仅能够修饰腿部线条,还能够让整体造型更加时尚大方。而红色、蓝色等明亮色调则更适合搭配活力四溢的上衣,展现出青春活力的一面。

背面效果:我与自己的对话

在解密打底裤的正反中,打底裤的背面效果同样不容忽视。打底裤的背面设计通常采用臀部三维裁剪,能够营造出更加凹凸有致的臀部线条,让您自信满满地展现自己的好身材。

同时,打底裤的背面设计还重点关注腰部的修饰。高腰款式的打底裤能够有效提升腰线,让腰部更加纤细,塑造出完美的腰臀比例。而腰部松紧带的设计则更加贴合腰部曲线,不会勒得太紧,给人一种舒适的穿着感受。

此外,一些品牌还将背面设计进行创新,例如加入蕾丝、镂空等元素,使得背部更加别致,让整体穿搭更具个性和时尚感。

穿搭技巧:正反两面兼顾

如何将打底裤的正反两面效果发挥到极致?以下是几个穿搭技巧,帮助您更好地搭配打底裤,展现迷人魅力。

  • 选择合适款式:根据自身的身材和喜好选择合适的打底裤款式,既能够突出优点,又能够遮盖不足。
  • 配饰搭配:为打底裤的正面效果增添亮点,可以选择具有装饰性的腰带、别针等,提升整体造型的时尚感。
  • 上衣选择:搭配适合的上衣能够让整体造型更加和谐。例如,搭配宽松的上衣能够中和打底裤的修身效果,创造出潇洒随性的魅力。
  • 色彩搭配:打底裤的反面效果同样不容忽视。在选择上衣颜色时,可以根据打底裤的颜色进行搭配,创造出协调统一的整体效果。

打底裤的多功能性

除了在时尚穿搭中发挥的作用,打底裤还具有多种功能性。例如,在寒冷的冬季,打底裤能够为您提供额外的保暖,让您在户外活动时保持温暖。在运动锻炼中,打底裤的弹力材质能够提供更大的灵活性,让您更自由地进行各种运动。

此外,打底裤还是一种多款式的穿搭基础。无论是休闲、运动还是正式场合,打底裤都能够与各种上衣进行搭配,展现出不同的风格和气质。

以打底裤为引发的穿搭灵感

打底裤作为流行穿搭的必备神器,不仅能够塑造身材、提升时尚感,还能够引发无限的穿搭灵感。无论是与长款外套的搭配、短裙的变奏,还是和高跟鞋的完美结合,打底裤都能够为您的穿搭增添亮点,让您在人群中更加出众。

对于流行穿搭的爱好者来说,熟悉打底裤的正反两面效果是必不可少的。希望通过本文的解密,能够帮助您更好地了解打底裤,并在穿搭中充分发挥其时尚的魅力!

六、阿迪达斯正反服

<>

在时尚界,品牌与个性的结合是屡见不鲜的。阿迪达斯作为世界知名的运动品牌,一直致力于为消费者带来独特的体验。

最近,阿迪达斯推出了一款备受瞩目的新产品,正反服。这种服装设计灵感来源于反转概念,允许消费者通过翻转服装来改变外观。无论您是想要低调简约的风格,还是追求更为夸张时尚的外观,正反服都能满足您的需求。

正反服的设计理念

正反服的设计理念是为了让消费者在一件服装中获得多种风格选择。传统上,人们购买服装时只能选择一种风格,但正反服打破了这种传统观念。它将正面和背面两个设计完全不同的风格融合在一起,使得消费者可以根据自己的心情和场合选择合适的一面。

这种设计理念迎合了现代人多变的生活需求。在快节奏的生活中,人们经常需要在不同场合切换风格。例如,早上上班时需要正式的着装,而晚上出去玩则更倾向于休闲风格。正反服可以满足这些需求,让您不必为改变外观而购买多套服装。

除了多样化的风格选择,正反服的设计也注重舒适度和质量。阿迪达斯一直以来都将品质放在首位,正反服也不例外。无论是面料的选择还是剪裁的工艺,阿迪达斯都精心设计,力求给消费者带来最好的穿着体验。

正反服的使用方法

正反服的使用方法非常简单。当您想要改变外观时,只需将服装翻转过来,即可展示另一种设计风格。正反服的设计考虑到了反转的便捷性,因此不会对您的穿着体验造成任何不便。

如果您想要低调简约的风格,可以选择正反服的正面设计。正面设计通常采用经典的阿迪达斯标志和简洁的图案,展现出一种时尚的简约感。

而如果您想要更为夸张时尚的外观,可以选择正反服的背面设计。背面设计通常采用丰富的色彩和大胆的图案,给人一种时髦与活力并存的感觉。

正反服的潮流影响

正反服的推出引起了一股潮流风潮。越来越多的人开始跟风购买正反服,希望通过这种服装来展示自己的个性和时尚品味。

正反服的潮流影响不仅在日常生活中可见,也渗透到了时尚界的各个领域。名人和社交媒体纷纷关注正反服,将其作为时尚宣言的一部分。

同时,正反服也为消费者带来了选购上的便利。通过购买一件正反服,消费者实际上获得了两种风格的服装,相当于购买了两件不同的衣物。这种便利性也是吸引消费者的一大特点。

结语

正反服作为一种融合了时尚与个性的创新设计,赢得了消费者的青睐。它的多样化风格选择、舒适度和质量保证,以及对现代生活需求的契合,使其成为当今时尚界的热门单品。

如果您也想展示自己的个性和时尚品味,不妨尝试一下阿迪达斯的正反服。相信它会给您带来全新的穿着体验,并成为您时尚装备中的一部分。

七、木工锯片正反

木工锯片正反应注意的事项

木工锯片是木工作业中常用的工具,选择正确的锯片对操作效果和工作质量有很大的影响。正反面的正确使用是确保锯片使用寿命和切割效果的关键。下面是一些关于木工锯片正反应注意的事项。

了解木工锯片的正面和反面

首先,了解木工锯片的正面和反面非常重要。通常,锯片上的齿面是正面,背面是反面。正面的齿面是用于切割木材的,而反面则主要用于排切割过程中产生的屑屑。确定锯片的正面和反面有时可能比较困难,因为有些锯片的正面和反面的区别很小。在这种情况下,可以通过参考锯片制造商提供的说明书来确定。

正确安装木工锯片

安装木工锯片时,确保将正面朝上。这样可以确保齿面正确对准工件,并且能够更有效地切割木材。同时,确保安装和紧固锯片时使用正确的工具和方法,以避免损坏锯片。

注意锯片的磨损情况

使用木工锯片一段时间后,锯片的正面和反面都会有一定的磨损。磨损过多的锯片会导致切割效果下降,甚至可能出现危险情况。因此,在使用木工锯片时要经常检查锯片的磨损程度。如果锯片磨损严重,应及时更换。

保持锯片的清洁和光洁

保持木工锯片的清洁和光洁是确保其正反面能够正确发挥作用的重要措施。在使用锯片时,锯末和木屑会粘附在锯片上,影响锯片的切割效果。因此,在工作过程中要定期清理锯片。清洁锯片时,使用柔软的刷子将锯片上的锯末和木屑清除,然后用清洁布擦拭。

合理储存木工锯片

在使用完木工锯片后,正确的储存方式也是确保锯片寿命和切割效果的关键。建议将锯片放置在干燥、清洁的地方,避免与湿气、腐蚀性物质等接触。同时,要将锯片存放在专用的盒子或架子上,避免与其他工具和材料摩擦。

结论

正确使用木工锯片的正反面对于木工作业的质量和效率至关重要。了解木工锯片的正面和反面、正确安装锯片、注意锯片的磨损情况、保持锯片的清洁和光洁、合理储存锯片是确保木工锯片正反使用效果的关键因素。希望通过本文介绍的事项,能够帮助读者更好地使用木工锯片,提高木工作业的质量和效率。

八、正反针织围巾

正反针织围巾是当下最受欢迎的时尚配件之一,不仅能保暖,还能为您的服装添上一抹别致的风采。这种围巾的设计独特之处在于可以随意搭配不同的穿着风格,让您尽显个性和时尚品味。

正反针织围巾的特点

正反针织围巾的特点是采用不同颜色或材质的线缕,并以针织方式交织在一起,使得围巾两面都能展现独特的图案或颜色。这种设计既增加了围巾的实用性,也为您的整体造型增添了一份精致感。

如何搭配正反针织围巾

要想穿出时尚感十足的造型,搭配正反针织围巾是一个不错的选择。您可以将围巾随意缠绕在脖子上,或者将其高高围绕在颈部展现不同的风格。不论您是选择搭配牛仔裤和运动鞋,还是配上长裤和靴子,正反针织围巾都能为您的整体造型增色不少。

正反针织围巾的保养方法

为了延长正反针织围巾的使用寿命,我们需要注意围巾的保养方法。在清洗围巾时,最好选择中性洗涤剂,避免使用漂白剂或强碱性清洁剂,以防损坏围巾的材质。另外,洗涤时应轻柔手洗,切忌用力搓擦,以免使围巾起毛或变形。

结语

正反针织围巾不仅是一款实用的保暖配件,更是展现个性魅力和时尚品味的利器。通过巧妙搭配,您可以让正反针织围巾成为时尚造型的点睛之笔,为您的整体形象加分不少。同时,合理的保养和使用也能帮助围巾更持久地保持美观和质感。无论是搭配休闲装还是正装,正反针织围巾都能为您的穿搭带来意想不到的惊喜。

九、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());

}

}

十、webgis面试题?

1. 请介绍一下WebGIS的概念和作用,以及在实际应用中的优势和挑战。

WebGIS是一种基于Web技术的地理信息系统,通过将地理数据和功能以可视化的方式呈现在Web浏览器中,实现地理空间数据的共享和分析。它可以用于地图浏览、空间查询、地理分析等多种应用场景。WebGIS的优势包括易于访问、跨平台、实时更新、可定制性强等,但也面临着数据安全性、性能优化、用户体验等挑战。

2. 请谈谈您在WebGIS开发方面的经验和技能。

我在WebGIS开发方面有丰富的经验和技能。我熟悉常用的WebGIS开发框架和工具,如ArcGIS API for JavaScript、Leaflet、OpenLayers等。我能够使用HTML、CSS和JavaScript等前端技术进行地图展示和交互设计,并能够使用后端技术如Python、Java等进行地理数据处理和分析。我还具备数据库管理和地理空间数据建模的能力,能够设计和优化WebGIS系统的架构。

3. 请描述一下您在以往项目中使用WebGIS解决的具体问题和取得的成果。

在以往的项目中,我使用WebGIS解决了许多具体问题并取得了显著的成果。例如,在一次城市规划项目中,我开发了一个基于WebGIS的交通流量分析系统,帮助规划师们评估不同交通方案的效果。另外,在一次环境监测项目中,我使用WebGIS技术实现了实时的空气质量监测和预警系统,提供了准确的空气质量数据和可视化的分析结果,帮助政府和公众做出相应的决策。

4. 请谈谈您对WebGIS未来发展的看法和期望。

我认为WebGIS在未来会继续发展壮大。随着云计算、大数据和人工智能等技术的不断进步,WebGIS将能够处理更大规模的地理数据、提供更丰富的地理分析功能,并与其他领域的技术进行深度融合。我期望未来的WebGIS能够更加智能化、个性化,为用户提供更好的地理信息服务,助力各行各业的决策和发展。

相关资讯
热门频道

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