matlab tf-idf,java 兑现tfidf
java 实现tfidf
tfidf 做自然语言理解的经常用。文档的作为权重计算,
许多初学者搞不清楚,权重计算特征选择。
针对文本分类而言 作为很简单的说明,特征选择都跟 类别有关比如 卡方 信息增益
而权重计算则与类别无关 比如 tfidf,tf
具体公式请参看 http://zh.wikipedia.org/wiki/TF-IDF
下面代码 写的比较粗陋。高手请避开。,,,,,
训练集可以上搜狗数据集上下载
写完以后感觉还是matlab 比较爽啊。。几行 解决java100多行的代码
public class TfIdfcomputor {
static String path = "E:\\训练集\\train\\";
static String vsmpath = "E:\\训练集\\vsm\\vsm.txt";
//static String path = "E:\\训练集\\SogouC.reduced\\Reduced";
// static String path ="E:\\训练集\\SogouC.mini\\Sample";
static Map> DFdic = new HashMap();
static HashMap>> dic = new HashMap();
static int DCOUNT;
static HashMap idfDic = new HashMap();
static Map> TFIDFdic = new HashMap();
// static Map> Simpledic= new HashMap();
public static void main(String[] args) throws IOException {
TfIdfcomputor tf = new TfIdfcomputor();
File[] Filelist = tf.readData(path);
DCOUNT = Filelist.length;
tf.readir(Filelist);
System.out.println("DFdic");
tf.computeIDF(dic);
tf.ComputeTFIDF();
/* for( String s :TFIDFdic.keySet())
{
Map map = TFIDFdic.get(s);
for(Object key :map.keySet() )
{
System.out.println("file "+s +"word "+ key+" tfidf "+map.get(key));
}
}*/
System.out.println("计算完毕开始输出");
tf.toLibData();
}
public void readir(File[] dir) throws IOException {
File[] fileList = dir;
for(File f :fileList){
System.out.println(f.getPath());
}
for (int i = 0; i < fileList.length; i++) {
File f = fileList[i];
//System.out.println(f.getPath());
String[] textword = cutWord(FiletoText(f.getPath()));
Map tf = computeTf(textword);
DFdic.put(f.getPath(), tf);
addDic(f.getPath(), tf);
}
System.out.println("TF PROCESS IS OVER");
System.out.println(dic.size());
for (Object o : dic.keySet()) {
System.out.println(o);
List list = dic.get(o);
for (Object l : list) {
Map pair = (Map) l;
for (Object p : pair.keySet()) {
/*System.out.println("key" + (String) o + "..."
+ "filepath...." + p + "tf..." + pair.get(p));*/
}
}
}
}
public String FiletoText(String path) throws IOException {
File f = new File(path);
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(f), "GB2312"));
String result = "";
String temp;
while ((temp = br.readLine()) != null) {
result = result + temp;
}
br.close();
return result;
}
public String[] cutWord(String text) throws IOException {
MMAnalyzer analyzer = new MMAnalyzer();
String temp = analyzer.segment(text, "|");
//System.out.println(temp);
String[] result = temp.split("\\|");
/*
* for(String s :result ) { System.out.println(s); }
*/
return result;
}
public HashMap computeTf(String[] textword) {
double size = textword.length;
HashMap map = new HashMap();
for (int i = 0; i < textword.length; i++) {
//System.out.println(textword[i]);
if (map.containsKey(textword[i])) {
Integer count = map.get(textword[i]);
map.put(textword[i], count + 1);
} else {
map.put(textword[i], 1);
}
}
HashMap result = new HashMap();
for (Object o : map.keySet()) {
Integer temp = map.get(o);
//System.out.println((String) o + "count..." + temp);
result.put((String) o, temp / size);
//System.out.println((String) o + "tf..." + result.get(o));
}
return result;
}
public void addDic(String path, Map tf) {
//System.out.println(",,,,,,,,,,,,,");
for (Object o : tf.keySet()) {
if (dic.containsKey((String) o)) {
ArrayList list = (ArrayList) dic.get(o);
HashMap map = new HashMap();
map.put(path, (Double) tf.get((String) o));
list.add(map);
dic.put((String) o, list);
} else {
HashMap map = new HashMap();
map.put(path, (Double) tf.get((String) o));
ArrayList list = new ArrayList>();
list.add(map);
dic.put((String) o, list);
}
}
}
public static File[] readData(String path) {
int size = 0;
File[] floderdir = new File(path).listFiles();
ArrayList list = new ArrayList();
for (File f : floderdir) {
// size = size+(int)f.length();
File[] childdir = f.listFiles();
for (File file : childdir) {
list.add(file);
}
}
size = list.size();
File[] fdir = new File[size];
for (int i = 0; i < size; i++) {
fdir[i] = (File) list.get(i);
}
return fdir;
}
public void computeIDF(HashMap>> map) {
for (String key : map.keySet()) {
List list = map.get(key);
double hasCount = (double) list.size();
double idf = DCOUNT / hasCount;
idfDic.put(key, idf);
}
}
public void ComputeTFIDF() {
for (String filepath : DFdic.keySet()) {
Map filedic = DFdic.get(filepath);
HashMap tfidfPair = tfidfPair = new HashMap();
for (Object key : filedic.keySet()) {
double tf = (Double) filedic.get(key);
double idf = idfDic.get((String) key);
double tfidf = tf* Math.log(idf);
//System.out.println( key+"tf" + tf + "idf" + idf + "tfidf" + tfidf);
tfidfPair.put((String) key, tfidf);
}
//System.out.println(tfidfPair.size());
TFIDFdic.put(filepath, tfidfPair);
}
}
public void toLibData() throws IOException// 转化成libsvm格式;
{
int count = 0;
// int size =dic.entrySet().size();
List wordList = new ArrayList();
for (String word : dic.keySet()) {
wordList.add(word);
System.out.println("worddic add" + word);
}
// System.out.println("total word is"+wordList.size());
BufferedWriter bw = new BufferedWriter(
new FileWriter(new File(vsmpath)));
/*
* String [] wordList = new String[size]; int num=0; for(String word:
* dic.keySet()) { wordList[num]=word; num++;
* System.out.println("worddic add"+word); }
*/
String vsm = "";
for (String filename : TFIDFdic.keySet()) {
String lable = new File(filename).getParentFile().getName();
Map map = TFIDFdic.get(filename);// 获取某片文章对应的tfidf
vsm = vsm + lable + " ";
for (int i = 0; i < wordList.size(); i++) {
// System.out.println( "map.."+ map.size());
// String temp =wordList[i];
// System.out.println("temp"+ temp);
String temp = (String) wordList.get(i);
if (map.containsKey(temp)) {
vsm = vsm + i + ":" + map.get(temp) + " ";
// System.out.println(filename + "...." + temp + "...."+
// map.get(temp) + "...");
}
}
count++;
vsm = vsm + "\n";
bw.write(vsm);
vsm = "";
System.out.println("format" + " " + count + " " + filename);
}
System.out.println("begin output");
// BufferedWriter bw = new BufferedWriter(new FileWriter(new
// File(vsmpath)));
// bw.write(vsm);
System.out.println(".............................");
// System.out.println(vsm);
bw.close();
}
}
matlab tf-idf,java 兑现tfidf相关推荐
- 利用JAVA计算TFIDF和Cosine相似度-学习版本
写在前面的话,既然是学习版本,那么就不是一个好用的工程实现版本,整套代码全部使用List进行匹配效率可想而知. [原文转自]:http://computergodzilla.blogspot.com/ ...
- tf-idf词向量和bow_使用词袋Bow和TF IDF进行多标签分类
tf-idf词向量和bow 1.加载数据 (1. Load the data) For this study, we are using Kaggle data for Toxic Comment C ...
- Hanlp分词实例:Java实现TFIDF算法
2019独角兽企业重金招聘Python工程师标准>>> 算法介绍 最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理. 关于TFIDF算法的介绍可以参考这篇 ...
- java hanlp分词_Hanlp分词实例:Java实现TFIDF算法
算法介绍 最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理. 关于TFIDF算法的介绍可以参考这篇博客http://www.ruanyifeng.com/blog/2013 ...
- java实现 tf-idf
1.前言 TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术.TF意思是词频(Term Frequency), ...
- 搜索引擎:文本分类——TF/IDF算法
原理 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类.TFIDF实际上是:TF * IDF,TF ...
- 关键词提取算法—TF/IDF算法
关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...
- 【笔记】手敲版 TF IDF
注1: 1. 涉及计算向向量夹角 [笔记]向量点乘(内积)和叉乘(外积.向量积):对两个向量执行点乘运算,是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量:叉乘结果是一个向量,它垂 ...
- matlab中调用java代码_Matlab中调用第三方Java代码
在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...
最新文章
- 非线性优化:徒手实现LM算法
- java使用其他项目的对象,Java对象的复制方法总结
- java android 数组_android中数组的定义与使用
- Linux permission denied解决方法
- gns3 查看网关_gns3常用命令
- webservice-概念性学习(一)
- springmvc二: @RequestMapping
- About JXTA message reliable design
- 【Python】这10个Python性能调优的小技巧,你知道几个?
- 课堂练习 5-22 团队如何做决定
- 一个Java快速排序实现的调试
- centos静默安装oracle关于报错UnsatisfiedLinkError exception loading native library:njni10
- CCNA-第十三篇-NAT-上
- 3.5k欧/m,HIIT 博士后招募,共48个项目可选
- JS的基本语法知识概括(ECMA、DOM、BOM)
- How to Configure Eclipse for Python --- 在eclipse中如何配置pydev
- 谷歌用AI诊断早期肺癌超越人类医生,登上Nature子刊
- PHP图形图像的典型应用 --常用图像的应用(统计图)
- (数字IC)低功耗设计入门(五)——RTL级低功耗设计(续)
- qq表情左右滑动php,基于jQuery实现的QQ表情插件_jquery