怎么考法医?这是许多对法医学感兴趣的人常常问到的问题。法医学是一门研究法律与医学交叉领域的学科,对于犯罪侦查与司法审判起着重要的作用。成为一名法医需要具备严密的专业知识和技能,接下来我们将一步步介绍如何考取法医资格。
1. 学术背景要求:
想要成为一名法医,首先需要具备相关的学术背景。在中国,考取法医资格需要拥有医学或法学相关专业的学士学位。常见的专业包括临床医学、法学、生物医学等。在大学期间,你需要学习相关的基础课程,如解剖学、病理学、法律概论等。
2. 通过法医考试:
考取法医资格的第一步是通过国家的法医考试。该考试由司法部主管,每年定期举行。考试内容主要包括法医学基础理论、法医学实践技能、法律法规等。备考期间,你可以参加各类法医学习班,阅读相关教材和学术论文,进行模拟考试以提高应试能力。
3. 实习和培训:
在通过法医考试后,你需要进行实习和培训。许多大学和科研机构都设有法医实习项目,可提供实践机会。在实习期间,你将亲身参与病理解剖、法医技术鉴定等工作,并与资深法医共同合作。这一阶段的经验对于日后的职业发展至关重要。
4. 持续学习和专业发展:
法医学是一个不断发展和更新的领域,因此持续学习和专业发展是非常重要的。作为一名法医,你应该不断阅读最新的研究成果,参加学术会议和培训课程,加强自己的专业素养。此外,你还可以通过发表学术论文、参与科研项目等方式提升自己的学术声誉和影响力。
5. 职业发展:
成为一名法医后,你可以选择在各类单位从事相关工作。法医可以在法院、公安机关、检察院等司法机构工作,协助犯罪侦查和司法审判。此外,一些大医院或科研机构也设有法医科,从事病理诊断和法医技术鉴定。同时,你还可以选择从事法医学教育和研究工作,培养更多的法医人才。
总而言之,成为一名法医需要具备专业的学术背景、通过法医考试,进行实习和培训,并不断进行学习和专业发展。如果你对法医学感兴趣,不妨从现在开始做好准备,追寻你的法医梦想吧!
法医是从事司法鉴定工作的专业人士,承担着对尸体进行解剖、分析和鉴定的重要责任。法医职业要求高度的专业知识和技能,因此,成为一名合格的法医需要通过一系列的考试来验证自己的能力。
那么,法医怎么考?本文将为您深入介绍法医考试的流程和要点。
法医考试根据不同的国家和地区有所差异,主要分为两类:学术考试和职业资格考试。
学术考试是指在大学阶段深入学习法医学知识,并通过考试取得相应的学术证书,如法医学士、硕士或博士学位。这类考试主要考察学生对法医学理论和实践的掌握程度,包括解剖学、病理学、法医毒理学等专业知识。
职业资格考试是指已经获得相关法医学学位的人士,通过参加司法鉴定机构组织的考试,取得法医鉴定专业技术资格证书。这类考试主要考察候选人在法医实践中的能力,包括现场勘查、尸体解剖、临床执业等技术技能。
学术考试是法医学生必须经过的阶段,其内容和要求因不同学校和国家而异。一般来说,学术考试涵盖以下几个方面的知识和技能:
此外,学术考试通常还包括课程学习、实验报告和学术论文的评估,以检验学生的综合能力和研究水平。
已经取得法医学学位的人士可以参加职业资格考试,以获得法医鉴定专业技术资格证书。
职业资格考试的流程主要包括以下几个步骤:
职业资格考试的重点在于实践操作能力和专业素养的评估,因此,考生在备考时应注重实践训练,熟悉法医鉴定工作的各个环节和操作流程,加强自身的综合能力。
要想在法医考试中取得好成绩,考生需要合理安排备考时间,并掌握一些备考技巧。
以下是提高备考效果的几个方法:
通过科学有效的备考方法,考生可以提高备考效果,更好地应对法医考试的挑战。
法医是一门充满挑战和责任的职业,成为一名合格的法医需要通过较为严格的考试流程。本文介绍了法医考试的分类、学术考试的内容和要求,以及职业资格考试的流程和备考方法。
希望通过对法医考试的深入了解,考生能够更好地规划自己的备考策略,并取得优异的成绩。祝愿所有有志于从事法医工作的人们,在未来的考试中取得好成绩,成为优秀的法医专业人士!
法医是一项重要的职业,他们通过科学的方法对犯罪现场进行调查和研究,为司法程序提供证据和支持。如果你对法医学感兴趣,并想知道如何报考成为一名法医,本文将为你提供详细的指南。
首先,让我们先来了解一下法医学。法医学是一门交叉学科,结合了医学、生物学、法律学和化学等多个学科的知识。它的主要任务是通过对尸体、病理标本和物证的检验和分析,揭示死亡的原因、犯罪的手段和证据的真实性。
成为一名法医需要具备一定的学术基础。通常来说,你需要完成本科医学、生物学、化学或相关领域的学位。这些专业将为你奠定深入理解法医学所需的基础知识。
在获得相关学位后,你需要接受专业的法医培训。这包括参加法医学的研究生课程或法医学专业硕士研究生项目。这些培训将帮助你了解法医学的理论知识和实践技能,包括尸体解剖、病理学、法医毒理学和法医病理学等。
在完成专业培训后,你需要进行实习。实习是法医专业发展的关键环节,它将为你提供实践机会,熟悉法医学的工作环境和操作流程。在这个阶段,你将与资深法医师合作,学习如何收集和分析证据,进行尸体解剖和病理检查。
考试和认证是成为一名合格法医的必要步骤。不同国家和地区对法医的要求有所不同,但通常你需要通过国家级或地区级的法医考试。考试内容包括法医学的理论知识和实践技能。通过考试后,你将获得相应的法医资格证书,成为合格的法医师。
成为一名法医并不意味着你的学习和成长就此结束。法医科学不断发展,新的技术和知识不断涌现。为了保持职业水平和专业知识的更新,你需要进行持续的继续教育和专业发展。参加学术会议、培训课程和研究项目,与同行交流和合作,将有助于你成为一名更出色的法医。
通过以上的步骤,你可以成为一名合格的法医,为司法程序提供重要的支持和证据。希望本文的指南对你了���法医职业和报考条件有所帮助。感谢你阅读本文,希望能够对你有所启发和帮助!
法医学尸体检验,是指根据司法机关的要求,由专职法医或司法机关委托的医师,运用医学和有关自然科学知识,对各种暴力死亡或死因不明的尸体进行检査,以判断死亡原因,明确死亡性质,推断死亡时间,分析、认定致伤凶器,并同时进行个人识别,为侦察、审理案件提供证据的检验方法。它包括现场尸体检验和尸体剖验,现场尸体检验是在发现尸体的现场所进行的,而尸体剖验一般应在法医解剖室内进行,特殊情况也可就地进行。
法医学尸体检査的对象包括:(1)暴力死亡或怀疑暴力死亡者。(2)急死或不明原因死亡,而怀疑有他杀可能的。(3)无名尸体需要判断死亡原因和进行个人识别的。(4)交通肇事、工伤事故以及与医疗纠纷有关的尸体。
从专业领域来分的话:
1,法医病理学:通过对尸体进行解剖,提取脏器组织切片进行镜下观察等病理学手段明确死因、死亡时间、死亡方式、凶器类型等司法相关的医学问题,为司法实践提供证据。
2,法医临床学:通过对受到侵害的伤者进行身体检查,结合病历资料等相关材料综合对伤者的身体损伤程度或伤残等级进行鉴定,为司法裁判提供依据。前两种是基层法医的基本业务。
3,法医毒理学/法医毒物分析:通过对血液,胃内容物,尿液,肝脏等人体组织或相关检材进行分析,查明死者或涉案人员体内是否存在某种毒物或毒品,为查明案件事实提供依据。
4,法医物证学:通过对现场、尸体或涉案人员身上提取的检材进行分析,寻找DNA层面存在的联系,将人员和案件事实关联起来,为锁定嫌疑人、侦破案件和司法裁判提供证据和依据;或者在庞大的DNA数据库的支持下为寻找走失人员和打击拐卖儿童案件提供科学依据。DNA技术是近年来法医学发展的热门领域,深受全国各地领导的重视。
5,其他分支学科,如法医昆虫学、法医人类学等等,更多的是应用于具体工作中用以解决具体问题的,根据我的了解,国内并没有专门从事这两个专业的法医岗位(学校教授不算)。
从工作单位分的话:
1,公安系统的法医,从事具体案件的司法鉴定工作,可以有各种专业的细分,具体工作取决于鉴定机构的业务范围,上面说的四种专业在公安系统内都可以找到。
2,检察院、法院的法医,主要从事司法系统内部涉及法医学检验的工作以及卷宗中相关资料的审查。法院已经不再设法医岗位,检察院的法医岗位也在逐渐减少或者合并入其他业务部门。
3,社会鉴定机构是在司法局批准下建立的盈利性机构,每个机构根据自身的经济,设备条件和办公环境条件开展不同方向的业务,所出具的鉴定书与公安系统内的司法鉴定书具有相同效力。在社会鉴定机构工作的法医从事的鉴定业务上述专业全部或部分都可以,只要这个鉴定所有相应的资质。
4,其他单位,比如保险公司,或者经常遇到人身损害损害涉诉案件的公司比如滴滴公司等,需要设立专门岗位来评估法律风险,这时候也会招聘一些具有法医学相关知识的人
宋慈,字惠父,是我国古代杰出的法医学家。建阳(今属福建)人,与理学大师朱熹同乡。早岁习儒,入仕后经历十余任地方官,多负刑狱之责,终于广东经略安抚使。一生经办案件数不胜数。逝世前两年(公元1247年)撰成并刊刻《洗冤集录》五卷。此书是其一生经验、思想的结晶,不仅是中国,也是世界第一部法医学专著。它比意大利人佛图纳图·菲得利写成于公元1602年的同类著作要早350多年。 作者把当时居于世界领先地位的中医药学应用于刑狱检验,并对先秦以来历代官府刑狱检验的实际经验,进行全面总结,使之条理化、系统化、理论化。因而此书一经问世就成为当时和后世刑狱官员的必备之书,几乎被“奉为金科玉律”,其权威性甚至超过封建朝廷颁布的有关法律。750多年来,此书先后被译成朝、日、法、英、荷兰、德、俄等多种文字。直到目前,许多国家仍在研究它。其影响非常深远,在中、外医药学史、法医学史、科技史上留下光辉的一页。其中贯穿着“不听陈言只听天”的求实求真的科学精神,至今仍然熠熠闪光,值得发扬光大。 当时程朱理学盛行。这是一个庞大完整而又十分精致的唯心主义思想体系。宋理宗(公元1225-1264年在位)时,程朱理学被抬到至高无上的地位,成为不可争议的官方统治思想。其代表人物周敦颐、程颢、程颐、朱熹等被分别谥为“元公”、“纯公”、“正公”、“文公”,并从祀孔子庙,荣耀至极。可见此时理学影响之大。
我志愿献身医学,热爱祖国,忠于人民,恪守医德,尊师守纪,刻苦钻研,孜孜不倦,精益求精,全面发展。
坚决拥护中国共产党的绝对领导,矢志献身崇高的人民公安事业,对党忠诚、服务人民、执法公正、纪律严明,为捍卫政治安全、维护社会安定、保障人民安宁而英勇奋斗!
李大宝,由焦俊艳扮演。
法医秦明—中的李大宝。李大宝是一个汉子性格的短发女生,初来乍到并不受boss秦明的待见,但是在后来的办案过程中,姑娘展示了非凡的敏锐度和嗅觉,有时候boss完全拿她当警犬用。加上林涛,三人的办案过程很专业又不会显得太沉闷,三人cp合作棒棒哒,剧中焦俊艳的表现很扎眼。
一般这种角色容易让人定义成傻白甜,但是焦俊艳尺度拿捏得非常准确,关键还是演技在线。焦俊艳是袁姗姗杨幂的同学,袁姗姗说她是班里演技最好的。这段时间焦俊艳和魏大勋合作的—青春警事—正在热播,反响还不错。焦俊艳形象很利落,很适合这种悬疑剧。
戴西女法医系列是一部以女主角戴西为中心的法医犯罪小说系列。通过一系列刺激的故事情节,该系列向读者们展示了法医工作的真实面貌。本文将从多个方面深入探讨戴西女法医系列的魅力所在,以及揭秘真实的法医工作。
戴西女法医系列是由畅销作家编写的犯罪小说系列,主要以女性法医戴西为主角,描绘了她在解决各种复杂犯罪案件中的艰辛努力。这个系列的背景设定在一个现实世界中,贴近真实的法医工作情境,让读者可以感受到真正的法医工作环境和挑战。
戴西女法医系列通过精心构建的案件和情节,展示了法医工作的方方面面。从法医在发现和分析尸体时的细致入微,到使用科学技术手段来解开犯罪谜团,再到与警方合作调查案件的过程中的协作与磨合,该系列通过生动的描写让读者们对法医工作有了更深入的了解。
戴西女法医系列还展现了法医工作中的挑战和责任。法医在解剖尸体和分析证据时需要对细节极其敏感,并且要经常面对令人难以忍受的残忍现实。他们要在破案中扮演着至关重要的角色,通过分析证据寻找凶手,为受害者伸张正义。这种肩负责任的工作也让法医成为犯罪小说中令人钦佩的角色。
除了揭示法医工作的真相,戴西女法医系列还巧妙地融入了对社会问题的探讨。通过某些案件的设定,读者们可以深入思考社会中的不公和偏见,以及犯罪背后的动机和社会影响。这些故事情节让人们更好地认识到犯罪现象的复杂性和背后的各种原因。
戴西女法医系列通过引人入胜的犯罪故事,揭示了法医工作的真实面貌,并深入探讨了社会问题。这个系列不仅让读者们过一把犯罪小说的瘾,更让他们对法医工作充满了敬意和兴趣。希望通过本文的介绍,读者们能对戴西女法医系列和真实的法医工作有更深入的了解。
感谢您阅读本文,希望通过这篇文章,您能对戴西女法医系列和真��的法医工作有更全面的认识。如果您对法医工作感兴趣或对犯罪小说感兴趣,这个系列将会让您充满期待和满足。
之前看了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());
}
}