use*_*384 4 java text similarity tf-idf
我正在使用TF/IDF来计算相似度.例如,如果我有以下两个doc.
Doc A => cat dog
Doc B => dog sparrow
Run Code Online (Sandbox Code Playgroud)
这是正常的,它的相似性是50%,但是当我计算它的TF/IDF时.如下
Doc A的Tf值
dog tf = 0.5
cat tf = 0.5
Run Code Online (Sandbox Code Playgroud)
Doc B的Tf值
dog tf = 0.5
sparrow tf = 0.5
Run Code Online (Sandbox Code Playgroud)
Doc A的IDF值
dog idf = -0.4055
cat idf = 0
Run Code Online (Sandbox Code Playgroud)
Doc B的IDF值
dog idf = -0.4055 ( without +1 formula 0.6931)
sparrow idf = 0
Run Code Online (Sandbox Code Playgroud)
Doc A的TF/IDF值
0.5x-0.4055 + 0.5x0 = -0.20275
Run Code Online (Sandbox Code Playgroud)
Doc B的TF/IDF值
0.5x-0.4055 + 0.5x0 = -0.20275
Run Code Online (Sandbox Code Playgroud)
现在看起来有-0.20275的相似性.是吗?或者我错过了什么?或者也是下一步呢?请告诉我,我也可以计算一下.
我使用了维基百科提到的tf/idf公式
Yuv*_*l F 17
让我们看看我是否得到了你的问题:你想要计算两个文件之间的TF/IDF相似性:
Doc A: cat dog
Run Code Online (Sandbox Code Playgroud)
和
Doc B: dog sparrow
Run Code Online (Sandbox Code Playgroud)
我认为这是你的整个语料库.因此,|D| = 2
对于所有单词,Tfs确实为0.5.为了计算'狗' log(|D|/|d:dog in d| = log(2/2) = 0
的IDF,同样,'cat'和'sparrow'的IDF是log(2/1) = log(2) =1
(我使用2作为日志基础来使这更容易).
因此,'dog'的TF/IDF值将为0.5*0 = 0,'cat'和'sparrow'的TF/IDF值将为0.5*1 = 0.5
要测量两个文档之间的相似性,您应该计算(cat,sparrow,dog)空间中的向量之间的余弦:(0.5,0,0)和(0,0.5,0)并得到结果0.
把它们加起来: