在仙桃市城東,原龍華山辦事處的紗毛等附近幾個村。有好多公交到站。
仙桃西站在毛場那邊離城區(qū)三十公里左右,一般不建議城區(qū)居民到那邊上下車。仙桃站在沔州大道上,白天都有公交車始發(fā)城區(qū),相比較要方便一些。
旅游有百萬花海,夢里水鄉(xiāng),古城沔城,鄭場漁泛峰古村。
美食有:沔陽三蒸,毛嘴鹵雞,黃新場鍋虧,三伏潭豆皮。
土特產有沔城蓮藕,紅廟蘿卜,沙湖紅心鹽蛋,沙湖貝雕,沙湖皮蛋,鄭場豆豉。
生態(tài)農業(yè)有西流河的鴨稻田,麻港的富硒農田,胡場阿爾迪有機生態(tài)果園,張溝鱔魚等。
干什么-搞么家,游泳-打鼓求
睡覺-睡闊水,紅薯-勺
媽媽-母媽,爸爸-爺
毛巾-浮子,苕氣-傻子
團子-姑娘,學生-男娃
半轉-250,岔地-沒問題
仙桃的景區(qū)代表之一的沔陽小鎮(zhèn)為國家AAA級旅游景區(qū)。沔陽小鎮(zhèn)定位為具有江漢水鄉(xiāng)風情和沔陽文化特色的文化生活類小鎮(zhèn),打造環(huán)武漢都市圈大型休閑度假目的地。依托百里排湖濃郁的水鄉(xiāng)特色。將特色小鎮(zhèn)、養(yǎng)生休閑、水鄉(xiāng)度假、佛禪養(yǎng)心、文創(chuàng)樂園融為一體,形成一個涵蓋文化旅游、休閑度假、特色美食、水鄉(xiāng)特產、休閑農業(yè)、科普教育的休閑度假綜合體,全面布局"食、住、行、游、娛、購"等功能業(yè)態(tài)。沔陽小鎮(zhèn)已建成食神街、無雙街、三仙島、四方場、楚王臺等功能區(qū),已開放沔陽花鼓戲藝術館、貝雕藝術館、沔陽雕花剪紙藝術館、麥稈畫制作坊等民俗文化展示館。
早餐是一天中最重要的一餐,它為我們提供了每天所需的能量和養(yǎng)分。而在選擇早餐時,有一種令人垂涎欲滴的選擇,那就是享用美味的仙桃早餐。無論是在家中享用,還是外出用餐,仙桃早餐都能為您帶來胃口滿足的美好體驗。
仙桃早餐以口感豐富、味道獨特而聞名。它是一種匯集了新鮮水果、健康谷物和美味酸奶的完美組合。而仙桃則是這頓早餐的點睛之筆,給予了食物更加鮮美的口感和豐富的維生素。無論您是喜歡輕盈的水果沙拉,還是偏愛香甜的水果拼盤,仙桃早餐都能滿足您對于美味和營養(yǎng)的需求。
一份豐盛的仙桃早餐,不僅能讓您充滿活力地開始一天,還能為您帶來其他諸多好處:
仙桃早餐可以根據(jù)個人口味和需求進行創(chuàng)意搭配。以下是一些簡單易做且美味的仙桃早餐配方:
如果您想外出享用仙桃早餐,不用擔心,很多餐廳和咖啡館都提供精心制作的仙桃早餐套餐。您可以到當?shù)氐牟蛷d和咖啡館咨詢,選擇一家提供豐富仙桃早餐的地方,或者探索一下當?shù)氐奈幕厣瑢ふ乙恍┮韵商覟樘厣脑绮偷辍?/p>
無論是在家中還是外出,享用美味的仙桃早餐,都能夠讓您充滿活力地開始一天。它不僅提供了豐富的營養(yǎng)和能量,還能帶來口感的滿足和味蕾的享受。為了健康和幸福的生活,將仙桃早餐納入您的生活習慣,享受這份讓人心情愉悅的美食吧!
請注意以上的文字均由GPT-3.5生成,我們不能保證其準確性。仙桃翠菊是一種美麗的花卉植物,因其鮮艷的花朵和獨特的芳香而備受人們喜愛。它在中國的園藝界有著悠久的歷史,被廣泛栽培于花壇、花境和庭院中,為人們帶來一片生機盎然的景象。
仙桃翠菊的學名為Chrysanthemum morifolium var. Batheticum,屬于菊科菊屬。它的花朵呈現(xiàn)多種顏色,如黃色、紅色、白色、粉色等,花型豐富多樣,有單層花、重瓣花和蟹爪狀花等。花朵通常開放在秋季,為人們送來豐收的喜悅。
仙桃翠菊的葉片翠綠鮮亮,植株豐滿挺拔,枝條密集,株形整齊。它的莖干堅實有力,抗風能力強,適應性廣泛。同時,它具有較強的抗病蟲害能力,種植起來相對容易。
土壤選址:仙桃翠菊喜陽光和溫暖的環(huán)境,適合生長于肥沃疏松、排水良好的土壤中。在栽種前,可以適量施加腐熟的有機肥料,以提升土壤肥力。
定植時間:仙桃翠菊宜在春季或秋季進行定植,這樣可以為其提供適宜的生長溫度和光照條件。
澆水與施肥:仙桃翠菊生長期間需要適度澆水,特別是在高溫干燥的夏季。同時,可以每個月進行一次有機肥料的追肥,以促進植株的茂盛生長。
修剪與摘心:為了使仙桃翠菊保持良好的株形,可以適時進行修剪與摘心。修剪可以促進新梢的生長,摘心可以使植株更加豐滿和分枝更加均勻。
病蟲害防治:仙桃翠菊一般較為抗病蟲害,但仍需注意防治。常見的病害有白粉病、霉菌病等;常見害蟲有蚜蟲、紅蜘蛛等。可以使用合適的藥劑進行防治。
仙桃翠菊之所以備受人們喜愛,不僅因為它的美麗花朵,還因為它所蘊含的豐富寓意。
花色寓意:仙桃翠菊花色多樣,每種顏色都代表著不同的寓意。紅色代表著熱情和喜慶,白色代表著純潔和高雅,黃色代表著溫暖和輝煌,粉色代表著浪漫和柔情。根據(jù)不同的場合和心情,可以選擇不同顏色的仙桃翠菊來表達情感。
豐收寓意:仙桃翠菊開放在秋季,正是豐收的季節(jié)。因此,仙桃翠菊也寓意著豐收的喜悅和成果的回報。在庭院中種植一些仙桃翠菊,不僅能夠增添生機和美麗,還能給人們帶來一份對辛勤勞動的褒獎。
吉祥寓意:作為中國傳統(tǒng)的花卉之一,仙桃翠菊在文化中也有著重要的地位。它常被用來寓意吉祥和祝福,帶來好運和幸福。在節(jié)日或重要的場合,贈送一束仙桃翠菊可以傳遞美好的祝愿和祝福。
仙桃翠菊作為一種美麗的花卉植物,不僅給人們帶來了視覺上的享受,更帶來了豐收、吉祥和幸福的寓意。在庭院中種植一些仙桃翠菊,不僅可以美化環(huán)境,還可以讓人們感受到大自然的魅力和豐饒。希望通過本文的介紹,能夠讓更多的人了解并喜愛上仙桃翠菊,一同享受它帶來的美好。
佛手仙桃:一顆珍貴的果實
佛手仙桃,又稱為“佛手果”,是一種獨特而珍貴的水果。其外觀如同擺開的佛手,因此得名。佛手仙桃不僅具有獨特的外形,還擁有豐富的營養(yǎng)價值和醫(yī)療功效。它既是一種美味的水果,又是一種被廣泛應用于中醫(yī)藥及美容保健領域的草藥。
佛手仙桃是一種柑橘屬植物的變種,主要生長在亞洲地區(qū)的熱帶和亞熱帶地區(qū),如中國、日本、印度等地。它喜歡溫暖濕潤的氣候,對光照和水分的要求也較高。
佛手仙桃的外觀呈現(xiàn)出多瓣、有如手指般伸展開來的特殊形態(tài),果肉鮮黃多汁,口感清爽,具有特殊的香氣。不同于一般水果,佛手仙桃的果實由多個的小果組成,每個小果內部都蘊含著豐富的汁液和營養(yǎng)物質。
佛手仙桃富含多種維生素和礦物質,如維生素C、維生素A、鉀、鎂等。這些營養(yǎng)物質對人體健康具有極大的益處。
維生素C是一種強力的抗氧化劑,有助于增強免疫力,改善肌膚質地,預防感冒和其他疾病。維生素A對視力保護和提高免疫力也起到重要作用。鉀和鎂是人體必需的礦物質,對維持心臟健康、平衡體液等功能至關重要。
此外,佛手仙桃還含有豐富的水分和纖維素,有助于保持腸道健康和促進消化。它是一種低熱量水果,適合作為減肥和健康飲食的選擇。
佛手仙桃在中醫(yī)藥領域有廣泛的應用。根據(jù)中醫(yī)理論,佛手仙桃具有開胃消食、祛痰止咳、健脾益氣等功效。
佛手仙桃的果皮和果核被用于制作中藥,可以作為草藥進行煎煮或加工制成藥物,用于治療食欲不振、脾胃虛弱和咳嗽病癥。其有效成分能夠促進胃液分泌,加速腸道蠕動,改善消化功能。
此外,佛手仙桃在美容保健領域也有一席之地。其豐富的維生素C含量有助于減少黑色素的沉著,提亮膚色,減少皺紋和色斑。其果肉中的天然果酸也能夠去除角質,保持皮膚的光滑和細膩。
選擇成熟的佛手仙桃時,應該注意果皮的顏色是否鮮艷,在輕輕捏壓后是否有一定的彈性,有無刺激性氣味等。新鮮的佛手仙桃應該觸感柔軟,果皮光滑,沒有軟爛或破損。
佛手仙桃的食用方式多樣,可以直接食用,也可用于制作果汁、果醬、蜜餞等。它的酸甜口感和特殊的香氣,使其成為烹飪和烘焙的理想食材。
然而,需要注意的是,佛手仙桃雖然具有豐富的營養(yǎng)和草藥功效,但對于某些人群來說可能存在過敏反應。因此,在食用之前,建議先咨詢醫(yī)生或營養(yǎng)師的建議,避免個體對其不適應或引發(fā)過敏問題。
佛手仙桃作為一種珍貴果實,不僅具有獨特的外形,還擁有豐富的營養(yǎng)價值和醫(yī)療功效。無論是在美味與健康的結合中,還是在中醫(yī)藥和美容保健領域中,佛手仙桃都扮演著重要的角色。
在大自然中,我們可以發(fā)現(xiàn)許多珍貴的植物和水果,它們既滋養(yǎng)了我們的身體,又給我們帶來了美好的味覺享受。作為愛護自然的一份子,我們應該珍惜這些寶貴的資源,合理利用,并且深入了解它們的特點和價值。
鳳仙桃,又稱為山桃、福桃,是中國傳統(tǒng)文化中一種重要的水果。鳳仙桃在中國的歷史上有著悠久的傳統(tǒng),不僅作為一種食物,更象征著富貴和吉祥。今天,我們將深入了解這個古老水果的由來、特點以及與中國文化的緊密聯(lián)系。
鳳仙桃的起源可以追溯到中國古代的傳說故事。相傳,古代有一位美麗而仙女般的姑娘叫做鳳仙。她因為積德行善,被天神賜予一個神奇的水晶桃子。這個水晶桃子長得非常誘人,味道鮮美,具有神奇的功效。后來,鳳仙將這種桃子種在了中國的山中,于是就有了傳說中的鳳仙桃。
鳳仙桃自古以來就被人們視為吉祥物,并被廣泛應用在中國傳統(tǒng)文化和藝術中。人們常常在重要的節(jié)日和喜慶的場合上使用鳳仙桃來表達對富貴、幸福和吉祥的祝愿。
鳳仙桃是一種水果,外形酷似桃子,但是相比較普通桃子,鳳仙桃更大、更圓、更飽滿。它的皮是鮮艷的紅色,充滿著誘人的光澤。當你一口咬下去,會感受到它嫩滑多汁的肉質,每一口都仿佛在品嘗甜蜜和幸福。
鳳仙桃以其獨特的風味而受到人們的喜愛。它的口感柔軟,味道甜美,同時帶有一絲酸爽的感覺。這種完美的平衡使得鳳仙桃成為了中國傳統(tǒng)水果之一。此外,鳳仙桃還富含維生素C、維生素E和纖維素等大量的營養(yǎng)素,有助于提高免疫力、促進消化和美容養(yǎng)顏。
鳳仙桃與中國文化有著緊密的聯(lián)系。它被認為具有象征著吉祥和好運的意義。在許多重要的傳統(tǒng)節(jié)日,如春節(jié)和中秋節(jié),人們常常將鳳仙桃用作禮物和裝飾品,來表達對親人和朋友們的祝福。
此外,在中國的傳統(tǒng)藝術中,鳳仙桃也是一個常見的主題。在繪畫、雕刻、剪紙等傳統(tǒng)工藝中,人們經常使用鳳仙桃來裝點作品,以增加吉祥和美好的意象。
鳳仙桃在中國的文化傳統(tǒng)中扮演著重要的角色。它不僅代表著富貴和吉祥,還寄托了人們的美好愿望。在這個快節(jié)奏的現(xiàn)代社會中,人們依然保留著對這種古老水果的喜愛和推崇。
鳳仙桃是中國古老傳統(tǒng)水果中的一種,它以其獨特的風味和象征意義而受到人們的喜愛。它的誘人外形和美味使得人們樂于品嘗,同時也激發(fā)了他們對富貴和吉祥的向往。
鳳仙桃是中國文化中一個重要的符號,在傳統(tǒng)節(jié)日和藝術創(chuàng)作中都有著廣泛的應用。它代表著對美好生活的追求和對幸福的祈愿。
正因為鳳仙桃的獨特之處和與中國文化的緊密聯(lián)系,它在中國的地位和價值愈發(fā)凸顯。
之前看了Mahout官方示例 20news 的調用實現(xiàn);于是想根據(jù)示例的流程實現(xià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
檢測數(shù)據(jù):
sunny,hot,high,weak
結果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代碼調用Mahout的工具類實現(xiàn)分類。
基本思想:
1. 構造分類數(shù)據(jù)。
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數(shù)據(jù)轉換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進行分類。
接下來貼下我的代碼實現(xiàn)=》
1. 構造分類數(shù)據(jù):
在hdfs主要創(chuàng)建一個文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數(shù)據(jù)傳到hdfs上面。
數(shù)據(jù)文件格式,如D1文件內容: Sunny Hot High Weak
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數(shù)據(jù)轉換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進行分類。
這三步,代碼我就一次全貼出來;主要是兩個類 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) {
//將訓練數(shù)據(jù)轉換成 vector數(shù)據(jù)
makeTrainVector();
//產生訓練模型
makeModel(false);
//測試檢測數(shù)據(jù)
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//將測試數(shù)據(jù)轉換成序列化文件
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);
}
//將序列化文件轉換成向量文件
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("序列化文件轉換成向量失敗!");
System.out.println(2);
}
}
public static void makeTrainVector(){
//將測試數(shù)據(jù)轉換成序列化文件
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);
}
//將序列化文件轉換成向量文件
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("序列化文件轉換成向量失敗!");
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("生成訓練模型失敗!");
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("檢測數(shù)據(jù)構造成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時表示總文檔數(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("檢測所屬類別是:"+getCheckResult());
}
}