廣電銀通金融電子科技有限公司(簡(jiǎn)稱廣電銀通),是中國(guó)最專業(yè)的金融外包服務(wù)商。在中國(guó),廣電銀通是規(guī)模最大的ATM(銀行自動(dòng)柜員機(jī))和實(shí)力最雄厚的AFC(軌道交通自動(dòng)售檢票)服務(wù)商,是全球領(lǐng)先的貨幣處理設(shè)備及系統(tǒng)解決方案提供商廣電運(yùn)通的全資子公司,總部位于廣州CBD中心區(qū)域——珠江新城。
廣電運(yùn)通創(chuàng)立于1999年,是國(guó)有控股的高科技上市企業(yè),主營(yíng)業(yè)務(wù)覆蓋智能金融、交通出行、公共安全、政務(wù)便民以及大文旅、新零售等領(lǐng)域,致力為全球客戶提供運(yùn)營(yíng)服務(wù)、大數(shù)據(jù)解決方案以及各種智能終端設(shè)備,是國(guó)內(nèi)知名的行業(yè)人工智能解決方案提供商。
廣電監(jiān)控接入廣電網(wǎng)絡(luò)主要通過(guò)以下幾種方式進(jìn)行:
1. 光纖接入:廣電網(wǎng)絡(luò)通常采用光纖作為傳輸介質(zhì),因此監(jiān)控系統(tǒng)可以通過(guò)光纖接入廣電網(wǎng)絡(luò)。這種方式具有傳輸速度快、帶寬大、信號(hào)損耗小等優(yōu)點(diǎn)。光纖接入需要將光纖終端設(shè)備與監(jiān)控設(shè)備的網(wǎng)絡(luò)接口相連。
2. 銅線接入:如果廣電網(wǎng)絡(luò)中存在銅線資源,監(jiān)控系統(tǒng)也可以通過(guò)銅線接入。銅線接入的優(yōu)點(diǎn)是成本相對(duì)較低,但傳輸速度和帶寬可能不如光纖接入。銅線接入需要將監(jiān)控設(shè)備的網(wǎng)絡(luò)接口與銅線終端設(shè)備相連。
3. 無(wú)線接入:部分廣電網(wǎng)絡(luò)覆蓋范圍內(nèi)可能存在無(wú)線信號(hào),監(jiān)控系統(tǒng)可以通過(guò)無(wú)線接入廣電網(wǎng)絡(luò)。無(wú)線接入具有安裝便捷、靈活性高等優(yōu)點(diǎn),但可能受信號(hào)干擾和傳輸距離限制。無(wú)線接入需要將監(jiān)控設(shè)備的無(wú)線網(wǎng)卡與廣電無(wú)線信號(hào)接收設(shè)備相連。
4. 通過(guò)路由器或交換機(jī)接入:如果廣電網(wǎng)絡(luò)中已經(jīng)部署了路由器或交換機(jī),監(jiān)控系統(tǒng)可以通過(guò)這些設(shè)備接入廣電網(wǎng)絡(luò)。這種方式具有較好的穩(wěn)定性和可擴(kuò)展性,但需要確保路由器或交換機(jī)具有足夠的端口和帶寬資源。接入時(shí),將監(jiān)控設(shè)備的網(wǎng)絡(luò)接口與路由器或交換機(jī)的相應(yīng)端口相連。
總之,廣電監(jiān)控接入廣電網(wǎng)絡(luò)的方式有多種,具體采用哪種方式需根據(jù)實(shí)際情況和需求來(lái)選擇。在選擇接入方式時(shí),應(yīng)充分考慮傳輸速度、帶寬、穩(wěn)定性、成本等因素。
長(zhǎng)沙新廣電和湖南廣電在所屬和位置方面存在一些差異。以下是具體的比較:
1. 所屬:湖南廣電是省際衛(wèi)視,而長(zhǎng)沙廣電是長(zhǎng)沙本地電視臺(tái)。
2. 位置:長(zhǎng)沙廣電位于長(zhǎng)沙市開(kāi)福區(qū)洪山橋,而湖南廣電的總部位于湖南省長(zhǎng)沙市開(kāi)福區(qū)馬欄山。
綜上所述,長(zhǎng)沙新廣電和湖南廣電在所屬和位置上有所不同,但都屬于廣播電視系統(tǒng)。
廣電駕校一直以來(lái)都是學(xué)員們選擇學(xué)車的熱門駕校之一。作為一家在行業(yè)內(nèi)擁有良好口碑的駕校,廣電駕校一直秉承著嚴(yán)謹(jǐn)?shù)慕虒W(xué)態(tài)度和專業(yè)的教學(xué)團(tuán)隊(duì),受到了學(xué)員們的廣泛好評(píng)。
廣電駕校注重實(shí)際教學(xué)效果,倡導(dǎo)因材施教,因人而異的教學(xué)理念。無(wú)論學(xué)員的駕駛基礎(chǔ)如何,廣電駕校都能夠根據(jù)學(xué)員的實(shí)際情況量身定制教學(xué)計(jì)劃,幫助學(xué)員快速提升駕駛技能。
廣電駕校擁有一支經(jīng)驗(yàn)豐富、素質(zhì)過(guò)硬的教練團(tuán)隊(duì)。這些教練不僅具有扎實(shí)的駕駛技能,更重要的是能夠耐心細(xì)致地指導(dǎo)學(xué)員,幫助他們克服駕駛中的各種困難和挑戰(zhàn)。
廣電駕校始終堅(jiān)持以學(xué)員為中心,以服務(wù)為宗旨。無(wú)論是在教學(xué)過(guò)程中還是在服務(wù)環(huán)節(jié),廣電駕校都力求做到盡善盡美,讓每一位學(xué)員都能感受到貼心周到的服務(wù)。
廣電駕校為學(xué)員提供多種學(xué)車課程,包括科目一、科目二、科目三等一系列課程。學(xué)員可以根據(jù)自己的實(shí)際情況和需求進(jìn)行選擇,靈活安排學(xué)習(xí)時(shí)間。
廣電駕校的學(xué)費(fèi)政策公開(kāi)透明,不設(shè)繁瑣的附加費(fèi)用,讓學(xué)員清晰明了地了解學(xué)車費(fèi)用構(gòu)成,避免不必要的糾紛和誤解。
總的來(lái)說(shuō),廣電駕校作為一家具有口碑和實(shí)力的駕校,在學(xué)員們心中樹(shù)立了良好的形象。如果您正在考慮選擇一家靠譜的駕校進(jìn)行學(xué)車,廣電駕校無(wú)疑是一個(gè)不錯(cuò)的選擇。
在今天數(shù)字化的時(shí)代,電視已經(jīng)成為了人們生活中必不可少的娛樂(lè)和信息獲取工具。然而,有時(shí)我們可能會(huì)遇到一些問(wèn)題,比如出現(xiàn)了“廣電電視沒(méi)信號(hào)只有廣電菜單”的情況,讓我們感到困惑和不知所措。那么,為什么會(huì)出現(xiàn)這種情況呢?該如何解決呢?
首先,讓我們來(lái)看看廣電電視沒(méi)信號(hào)的可能原因。以下列舉了幾種常見(jiàn)的情況:
當(dāng)出現(xiàn)廣電電視沒(méi)信號(hào)只有廣電菜單的情況時(shí),我們可以嘗試以下幾種解決方法:
首先,檢查天線接口是否松動(dòng)或連接不良。確保天線緊密連接到電視機(jī)的接口上,并且連接處沒(méi)有松動(dòng)。如果發(fā)現(xiàn)有松動(dòng)的地方,可以嘗試重新插拔天線接口,確保連接牢固。
其次,如果天線位置選擇不當(dāng),可能會(huì)導(dǎo)致信號(hào)接收受阻。嘗試將天線放置在較高的位置,避免被樓宇或其他物體遮擋。同時(shí),確保天線的方向指向信號(hào)源。
如果您的天線損壞或老化,那么可能需要更換一根新的天線。選擇一款質(zhì)量好、信號(hào)接收效果好的天線,可以提高信號(hào)的接收質(zhì)量。
如果您使用的是有線電視,那么可能是電視信號(hào)源出現(xiàn)故障。您可以嘗試更換一個(gè)信號(hào)源,或者聯(lián)系當(dāng)?shù)氐挠芯€電視運(yùn)營(yíng)商進(jìn)行咨詢和維修。
有時(shí)候,電視機(jī)的設(shè)置問(wèn)題也會(huì)導(dǎo)致信號(hào)接收不良。您可以嘗試重置電視的設(shè)置,恢復(fù)到出廠設(shè)置,然后重新進(jìn)行設(shè)置。這樣有助于解決一些常見(jiàn)的設(shè)置問(wèn)題。
如果您嘗試了以上方法仍然無(wú)法解決廣電電視沒(méi)信號(hào)的問(wèn)題,那么可能需要尋求專業(yè)幫助。您可以聯(lián)系電視機(jī)品牌的售后服務(wù)中心,或者當(dāng)?shù)氐碾娨暰S修中心,讓專業(yè)人士進(jìn)行檢修和維修。
廣電電視沒(méi)信號(hào)只有廣電菜單可能是由于天線連接不良、天線位置選擇不當(dāng)、天線損壞或老化、電視信號(hào)源故障,以及電視機(jī)設(shè)置問(wèn)題等原因引起的。解決這一問(wèn)題可以通過(guò)檢查天線連接、調(diào)整天線位置、更換天線、檢查電視信號(hào)源以及重置電視設(shè)置等方法。如若問(wèn)題仍然存在,建議您尋求專業(yè)幫助。
近年來(lái),隨著社會(huì)的發(fā)展和科技的進(jìn)步,廣電行業(yè)正迎來(lái)前所未有的機(jī)遇和挑戰(zhàn)。從傳統(tǒng)電視到網(wǎng)絡(luò)視頻,廣播電臺(tái)到流媒體平臺(tái),廣電行業(yè)正面臨著巨大的變革和調(diào)整。這些變化不僅對(duì)廣電行業(yè)自身的發(fā)展產(chǎn)生了深遠(yuǎn)影響,也給觀眾帶來(lái)了更多多樣化的娛樂(lè)和信息選擇。
隨著互聯(lián)網(wǎng)的普及和移動(dòng)設(shè)備的智能化,傳統(tǒng)電視面臨的挑戰(zhàn)日益嚴(yán)峻。觀眾在選擇娛樂(lè)和信息渠道時(shí)越來(lái)越傾向于互聯(lián)網(wǎng)和流媒體平臺(tái)。人們不再局限于固定的電視節(jié)目表,而是可以根據(jù)自己的喜好和時(shí)間自由選擇觀看內(nèi)容。
在這樣的背景下,廣電行業(yè)開(kāi)始加大對(duì)新媒體的投入和轉(zhuǎn)型。越來(lái)越多的傳統(tǒng)電視臺(tái)開(kāi)設(shè)了網(wǎng)絡(luò)視頻平臺(tái),推出了各種互動(dòng)和個(gè)性化的服務(wù)。同時(shí),廣播電臺(tái)也積極拓展自己的互聯(lián)網(wǎng)渠道,通過(guò)網(wǎng)絡(luò)直播和點(diǎn)播等方式與觀眾進(jìn)行互動(dòng)。
與此同時(shí),廣電行業(yè)也面臨著版權(quán)保護(hù)和內(nèi)容監(jiān)管等新挑戰(zhàn)。由于互聯(lián)網(wǎng)的開(kāi)放性和自由性,一些盜版和非法傳播的問(wèn)題浮出水面。廣電行業(yè)需要加強(qiáng)合作,整合資源,共同打擊盜版行為,并提供更加高質(zhì)量的正版內(nèi)容。
盡管廣電行業(yè)面臨著許多挑戰(zhàn),但其發(fā)展前景依然廣闊。一方面,廣電行業(yè)在技術(shù)和內(nèi)容創(chuàng)作方面擁有豐富的經(jīng)驗(yàn)和資源,這是其他行業(yè)無(wú)法替代的優(yōu)勢(shì)。另一方面,廣電行業(yè)也積極探索新的商業(yè)模式和多元化發(fā)展道路。
首先,廣電行業(yè)能夠充分利用互聯(lián)網(wǎng)的技術(shù)優(yōu)勢(shì),為用戶提供更豐富多樣的娛樂(lè)和信息服務(wù)。通過(guò)智能電視、移動(dòng)應(yīng)用和流媒體平臺(tái),觀眾可以隨時(shí)隨地享受高清視頻、獨(dú)家內(nèi)容和個(gè)性化推薦,這將進(jìn)一步增強(qiáng)廣電行業(yè)的吸引力。
其次,廣電行業(yè)還可以通過(guò)多元化的內(nèi)容創(chuàng)作和合作,進(jìn)一步擴(kuò)大市場(chǎng)份額。與互聯(lián)網(wǎng)公司、電影制片廠商和其他媒體機(jī)構(gòu)的合作,可以為廣電行業(yè)帶來(lái)更多的優(yōu)質(zhì)內(nèi)容和獨(dú)家資源。這樣的合作不僅可以提升廣電行業(yè)的影響力,還可以帶來(lái)更多的商業(yè)機(jī)會(huì)。
此外,廣電行業(yè)可以加強(qiáng)國(guó)際合作,進(jìn)一步拓展海外市場(chǎng)。中國(guó)作為世界上最大的廣電市場(chǎng)之一,擁有豐富的文化資源和制作實(shí)力。通過(guò)加強(qiáng)與其他國(guó)家的合作,廣電行業(yè)可以將中國(guó)的電視節(jié)目、電影和紀(jì)錄片傳播到海外,推動(dòng)中國(guó)文化走向世界。
為了應(yīng)對(duì)廣電行業(yè)面臨的挑戰(zhàn)并實(shí)現(xiàn)可持續(xù)發(fā)展,我們提出以下幾點(diǎn)發(fā)展策略:
總之,廣電行業(yè)面臨著前所未有的變革和機(jī)遇。通過(guò)加強(qiáng)技術(shù)創(chuàng)新、加大內(nèi)容創(chuàng)作與保護(hù)力度、拓展海外市場(chǎng)等策略,廣電行業(yè)有望實(shí)現(xiàn)長(zhǎng)期穩(wěn)定的發(fā)展。
1、考試云題庫(kù)支持按知識(shí)點(diǎn)進(jìn)行分類,支持多級(jí)樹(shù)狀子分類;支持批量修改、刪除、導(dǎo)出。支持可視化添加試題,支持Word、Excel、TXT模板批量導(dǎo)入試題。有單選題、多選題、不定項(xiàng)選擇題、填空題、判斷題、問(wèn)答題六種基本題型,還可以變通設(shè)置復(fù)雜組合題型,如材料題、完型填空、閱讀理解、聽(tīng)力、視頻等題型。
面試中被問(wèn)到抗壓力的問(wèn)題時(shí),可以針對(duì)以下問(wèn)題進(jìn)行回答:
1. 你對(duì)壓力的看法是什么?你認(rèn)為良好的壓力管理對(duì)于工作與生活的重要性是什么?
2. 你曾經(jīng)遇到過(guò)最大的壓力是什么?你是如何處理的?取得了什么成果?
3. 你如何預(yù)防壓力的堆積?平時(shí)都有哪些方法舒緩壓力?
4. 你在工作中是如何處理緊急事件的?在緊急事件發(fā)生時(shí),你又是如何平靜處理的?
5. 當(dāng)你感到應(yīng)對(duì)不了困難時(shí),你是如何處理自己的情緒的?是否有過(guò)跟同事或領(lǐng)導(dǎo)尋求幫助的經(jīng)驗(yàn)?
以上問(wèn)題的回答需要切實(shí)體現(xiàn)出應(yīng)聘者的應(yīng)對(duì)壓力的能力、態(tài)度和方法。需要注意的是,壓力是一種正常的工作與生活狀態(tài),壓力管理不是要消除壓力,而是要學(xué)會(huì)合理地面對(duì)與處理壓力,以達(dá)到更好的工作和生活效果。
應(yīng)該是校醫(yī)的工作范疇,急救處理,傳染病知識(shí)和健康教育,除專業(yè)知識(shí)外還會(huì)問(wèn)一些開(kāi)放性的題目,好好準(zhǔ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)行分類。
接下來(lái)貼下我的代碼實(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)行分類。
這三步,代碼我就一次全貼出來(lái);主要是兩個(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)換成向量失?。?#34;);
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("文件序列化失?。?#34;);
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)換成向量失?。?#34;);
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);
}
// 利用貝葉斯算法開(kāi)始分類,并提取得分最好的分類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());
}
}