- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章TF-IDF理解及其Java实现代码实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
tf-idf 。
前言 。
前段时间,又具体看了自己以前整理的tf-idf,这里把它发布在博客上,知识就是需要不断的重复的,否则就感觉生疏了.
tf-idf理解 。
tf-idf(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术, tfidf的主要思想是:如果某个词或短语在一篇文章中出现的频率tf高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。tfidf实际上是:tf * idf,tf词频(term frequency),idf反文档频率(inverse document frequency)。tf表示词条在文档d中出现的频率。idf的主要思想是:如果包含词条t的文档越少,也就是n越小,idf越大,则说明词条t具有很好的类别区分能力。如果某一类文档c中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m + k,当m大的时候,n也大,按照idf公式得到的idf的值会小,就说明该词条t类别区分能力不强。但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是idf的不足之处. 。
tf公式:
以上式子中是该词在文件中的出现次数,而分母则是在文件中所有字词的出现次数之和.
idf公式:
|d|:语料库中的文件总数 。
:包含词语 ti 的文件数目(即 ni,j不等于0的文件数目)如果该词语不在语料库中,就会导致被除数为零,因此一般情况下使用 。
然后 。
tf-idf实现(java) 。
这里采用了外部插件ikanalyzer-2012.jar,用其进行分词 。
具体代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
package
tfidf;
import
java.io.*;
import
java.util.*;
import
org.wltea.analyzer.lucene.ikanalyzer;
public
class
readfiles {
/**
* @param args
*/
private
static
arraylist<string> filelist =
new
arraylist<string>();
// the list of file
//get list of file for the directory, including sub-directory of it
public
static
list<string> readdirs(string filepath)
throws
filenotfoundexception, ioexception
{
try
{
file file =
new
file(filepath);
if
(!file.isdirectory())
{
system.out.println(
"输入的[]"
);
system.out.println(
"filepath:"
+ file.getabsolutepath());
}
else
{
string[] flist = file.list();
for
(
int
i =
0
; i < flist.length; i++)
{
file newfile =
new
file(filepath +
"\\"
+ flist[i]);
if
(!newfile.isdirectory())
{
filelist.add(newfile.getabsolutepath());
}
else
if
(newfile.isdirectory())
//if file is a directory, call readdirs
{
readdirs(filepath +
"\\"
+ flist[i]);
}
}
}
}
catch
(filenotfoundexception e)
{
system.out.println(e.getmessage());
}
return
filelist;
}
//read file
public
static
string readfile(string file)
throws
filenotfoundexception, ioexception
{
stringbuffer strsb =
new
stringbuffer();
//string is constant, stringbuffer can be changed.
inputstreamreader instrr =
new
inputstreamreader(
new
fileinputstream(file),
"gbk"
);
//byte streams to character streams
bufferedreader br =
new
bufferedreader(instrr);
string line = br.readline();
while
(line !=
null
){
strsb.append(line).append(
"\r\n"
);
line = br.readline();
}
return
strsb.tostring();
}
//word segmentation
public
static
arraylist<string> cutwords(string file)
throws
ioexception{
arraylist<string> words =
new
arraylist<string>();
string text = readfiles.readfile(file);
ikanalyzer analyzer =
new
ikanalyzer();
words = analyzer.split(text);
return
words;
}
//term frequency in a file, times for each word
public
static
hashmap<string, integer> normaltf(arraylist<string> cutwords){
hashmap<string, integer> restf =
new
hashmap<string, integer>();
for
(string word : cutwords){
if
(restf.get(word) ==
null
){
restf.put(word,
1
);
system.out.println(word);
}
else
{
restf.put(word, restf.get(word) +
1
);
system.out.println(word.tostring());
}
}
return
restf;
}
//term frequency in a file, frequency of each word
public
static
hashmap<string,
float
> tf(arraylist<string> cutwords){
hashmap<string,
float
> restf =
new
hashmap<string,
float
>();
int
wordlen = cutwords.size();
hashmap<string, integer> inttf = readfiles.normaltf(cutwords);
iterator iter = inttf.entryset().iterator();
//iterator for that get from tf
while
(iter.hasnext()){
map.entry entry = (map.entry)iter.next();
restf.put(entry.getkey().tostring(),
float
.parsefloat(entry.getvalue().tostring()) / wordlen);
system.out.println(entry.getkey().tostring() +
" = "
+
float
.parsefloat(entry.getvalue().tostring()) / wordlen);
}
return
restf;
}
//tf times for file
public
static
hashmap<string, hashmap<string, integer>> normaltfallfiles(string dirc)
throws
ioexception{
hashmap<string, hashmap<string, integer>> allnormaltf =
new
hashmap<string, hashmap<string,integer>>();
list<string> filelist = readfiles.readdirs(dirc);
for
(string file : filelist){
hashmap<string, integer> dict =
new
hashmap<string, integer>();
arraylist<string> cutwords = readfiles.cutwords(file);
//get cut word for one file
dict = readfiles.normaltf(cutwords);
allnormaltf.put(file, dict);
}
return
allnormaltf;
}
//tf for all file
public
static
hashmap<string,hashmap<string,
float
>> tfallfiles(string dirc)
throws
ioexception{
hashmap<string, hashmap<string,
float
>> alltf =
new
hashmap<string, hashmap<string,
float
>>();
list<string> filelist = readfiles.readdirs(dirc);
for
(string file : filelist){
hashmap<string,
float
> dict =
new
hashmap<string,
float
>();
arraylist<string> cutwords = readfiles.cutwords(file);
//get cut words for one file
dict = readfiles.tf(cutwords);
alltf.put(file, dict);
}
return
alltf;
}
public
static
hashmap<string,
float
> idf(hashmap<string,hashmap<string,
float
>> all_tf){
hashmap<string,
float
> residf =
new
hashmap<string,
float
>();
hashmap<string, integer> dict =
new
hashmap<string, integer>();
int
docnum = filelist.size();
for
(
int
i =
0
; i < docnum; i++){
hashmap<string,
float
> temp = all_tf.get(filelist.get(i));
iterator iter = temp.entryset().iterator();
while
(iter.hasnext()){
map.entry entry = (map.entry)iter.next();
string word = entry.getkey().tostring();
if
(dict.get(word) ==
null
){
dict.put(word,
1
);
}
else
{
dict.put(word, dict.get(word) +
1
);
}
}
}
system.out.println(
"idf for every word is:"
);
iterator iter_dict = dict.entryset().iterator();
while
(iter_dict.hasnext()){
map.entry entry = (map.entry)iter_dict.next();
float
value = (
float
)math.log(docnum /
float
.parsefloat(entry.getvalue().tostring()));
residf.put(entry.getkey().tostring(), value);
system.out.println(entry.getkey().tostring() +
" = "
+ value);
}
return
residf;
}
public
static
void
tf_idf(hashmap<string,hashmap<string,
float
>> all_tf,hashmap<string,
float
> idfs){
hashmap<string, hashmap<string,
float
>> restfidf =
new
hashmap<string, hashmap<string,
float
>>();
int
docnum = filelist.size();
for
(
int
i =
0
; i < docnum; i++){
string filepath = filelist.get(i);
hashmap<string,
float
> tfidf =
new
hashmap<string,
float
>();
hashmap<string,
float
> temp = all_tf.get(filepath);
iterator iter = temp.entryset().iterator();
while
(iter.hasnext()){
map.entry entry = (map.entry)iter.next();
string word = entry.getkey().tostring();
float
value = (
float
)
float
.parsefloat(entry.getvalue().tostring()) * idfs.get(word);
tfidf.put(word, value);
}
restfidf.put(filepath, tfidf);
}
system.out.println(
"tf-idf for every file is :"
);
distfidf(restfidf);
}
public
static
void
distfidf(hashmap<string, hashmap<string,
float
>> tfidf){
iterator iter1 = tfidf.entryset().iterator();
while
(iter1.hasnext()){
map.entry entrys = (map.entry)iter1.next();
system.out.println(
"filename: "
+ entrys.getkey().tostring());
system.out.print(
"{"
);
hashmap<string,
float
> temp = (hashmap<string,
float
>) entrys.getvalue();
iterator iter2 = temp.entryset().iterator();
while
(iter2.hasnext()){
map.entry entry = (map.entry)iter2.next();
system.out.print(entry.getkey().tostring() +
" = "
+ entry.getvalue().tostring() +
", "
);
}
system.out.println(
"}"
);
}
}
public
static
void
main(string[] args)
throws
ioexception {
// todo auto-generated method stub
string file =
"d:/testfiles"
;
hashmap<string,hashmap<string,
float
>> all_tf = tfallfiles(file);
system.out.println();
hashmap<string,
float
> idfs = idf(all_tf);
system.out.println();
tf_idf(all_tf, idfs);
}
}
|
结果如下图:
常见问题 。
没有加入lucene jar包 。
lucene包和je包版本不适合 。
总结 。
以上就是本文关于tf-idf理解及其java实现代码实例的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出.
原文链接:https://www.cnblogs.com/ywl925/archive/2013/08/26/3275878.html 。
最后此篇关于TF-IDF理解及其Java实现代码实例的文章就讲到这里了,如果你想了解更多关于TF-IDF理解及其Java实现代码实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在 Tensorflow(从 v1.2.1 开始)中,似乎有(至少)两个并行 API 来构建计算图。 tf.nn 中有函数,如 conv2d、avg_pool、relu、dropout,tf.laye
我正在处理眼睛轨迹数据和卷积神经网络。我被要求使用 tf.reduce_max(lastconv, axis=2)代替 MaxPooling 层和 tf.reduce_sum(lastconv,axi
TensorFlow 提供了 3 种不同的数据存储格式 tf.train.Feature .它们是: tf.train.BytesList tf.train.FloatList tf.train.In
我正在尝试为上下文强盗问题 (https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part
我在使用 Tensorflow 时遇到问题: 以下代码为卷积 block 生成正确的图: def conv_layer(self, inputs, filter_size = 3, num_filte
我正在将我的训练循环迁移到 Tensorflow 2.0 API .在急切执行模式下,tf.GradientTape替换 tf.gradients .问题是,它们是否具有相同的功能?具体来说: 在函数
tensorflow 中 tf.control_dependencies(tf.get_collection(tf.GraphKeys.UPDATE_OPS)) 的目的是什么? 更多上下文:
我一直在努力学习 TensorFlow,我注意到不同的函数用于相同的目标。例如,为了平方变量,我看到了 tf.square()、tf.math.square() 和 tf.keras.backend.
我正在尝试使用自动编码器开发图像着色器。有 13000 张训练图像。如果我使用 tf.data,每个 epoch 大约需要 45 分钟,如果我使用 tf.utils.keras.Sequence 大约
我尝试按照 tensorflow 教程实现 MNIST CNN 神经网络,并找到这些实现 softmax 交叉熵的方法给出了不同的结果: (1) 不好的结果 softmax = tf.nn.softm
其实,我正在coursera上做deeplearning.ai的作业“Art Generation with Neural Style Transfer”。在函数 compute_layer_styl
训练神经网络学习“异或” 我正在尝试使用“批量归一化”,我创建了一个批量归一化层函数“batch_norm1”。 import tensorflow as tf import nump
我正在尝试协调来自 TF“图形和 session ”指南以及 TF“Keras”指南和 TF Estimators 指南的信息。现在在前者中它说 tf.Session 使计算图能够访问物理硬件以执行图
我正在关注此处的多层感知器示例:https://github.com/aymericdamien/TensorFlow-Examples我对函数 tf.nn.softmax_cross_entropy
回到 TensorFlow = 2.0 中消失了。因此,像这样的解决方案...... with tf.variable_scope("foo"): with tf.variable_scope
我按照官方网站中的步骤安装了tensorflow。但是,在该网站中,作为安装的最后一步,他们给出了一行代码来“验证安装”。但他们没有告诉这段代码会给出什么输出。 该行是: python -c "imp
代码: x = tf.constant([1.,2.,3.], shape = (3,2,4)) y = tf.constant([1.,2.,3.], shape = (3,21,4)) tf.ma
我正在尝试从 Github 训练一个 3D 分割网络.我的模型是用 Keras (Python) 实现的,这是一个典型的 U-Net 模型。模型,总结如下, Model: "functional_3"
我正在使用 TensorFlow 2。我正在尝试优化一个函数,该函数使用经过训练的 tensorflow 模型(毒药)的损失。 @tf.function def totalloss(x): x
试图了解 keras 优化器中的 SGD 优化代码 (source code)。在 get_updates 模块中,我们有: # momentum shapes = [K.int_shape(p) f
我是一名优秀的程序员,十分优秀!