濫用職權的詞:以權謀私、徇私舞弊、徇私枉法。
濫用職權,是指不法行使職務上的權限的行為,即就形式上屬于國家機關工作人員一般職務權限的事項,以不當目的或者以不法方法,實施違反職務行為宗旨的活動。首先,濫用職權應是濫用國家機關工作人員的一般職務權限,如果行為人實施的行為與其一般的職務權限沒有任何關系,則不展于濫用職權。
其次,行為人或者是以不當目的實施職務行為或者是以不法方法實施職務行為;在出于不當目的實施職務行為的情況下,即使從行為的方法上看沒有超越職權,也屬于濫用職權。最后,濫用職權的行為違反了職務行為的宗旨,或者說與其職務行為的宗旨相悖。
濫用職權罪顧名思義就是指國家機關工作人員利用職務便利,損害國家、集體或第三人利益的犯罪。這是一種特殊主體的犯罪,而我國也制定的有相關的司法解釋。下面,我們一起來看看濫用職權罪司法解釋都有什么內(nèi)容。
最高人民檢察院關于人民檢察院直接受理立案偵查案件立案標準的規(guī)定(試行)(1999.9.9 高檢發(fā)釋字[1999]2號)二、瀆職犯罪案件(一)濫用職權案(第397條)(二)濫用職權罪是指國家機關工作人員超越職權,違法決定、處理其無權決定、處理的事項,或者違反規(guī)定處理公務,致使公共財產(chǎn)、國家和人民利益遭受重大損失的行為。
涉嫌下列情形之一的,應予立案:
1、造成死亡人以上,或者重傷2人以上,或者輕傷5人以上的;
2、造成直接經(jīng)濟損失20萬元以上的;
3、造成有關公司、企業(yè)等單位停產(chǎn)、嚴重虧損、破產(chǎn)的;
4、嚴重損害國家聲譽,或者贊成惡劣社會影響的;
5、其他致使公共財產(chǎn)、國家和人民利益遭受重大損失的情形;
6、徇私舞弊,具有上述情形之一的。
一、本罪是指國家機關工作人員濫用職權,致使公共財產(chǎn)、國家和人民利益遭受重大
損失的行為。
二、本罪的犯罪主體只能是國家機關工作人員。本罪的主觀方面是故意。本罪的客觀方面,表現(xiàn)為濫用職權,致使公共財產(chǎn)、國家和人民利益遭受重大損失的行為。
三、本罪是刑法增設的新罪名。目前尚無司法解釋。
四、按最高人民法院關于罪名的司法解釋,“徇私舞弊罪”已經(jīng)取消,分解到后面的各個新罪名中。本條第二款,只作為一個加重量刑的情節(jié)考慮。但最高人民檢察院1997年12月關于適用刑法分則規(guī)定的犯罪的罪名的意見,保留了這一罪名。現(xiàn)在按最高人民法院的罪名 體系,不保留。但最高人民檢察院以前對詢私舞弊犯罪的司法解釋,對理解此情節(jié)仍有參考作用,故附錄于此,在后面各罪中不再重復引用。
附:最高人民檢察院關于辦理詢私舞弊犯罪案件適用法律若干問回的解釋(1996.5 16 高檢發(fā)研字〔1996〕4號)
為維護社會主義法制,促進嚴格執(zhí)法,懲治腐敗,依法嚴懲拘私舞弊犯罪,根據(jù)中華人民共和國刑法和其他法律的有關規(guī)定,現(xiàn)就辦理拘私舞弊犯罪案件適用法律的若干問題解釋如下:
一、司法工作人員,即依法具有偵訊、檢察、審判和監(jiān)管人犯職務的人員為貪圖錢財、袒護親友、泄憤報復或者其他私情私利,具有下列行為之一的,應當依照刑法第一百八十八條的規(guī)定追究刑事責任:
(一)對明知是無罪的人,即沒有實施危害社會行為,或者根據(jù)刑法第十條規(guī)定,情節(jié)顯著輕微,危害不大,不認為是犯罪以及其他依照刑法規(guī)定不負刑事責任的人,采取偽造、隱匿、毀滅證據(jù)或者其他隱瞞事實、違背法律的手段,以追究刑事責任為目的進行偵查(合采取強制性措施)、起訴、審判等追訴活動的;
(二)對明知是有罪的人,即有確鑿事實證明其實施犯罪的人,采取偽造、隱匿、毀滅證據(jù)或者其他隱瞞事實、違背法律的手段,故意包庇使其不受偵查(合采取強制性措施)、起訴或者審判;故意包庇不使受追訴的犯罪事實,既可以是全部的犯罪事實,也可以是部分犯罪事實或情節(jié);
(三)在審判刑事案件中故意違背事實和法律,枉法進行判決、裁定,使有罪判無罪、無罪判有罪或者重罪輕判、輕罪重判的;
(四)故意違背事實真相,違法變更強制措施,或者雖然采取強制措施,但實際放任不管,致使人犯逃避刑事追訴的;
(五)對依法不該減刑、假釋、暫予監(jiān)外執(zhí)行的犯人,詢私枉法,予以減刑、假釋、暫予監(jiān)外執(zhí)行的;
(六)在審判民事、經(jīng)濟、行政等案件中,故意歪曲事實,違反法律、詢私舞弊,枉法裁判的;
(七)司法機關專業(yè)技術人員在辦案中故意提供虛假材料和意見,或者故意作虛假鑒定,嚴重影響刑事追訴活動的。
二、下列行為,依法應當依照或者比照刑法第一百八十八條的規(guī)定追究刑事責任:
(一)國家工作人員,無論是否司法工作人員,利用職務包庇、窩藏走私、套匯、投機倒把、重大盜竊、販毒、受賄等犯罪分子,隱瞞、掩飾其犯罪事實的;
(二)對于走私、套匯、投機倒把、重大盜竊、販毒、受賄和前項規(guī)定的犯罪人員,有追究責任的國家工作人員不依法處理的;
(三)有查禁賣淫、嫖娼活動職責的國家工作人員,為使犯罪分子逃避處罰,向其通風報信,提供便利的;
(四)國家工作人員利用職務,對明知有關于懲治假冒注冊商標犯罪的補充規(guī)定所列犯罪行為的企業(yè)事業(yè)單位或者個人,故意包庇,使其不受追訴的;對上述補充規(guī)定所列犯罪負有追究責任的國家工作人員,不履行法律所規(guī)定的追究職責,應當比照刑法第一百八十八條規(guī)定追究刑事責任的;
(五)國家工作人員利用職務,對明知犯有關于懲治生產(chǎn)、銷售偽劣商品犯罪的決定所列犯罪行為的企業(yè)事業(yè)單位或者個人故意包庇使其不受追訴的;負有追究責任的國家工作人員對具有上述決定所列犯罪行為的企業(yè)事業(yè)單位或者個人,不履行法律規(guī)定的追究職責,應當比照刑法第一百八十八條規(guī)定追究刑事責任的;
(六)專利局工作人員及有關國家工作人員(如專利管理工作人員),詢私舞弊,情節(jié)嚴重的;
(七)其他法律明確規(guī)定應當依照或者比照詢私舞弊罪追究刑事責任的。
三、為牟取單位或小集體不當利益而實施第一、二條行為的,依法追究直接負責的主管人員和其他直接責任人員的刑事責任。
四、要嚴格掌握法律規(guī)定各種詢私舞弊行為的構(gòu)成條件和情節(jié)。 確定依法追究詢私舞弊犯罪者的刑事責任,要綜合考慮行為給國家、社會和人民利益造成的損失,給有關當事人的生命、人身、財產(chǎn)等方面的權益造成的損失,以及造成的政治影響等方面的情況。情節(jié)顯著輕微、危害不大的,不應以拘私舞弊罪追究刑事責任。對于由于認識水平、工作能力而造成錯案,不應以詢私舞弊罪論處。由于隸屬關系,不得不執(zhí)行上級錯誤指令,造成錯案,如果不具有詢私舞弊的共同故意和行為,也不能以佝私舞弊罪追究刑事責任。
五、與司法工作人員或法律明確規(guī)定依照或比照刑法第一百八十八條規(guī)定追究刑事責任的人員勾結(jié),伙同進行本解釋所列犯罪行為,以共犯追究刑事責任。
六、犯拘私舞弊罪并有受賄、刑訊逼供等行為構(gòu)成犯罪的,應當依法按數(shù)罪并罰原則追究刑事責任。
七、本解釋發(fā)布后辦理的拘私舞弊犯罪案件,按本解釋辦理。本解釋發(fā)布前已按法律規(guī)定處理過的案件,不再變動。
尋釁滋事不是濫用權利。
不管有沒有權利,素質(zhì)低下道德敗壞的人,都會犯尋釁滋事的錯誤,就是故意找別人的茬,惹是生非。
而濫用權利是指犯事之人手中有一定的權利,他才可以濫用,濫用的意思是他沒有在權利規(guī)定范圍之內(nèi)行使職權,而是超出了權利范圍給自己或他人謀取私利,從而觸犯了法律。
雖然這兩種行為都是違法犯罪行為,給他人造成損害,給社會造成不良影響,但本質(zhì)上還是有所不同的。
一手遮天yī shǒu zhē tiān [釋義] 一只手把天遮住。
形容依仗權勢;玩弄手段;蒙蔽群眾。[語出] 明·張岱《馬士英、阮大鋮傳》:“弦光好酒喜肉;日導以荒淫;毫不省外事;而士英一手遮天;靡所不為矣。” [正音] 一;必須讀作“yì”。[辨形] 手;不能寫作“首”。[近義] 欺君罔世 瞞上欺下 橫行霸道 [用法] 用作貶義。用于掌權人。一般作賓語、定語。[結(jié)構(gòu)] 主謂式。[例句] 如今人民已當家做主;地主老財~的時代已一去不復返了。[英譯] cover the sky with one hand
回答如下:案例一:某省市公安局原局長李某濫用職權案
李某曾任某省市公安局局長,在擔任該職務期間,他利用職務之便,收受他人賄賂,違反規(guī)定為他人辦理公務等。李某的行為已經(jīng)構(gòu)成了濫用職權罪。
根據(jù)我國刑法規(guī)定,濫用職權罪的追訴時效為10年。但是,由于李某在擔任公安局局長期間,他的行為一直沒有被發(fā)現(xiàn)和舉報,直到他離職后才被揭發(fā)。因此,李某的濫用職權罪追訴時效應從罪行發(fā)現(xiàn)之日起計算,而不是從他離職之日起計算。最終,李某因濫用職權罪被判處有期徒刑10年。
案例二:某公司總經(jīng)理張某濫用職權案
張某擔任某公司總經(jīng)理期間,濫用職權,利用公司的資源收受他人賄賂,違反規(guī)定為他人辦理公務等。張某的行為已經(jīng)構(gòu)成了濫用職權罪。
根據(jù)我國刑法規(guī)定,濫用職權罪的追訴時效為10年。但是,由于張某的濫用職權行為被發(fā)現(xiàn)后,已經(jīng)超過了10年的追訴時效。因此,張某的案件已經(jīng)屬于過失犯罪,不能再依法追究其刑事責任。
結(jié)論:
濫用職權罪的追訴時效一般為10年,但是在具體的案件中,追訴時效的計算方法會因情況而異。在案件發(fā)現(xiàn)后,應該及時采取措施,盡可能地保留證據(jù),以便在追究刑事責任時能夠有效地證明事實,避免因追訴時效問題導致犯罪嫌疑人逍遙法外。
濫用職權是行政行為違法的表現(xiàn)之一。行政機關的決定,雖然其權限范圍以內(nèi),但不符合法律授予這種權力的目的。
行政機關不能自由地行使權力,法律授予行政機關權力是為了服務于公共利益的目的,以及某個更為具體、特定的目的,行使權力必須符合法律所規(guī)定的目的,否則即構(gòu)成違法行為的權力濫用。
濫用權力是指行使職權過程中違反法律法規(guī)、違背公序良俗、損害人民群眾合法權益等行為。濫用權力存在以下問題:
1. 侵害人民群眾利益和權益,損害政府公信力;
2. 導致執(zhí)法不公,破壞司法公正;
3. 阻礙公共資源的公正配置,損害社會公平正義;
4. 給政府形象帶來負面影響,造成社會不滿和不信任。
針對濫用權力的問題,需要采取以下措施:
1. 提高執(zhí)法與司法的透明度、公正性和職業(yè)性,通過建設審判公開、執(zhí)法公開和系統(tǒng)公開,促進公眾對執(zhí)法、司法和維權過程的監(jiān)督和參與。
2. 加強行政監(jiān)察和司法監(jiān)督,建立健全以監(jiān)察、審判、公檢法合作為主的懲治濫用職權的機制,加強執(zhí)法人員和司法人員的職業(yè)道德和專業(yè)素養(yǎng)培訓。
3. 優(yōu)化權力結(jié)構(gòu)和權責關系,加強權力制約和監(jiān)督,根據(jù)權力性質(zhì)和范圍,各司其職、相互獨立,避免權力過度集中,造成濫用職權的機會和空間。
4. 健全權力問責機制,完善責任追究、紀律處分和法律救濟等制度,使濫用職權者受到懲罰和警示,保護人民群眾的合法權益和社會公共利益。
在許多公司中,領導擁有較高的權力和特權,他們應該充當榜樣,保持公平和透明。然而,有些領導卻濫用自己的職權,侵犯員工的隱私。其中一種常見的行為就是亂動別人的電腦。這種行為不僅侵犯了員工的個人隱私,還對工作環(huán)境和員工之間的信任關系產(chǎn)生了嚴重的負面影響。
公司領導亂動別人電腦的行為可以包括以下幾個方面:
這種濫用行為會給員工和工作環(huán)境帶來很多問題,包括:
為了解決公司領導濫用權力亂動別人電腦的問題,建議以下幾點:
公司領導濫用權力亂動別人電腦的行為嚴重侵犯了員工的個人隱私和工作權益。為了維護一個健康的工作環(huán)境,公司應該加強法律的保護,加強員工教育和培訓,建立有效的投訴渠道,并扎根道德和職業(yè)道德的基礎。只有這樣,才能構(gòu)建一個公平、透明和信任的工作環(huán)境。
之前看了Mahout官方示例 20news 的調(diào)用實現(xiàn);于是想根據(jù)示例的流程實現(xiàn)其他例子。網(wǎng)上看到了一個關于天氣適不適合打羽毛球的例子。
訓練數(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
結(jié)果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代碼調(diào)用Mahout的工具類實現(xiàn)分類。
基本思想:
1. 構(gòu)造分類數(shù)據(jù)。
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數(shù)據(jù)轉(zhuǎn)換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進行分類。
接下來貼下我的代碼實現(xiàn)=》
1. 構(gòu)造分類數(shù)據(jù):
在hdfs主要創(chuàng)建一個文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數(shù)據(jù)傳到hdfs上面。
數(shù)據(jù)文件格式,如D1文件內(nèi)容: Sunny Hot High Weak
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數(shù)據(jù)轉(zhuǎn)換成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ù)轉(zhuǎn)換成 vector數(shù)據(jù)
makeTrainVector();
//產(chǎn)生訓練模型
makeModel(false);
//測試檢測數(shù)據(jù)
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//將測試數(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(){
//將測試數(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("生成訓練模型失敗!");
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ù)構(gòu)造成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());
}
}