金彭T90采用SUV造型,五門四座的承載式車身設(shè)計(jì),底盤架設(shè)較高。車身下方的流線型凹槽,使整車顯得修長(zhǎng)氣派,風(fēng)格自成一家。前臉黑底飾條中間鑲嵌著鋼琴烤漆工藝的高亮金屬logo,左右連接LED多邊形亮黑大燈,頗有未來科技風(fēng)的感覺。車頭兩側(cè)和下方的柵格口,又呈現(xiàn)出自然大方的視覺效果。
金彭T90的動(dòng)力系統(tǒng),搭載的是3.5kw高效交流電機(jī)(其山區(qū)款最大功率是5.6kw),匹配雙驅(qū)智能DC轉(zhuǎn)換器,可以自由切換高低速,動(dòng)力非常強(qiáng)勁。T90運(yùn)用運(yùn)動(dòng)化底盤調(diào)校技術(shù),匹配轎車級(jí)配套制動(dòng)器,制動(dòng)靈敏度是普通制動(dòng)器1.2倍,操控體驗(yàn)與安全系數(shù)大幅度提升。輪胎配的是轎跑級(jí)五幅輪轂,黑白經(jīng)典套色,散熱性好。高性能鋁合金,滿足10153N力值的徑向滾壓沖擊,遠(yuǎn)超同類別產(chǎn)品要求!
178cm
彭彭、原名彭昱暢、中國(guó)內(nèi)地男演員。1994年10月25日出生江西新余市,畢業(yè)于上海戲劇學(xué)院木偶表演系。
代表作品:奪冠、閃光少女、大象席地而坐
主要成就:2020年福布斯中國(guó)名人榜第67位
目前嶗山區(qū)主要還是針對(duì)中韓街道部分區(qū)域進(jìn)行改造,不過按照青島十三五計(jì)劃的內(nèi)容,結(jié)合嶗山區(qū)新簽的幾個(gè)大項(xiàng)目,預(yù)計(jì)在5年內(nèi)將嶗山打造成旅游、文化、辦公為主的新嶗山,你可以搜索一下看看和沙子口有關(guān)的幾個(gè)新項(xiàng)目。而且鑒于政府以及開發(fā)商啟動(dòng)、資金、工期等影響,沙子口的拆遷也將是逐步的進(jìn)行,具體還得看嶗山區(qū)官網(wǎng)的公告吧
彭的拼音和詞語:拼音:【 péng】。組詞:彭尸、彭勃、彭祖、彭蜞、老彭、韓彭、大彭、三彭、彭郎、彭考、彭湃、彭亨、彭濞、容彭、黥彭、彭侯、彭鏗、彭月等。
彭彭【péng,péng】:盛多的樣子; 音樂人名。
彭涓【péng,juā】:彭祖和涓子的并稱。二人均為傳說中的長(zhǎng)壽者。
彭澤【péng,zé】:1、澤名。即今鄱陽湖。在江西省北部。又名彭湖﹑彭蠡。 2、縣名。漢代始設(shè)。在今江西省北部。晉陶潛曾為彭澤令,因以"彭澤"借指陶潛。
彭蜞【péng,qí】:蟹的一種,體小少肉。
彭客【péng,kè】:新興的積極詞匯。
韓彭【hán,péng】:漢代名將淮陰侯韓信與建成侯彭越的并稱。
彭越【péng,yuè】:亦寫作'彭月'。 即彭蜞。
彭聃【péng,dān】:彭祖與老聃的并稱。傳說二人均極長(zhǎng)壽。
彭窯【péng,yáo】:元代名匠彭均寶燒窯于霍州,制品仿北宋定窯﹐胎薄質(zhì)細(xì),凈白尚素。當(dāng)時(shí)稱為'彭窯'。又稱'新定窯
近年來,彭石林先生以其獨(dú)特的寫作風(fēng)格和豐富的知識(shí)深受讀者喜愛。他是一位多才多藝的博主、作家和評(píng)論家,他的博客和文章充滿了思想性、深度和創(chuàng)新。彭石林的文字不僅展現(xiàn)出他對(duì)文學(xué)、歷史和當(dāng)代社會(huì)問題的獨(dú)到見解,更能帶領(lǐng)讀者思考、啟發(fā)思想,并以娓娓道來的敘事將人們引入一個(gè)全新的視角。
彭石林出生在一個(gè)教育世家,家庭的良好教育環(huán)境培養(yǎng)了他廣博的知識(shí)和文學(xué)才華。他在早期就展現(xiàn)出寫作的天賦,并通過自己的不斷努力,逐漸成為了一位備受矚目的作家。彭石林擁有文學(xué)學(xué)士學(xué)位和碩士學(xué)位,他的學(xué)術(shù)背景不僅豐富了他的寫作素材,更為他的文章增添了學(xué)者般的深度和權(quán)威性。
彭石林的博客是他與讀者分享觀點(diǎn)和知識(shí)的平臺(tái),他通過博客內(nèi)容表達(dá)個(gè)人的見解和觀點(diǎn),有時(shí)候會(huì)探討一些熱門話題或創(chuàng)意的故事。無論是文學(xué)評(píng)論,歷史解讀,還是對(duì)社會(huì)問題的探討,彭石林總是能給讀者帶來全新的啟示。他的文章富有獨(dú)創(chuàng)性,且經(jīng)常與時(shí)事緊密聯(lián)系,引起了廣泛的關(guān)注和贊譽(yù)。
彭石林的作品涵蓋了多個(gè)領(lǐng)域,他的小說作品《時(shí)光漩渦》以其獨(dú)特的敘事方式和深刻的內(nèi)涵贏得了廣大讀者的喜愛。這本小說以厚重的歷史背景為支撐,將現(xiàn)實(shí)與虛構(gòu)相結(jié)合,讓人們?cè)谛蕾p故事的同時(shí)不斷思考。他的散文集《靈感散落的地方》被評(píng)論家譽(yù)為具有獨(dú)特魅力的經(jīng)典之作,彭石林通過富有哲思的文字展現(xiàn)了對(duì)生活的獨(dú)到感悟,讓讀者在其中找到共鳴。
彭石林不僅在文學(xué)創(chuàng)作領(lǐng)域取得了巨大的成功,他也以自己的影響力和社會(huì)貢獻(xiàn)贏得了人們的尊重。他積極參與公益事業(yè),并通過自己的文章和演講,傳遞正能量和社會(huì)價(jià)值觀。彭石林的影響力不僅限于文壇,他的觀點(diǎn)和見解也常常在社交媒體上引起廣泛的關(guān)注和討論,對(duì)社會(huì)輿論起到了積極的引導(dǎo)作用。
彭石林的文章常常關(guān)注社會(huì)問題,呼吁人們關(guān)心弱勢(shì)群體、關(guān)注綠色環(huán)保、倡導(dǎo)和諧社會(huì)等,他深入淺出的寫作風(fēng)格讓人們?nèi)菀桌斫猓a(chǎn)生共鳴。通過他的文字,讀者可以看到一個(gè)熱愛生活、關(guān)心社會(huì)、追求進(jìn)步的思想家的形象。彭石林的思想和觀點(diǎn)通過文字傳遞給讀者,引發(fā)了人們對(duì)于社會(huì)現(xiàn)象和個(gè)人價(jià)值的思考和反思。
彭石林是一位極富潛力的作家和博主,他的寫作才華和廣博的知識(shí)為他的未來發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。我們期待彭石林能夠繼續(xù)發(fā)表出更多富有創(chuàng)意和啟發(fā)性的文章和作品,以他獨(dú)特的視角和筆觸為讀者帶來新的思考。相信在他的努力下,彭石林會(huì)成為文壇上的一股強(qiáng)力推動(dòng)力量,并對(duì)社會(huì)產(chǎn)生重要的影響。
時(shí)尚界一直是一個(gè)不斷創(chuàng)新和變化的領(lǐng)域,而金彭旗下品牌昆彭不僅在這個(gè)領(lǐng)域取得了突破性的成就,更是開創(chuàng)了一個(gè)全新的時(shí)尚篇章。旗下的各個(gè)系列產(chǎn)品引領(lǐng)著時(shí)尚潮流,賦予人們與眾不同的個(gè)性和風(fēng)格。
昆彭品牌以其獨(dú)特的設(shè)計(jì)理念而聞名,通過將傳統(tǒng)元素與現(xiàn)代風(fēng)格相融合,創(chuàng)造出一系列獨(dú)特而又時(shí)尚的產(chǎn)品。無論是服裝、飾品還是配件,昆彭都始終保持創(chuàng)新的步伐,不斷顛覆傳統(tǒng)的審美觀念。品牌的設(shè)計(jì)師團(tuán)隊(duì)以前瞻性的眼光和卓越的技術(shù),將藝術(shù)與時(shí)尚完美結(jié)合,帶來了一種全新的時(shí)尚體驗(yàn)。
昆彭品牌的產(chǎn)品線非常豐富多樣,涵蓋了服裝、鞋履、手表、眼鏡、皮具等多個(gè)領(lǐng)域。無論你是追求簡(jiǎn)約風(fēng)格的時(shí)尚達(dá)人,還是喜歡個(gè)性張揚(yáng)的潮流愛好者,昆彭都能滿足你的需求。各個(gè)系列產(chǎn)品都經(jīng)過精心的設(shè)計(jì)和制作,以提供高品質(zhì)和耐用性為目標(biāo),時(shí)刻關(guān)注著細(xì)節(jié)的完美。
金彭旗下品牌昆彭一直致力于引領(lǐng)時(shí)尚潮流,通過與眾多國(guó)際頂尖設(shè)計(jì)師的合作,不斷推出獨(dú)具時(shí)尚感和藝術(shù)品質(zhì)的產(chǎn)品。無論是時(shí)裝秀還是廣告宣傳,昆彭都能給人們帶來震撼和驚喜。品牌以其獨(dú)特風(fēng)格和高端形象,在時(shí)尚界樹立起了嶄新的標(biāo)桿。
金彭旗下的昆彭品牌不僅是時(shí)尚界的領(lǐng)導(dǎo)者,更是傳承著金彭文化的使者。金彭一直秉承著卓越品質(zhì)和對(duì)細(xì)節(jié)的追求,將這些理念融入到昆彭品牌的每個(gè)產(chǎn)品中。昆彭所傳達(dá)的不僅是時(shí)尚和個(gè)性,更是對(duì)藝術(shù)和美的追求。這種獨(dú)特的文化基因使昆彭與眾不同,成為了時(shí)尚界的瑰寶。
展望未來,金彭旗下品牌昆彭將繼續(xù)以開拓創(chuàng)新的姿態(tài)發(fā)展,在設(shè)計(jì)和技術(shù)上不斷突破界限。品牌將繼續(xù)與更多頂尖設(shè)計(jì)師和藝術(shù)家合作,推出更多令人驚嘆的產(chǎn)品。同時(shí),昆彭還將加強(qiáng)國(guó)際市場(chǎng)的開拓,向全球傳遞金彭文化的獨(dú)特魅力。
無論是時(shí)尚達(dá)人還是普通消費(fèi)者,昆彭都能滿足你對(duì)時(shí)尚和個(gè)性的追求。選擇昆彭,選擇與眾不同,選擇開創(chuàng)時(shí)尚界新篇章!
線路1:從849路 (寶山醫(yī)院站)上車,坐20站至(聞喜路站)下車線路2:從159路 (盤古路友誼支路站)上車,坐22站至(三泉路臨汾路站)下車線路3:從地鐵3號(hào)線 (友誼路站)上車,坐8站至(江灣鎮(zhèn)站)下車,步行約5分鐘到換乘點(diǎn) 轉(zhuǎn)850路 (江灣鎮(zhèn)站)上車,坐6站至(共和新路站)下車
彭鳳仙:中國(guó)文學(xué)中一位引人注目的女作家
彭鳳仙是中國(guó)文學(xué)界備受矚目的女作家之一。她以其深刻的洞察力和獨(dú)特的創(chuàng)作風(fēng)格,贏得了廣大讀者的喜愛和贊賞。本文將介紹彭鳳仙的生平和作品,探討她在中國(guó)文學(xué)史上的地位和影響。
彭鳳仙于XXXX年出生在中國(guó)一個(gè)知識(shí)分子家庭。在她的成長(zhǎng)過程中,她對(duì)文學(xué)產(chǎn)生了濃厚的興趣。她自幼喜歡閱讀,尤其是中國(guó)古代文學(xué)作品。這種深厚的文學(xué)底蘊(yùn)成為了她后來成為一名作家的基石。
彭鳳仙在大學(xué)學(xué)習(xí)期間,選擇了文學(xué)專業(yè)。她在學(xué)校期間表現(xiàn)出色,經(jīng)常在文學(xué)社團(tuán)中展示自己的才華。畢業(yè)后,彭鳳仙決定全職投身于寫作事業(yè)。她的第一部小說出版后,立即獲得了評(píng)論界的好評(píng),奠定了她在文學(xué)圈的地位。
彭鳳仙的作品涵蓋了廣泛的主題,包括愛情、心理、社會(huì)問題等。她以其細(xì)膩的描寫和深入的思考,將讀者帶入角色的內(nèi)心世界,讓人產(chǎn)生共鳴。
在彭鳳仙的小說中,她經(jīng)常通過生動(dòng)的故事情節(jié)和豐富的人物形象,展現(xiàn)出不同社會(huì)群體的命運(yùn)和心理變化。她對(duì)人性的探索和對(duì)社會(huì)現(xiàn)實(shí)的關(guān)注,使她的作品具有強(qiáng)烈的現(xiàn)實(shí)意義。
彭鳳仙的作品不僅僅是文學(xué)作品,更是對(duì)中國(guó)社會(huì)的一種觀察和批判。她通過筆下的人物和故事,揭示了社會(huì)問題的根源和人們的命運(yùn)。她的作品給人以啟示,引發(fā)人們對(duì)社會(huì)現(xiàn)狀的思考。
彭鳳仙的作品也對(duì)中國(guó)文學(xué)史產(chǎn)生了重要影響。她開創(chuàng)了一種新的文學(xué)風(fēng)格,將現(xiàn)實(shí)主義與浪漫主義相結(jié)合,創(chuàng)作出獨(dú)具一格的作品。她的獨(dú)特視角和才華,為中國(guó)文學(xué)注入了新的活力。
彭鳳仙是中國(guó)文學(xué)界的一顆璀璨的明星。她以其出色的創(chuàng)作才華和對(duì)社會(huì)問題的關(guān)注,贏得了廣大讀者的贊賞和認(rèn)可。她的作品不僅具有文學(xué)價(jià)值,更具有社會(huì)意義。相信在未來的歲月里,彭鳳仙將繼續(xù)創(chuàng)作出更多令人期待的精彩作品。
彭假發(fā):一位備受爭(zhēng)議的假發(fā)商家
在時(shí)尚界,假發(fā)一直是備受關(guān)注的話題之一。無論是用于造型變化或者美容需求,假發(fā)都成為許多人的選擇。然而,市場(chǎng)上假發(fā)的質(zhì)量良莠不齊,消費(fèi)者常常需要面對(duì)各種選擇和挑戰(zhàn)。今天,我們聚焦于一位備受爭(zhēng)議的假發(fā)商家——彭假發(fā),探討其背后的故事和影響。
據(jù)了解,彭假發(fā)是一家專注于設(shè)計(jì)和銷售各類假發(fā)產(chǎn)品的品牌。成立于二十年前,該品牌在短時(shí)間內(nèi)就迅速嶄露頭角,吸引了大批消費(fèi)者的關(guān)注。其以創(chuàng)新設(shè)計(jì)、優(yōu)質(zhì)材料和多樣化款式而聞名于行業(yè)內(nèi)外。
作為一家假發(fā)品牌,彭假發(fā)的產(chǎn)品特點(diǎn)在于注重細(xì)節(jié)和舒適度。無論是長(zhǎng)發(fā)還是短發(fā),卷發(fā)還是直發(fā),該品牌的假發(fā)都能滿足消費(fèi)者不同的需求。此外,彭假發(fā)還推出了智能假發(fā)系列,結(jié)合了科技與時(shí)尚的元素,備受年輕消費(fèi)者青睞。
在競(jìng)爭(zhēng)激烈的假發(fā)市場(chǎng),產(chǎn)品的品質(zhì)和售后服務(wù)顯得尤為重要。彭假發(fā)以嚴(yán)格的質(zhì)量控制和完善的售后保障體系著稱。無論是產(chǎn)品質(zhì)量問題還是售后需求,消費(fèi)者都能得到及時(shí)有效的解決方案。
關(guān)于彭假發(fā)的口碑,各種褒貶不一。一些消費(fèi)者贊揚(yáng)其產(chǎn)品質(zhì)量和款式多樣性,認(rèn)為是物有所值;而另一些消費(fèi)者卻抱怨售后服務(wù)不夠及時(shí)和產(chǎn)品質(zhì)量參差不齊。作為消費(fèi)者,選擇一個(gè)值得信賴的品牌確實(shí)需要謹(jǐn)慎考慮。
作為一家年輕而充滿活力的假發(fā)品牌,彭假發(fā)將面臨更多的挑戰(zhàn)和機(jī)遇。未來,該品牌計(jì)劃進(jìn)一步擴(kuò)大產(chǎn)品線,并加強(qiáng)與消費(fèi)者的溝通和互動(dòng)。同時(shí),彭假發(fā)將不斷提升產(chǎn)品質(zhì)量和服務(wù)水平,以贏得更多消費(fèi)者的青睞。
綜上所述,彭假發(fā)作為一家備受爭(zhēng)議的假發(fā)商家,其產(chǎn)品質(zhì)量、市場(chǎng)定位和售后服務(wù)備受關(guān)注。消費(fèi)者在選擇假發(fā)產(chǎn)品時(shí),需謹(jǐn)慎考量各方面因素,并選擇適合自己的產(chǎn)品。希望彭假發(fā)在未來能夠不斷發(fā)展壯大,為消費(fèi)者帶來更優(yōu)質(zhì)的假發(fā)體驗(yàn)。
之前看了Mahout官方示例 20news 的調(diào)用實(shí)現(xiàn);于是想根據(jù)示例的流程實(shí)現(xiàn)其他例子。網(wǎng)上看到了一個(gè)關(guān)于天氣適不適合打羽毛球的例子。
訓(xùn)練數(shù)據(jù):
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
檢測(cè)數(shù)據(jù):
sunny,hot,high,weak
結(jié)果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代碼調(diào)用Mahout的工具類實(shí)現(xiàn)分類。
基本思想:
1. 構(gòu)造分類數(shù)據(jù)。
2. 使用Mahout工具類進(jìn)行訓(xùn)練,得到訓(xùn)練模型。
3。將要檢測(cè)數(shù)據(jù)轉(zhuǎn)換成vector數(shù)據(jù)。
4. 分類器對(duì)vector數(shù)據(jù)進(jìn)行分類。
接下來貼下我的代碼實(shí)現(xiàn)=》
1. 構(gòu)造分類數(shù)據(jù):
在hdfs主要?jiǎng)?chuàng)建一個(gè)文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數(shù)據(jù)傳到hdfs上面。
數(shù)據(jù)文件格式,如D1文件內(nèi)容: Sunny Hot High Weak
2. 使用Mahout工具類進(jìn)行訓(xùn)練,得到訓(xùn)練模型。
3。將要檢測(cè)數(shù)據(jù)轉(zhuǎn)換成vector數(shù)據(jù)。
4. 分類器對(duì)vector數(shù)據(jù)進(jìn)行分類。
這三步,代碼我就一次全貼出來;主要是兩個(gè)類 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";
/*
* 測(cè)試代碼
*/
public static void main(String[] args) {
//將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換成 vector數(shù)據(jù)
makeTrainVector();
//產(chǎn)生訓(xùn)練模型
makeModel(false);
//測(cè)試檢測(cè)數(shù)據(jù)
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//將測(cè)試數(shù)據(jù)轉(zhuǎn)換成序列化文件
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參數(shù)是,是否遞歸刪除的意思
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);
}
//將序列化文件轉(zhuǎn)換成向量文件
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參數(shù)是,是否遞歸刪除的意思
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("序列化文件轉(zhuǎn)換成向量失敗!");
System.out.println(2);
}
}
public static void makeTrainVector(){
//將測(cè)試數(shù)據(jù)轉(zhuǎn)換成序列化文件
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參數(shù)是,是否遞歸刪除的意思
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);
}
//將序列化文件轉(zhuǎn)換成向量文件
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參數(shù)是,是否遞歸刪除的意思
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("序列化文件轉(zhuǎn)換成向量失敗!");
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參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
if(fs.exists(label)){
//boolean參數(shù)是,是否遞歸刪除的意思
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("生成訓(xùn)練模型失敗!");
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("檢測(cè)數(shù)據(jù)構(gòu)造成vectors初始化時(shí)報(bào)錯(cuò)。。。。");
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時(shí)表示總文檔數(shù)
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("檢測(cè)所屬類別是:"+getCheckResult());
}
}