你的分析目标是什么?
如果你的最终目标是比较文档之间的相似性(等同于等),则在tfidf计算阶段不必担心文档长度。原因如下。
tfidf表示您的文档处于共同的向量空间中。如果然后计算这些向量之间的余弦相似度,则余弦相似度会补偿不同文档长度的影响。原因是余弦相似度评估向量的方向而不是它们的大小。我可以用Python证明这一点:
考虑以下(愚蠢的)文件:
document1 = "apple apple banana"
document2 = "apple apple apple apple banana banana"
documents = (
document1,
document2)
这些文档的长度不同,但它们的内容相同。
更准确地说,两个文档中术语的相对分布相同,但绝对词频不同。
现在,我们使用tfidf将这些文档表示为一个共同的向量空间:
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
我们使用余弦相似度来评估这些向量化文件的相似性,只考虑它们的方向而不关心它们的大小(即长度)。我正在评估文档一和文档二之间的余弦相似度:
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])
结果为1。请记住,当两个向量的方向完全相同时,它们之间的余弦相似度等于1;当它们正交时,相似度为0;当向量方向相反时,相似度为-1。
在本例中,您可以看到余弦相似度不受文档长度的影响,并捕获了原始文档中术语的相对分布相同的事实!如果您想将此信息表达为文档之间的“距离”,那么只需执行以下操作:
1 - cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])
当文档相似(无论长度如何)时,此值趋近于0;当文档不相似时,此值趋近于1。