百度内部的搜索算法已经非常复杂了网站内容构建链接这么做,对排名有帮助已经非常复杂了能全面了解整个搜索算法的人屈指可数互联网能全面了解整个搜索算法的人屈指可数google应该也是同样的情况普通员工一般只了解自己负责的一小部分而同时全面了解两个公司算法的人需要在两个公司搜索部门都干很长时间而且都做到很高职位这样的人还没听说过即使有这样的人对两个公司的算法都了如指掌 你觉得这种核心的东西他会在公开场合说出来吗?下面带你详细了解TF-IDF算法及原理
TF-IDF概念
TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外因特网上的搜寻引擎还会使用基于连结分析的评级方法以确定文件在搜寻结果中出现的顺序。
TF-IDF计算:
TF-IDF反映了在文档集合中一个单词对一个文档的重要性经常在文本数据挖据与信息提取中用来作为权重因子。在一份给定的文件里词频(termfrequency-TF)指的是某一个给定的词语在该文件中出现的频率。逆向文件频率(inversedocument frequencyIDF)是一个词语普遍重要性的度量。某一特定词语的IDF可以由总文件数目除以包含该词语之文件的数目再将得到的商取对数得到。
TF-IDF原理
在一份给定的文件里词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(分子一般小于分母 区别于IDF)以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频而不管该词语重要与否。)
逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF可以由总文件数目除以包含该词语之文件的数目再将得到的商取对数得到。
某一特定文件内的高词语频率以及该词语在整个文件集合中的低文件频率可以产生出高权重的TF-IDF。因此TF-IDF倾向于过滤掉常见的词语保留重要的词语。
TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高并且在其他文章中很少出现则认为此词或者短语具有很好的类别区分能力适合用来分类。TFIDF实际上是:TF * IDFTF词频(Term Frequency)IDF反文档频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率(另一说:TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数)。IDF的主要思想是:如果包含词条t的文档越少也就是n越小IDF越大则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m而其它类包含t的文档总数为k显然所有包含t的文档数n=m+k当m大的时候n也大按照IDF公式得到的IDF的值会小就说明该词条t类别区分能力不强。(另一说:IDF反文档频率(Inverse Document Frequency)是指果包含词条的文档越少IDF越大则说明词条具有很好的类别区分能力。)但是实际上如果一个词条在一个类的文档中频繁出现则说明该词条能够很好代表这个类的文本的特征这样的词条应该给它们赋予较高的权重并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处。
TF-IDF向量空间模型Vector Space Model计算
写一个testscikit.py文件内容如下:
<p># coding:utf-8
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
corpus=["杭州 SEO TF-IDF",
"算法 网站",
"标题 怎么 写 适合 优化 "]
vectorizer=CountVectorizer()
print type(vectorizer.fit_transform(corpus))
print vectorizer.fit_transform(corpus)
print vectorizer.fit_transform(corpus).todense()
这里面CountVectorizer是一个向量计数器
第一个print type(vectorizer.fit_transform(corpus))输出结果如下:
<class 'scipy.sparse.csr.csr_matrix'>
这说明fit_transform把corpus二维数组转成了一个csr_matrix类型(稀疏矩阵)
第二个print vectorizer.fit_transform(corpus)输出结果如下:
(0, 0) 1
(0, 4) 1
(0, 7) 1
(1, 7) 1
(1, 1) 1
(2, 0) 1
(2, 2) 1
(2, 3) 1
(2, 6) 1
(2, 5) 1
这就是稀疏矩阵的表示形式即把二维数组里的所有词语组成的稀疏矩阵的第几行第几列有值
第三个print vectorizer.fit_transform(corpus).todense()输出如下:
[[1 0 0 0 1 0 0 1]
[0 1 0 0 0 0 0 1]
[1 0 1 1 0 1 1 0]]
这就是把稀疏矩阵输出成真实矩阵
下面我们把代码改成:
# coding:utf-8
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
corpus=["杭州 SEO TF-IDF",
"算法 网站",
"标题 怎么 写 适合 优化 "]
vectorizer=CountVectorizer()
csr_mat = vectorizer.fit_transform(corpus)
transformer=TfidfTransformer()
tfidf=transformer.fit_transform(csr_mat)
print type(tfidf)
print tfidf
print tfidf.todense()
TF-IDF算法输出如下:
<class 'scipy.sparse.csr.csr_matrix'>
(0, 7) 0.517856116168
(0, 4) 0.680918560399
(0, 0) 0.517856116168
(1, 1) 0.795960541568
(1, 7) 0.605348508106
(2, 5) 0.467350981811
(2, 6) 0.467350981811
(2, 3) 0.467350981811
(2, 2) 0.467350981811
(2, 0) 0.35543246785
[[ 0.51785612 0. 0. 0. 0.68091856 0. 0. 0.51785612]
[ 0. 0.79596054 0. 0. 0. 0. 0. 0.60534851]
[ 0.35543247 0. 0.46735098 0.46735098 0. 0.46735098 0.46735098 0. ]]
以上就是TF-IDF算法了解这些可以帮助人们知道怎么很好的写网站标题网站标题在关键词优化上面可谓是占比非常大滴成功的优化人员选好网站标题关键词优化能事半功倍哦。。