Elasticsearch 理解相关性评分(TF-IDF、BM25等)
warning:
这篇文章距离上次修改已过274天,其中的内容可能已经有所变动。
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
# 示例文本
texts = ["Elasticsearch 是一个基于 Apache Lucene 的搜索和分析引擎",
"它使得数据分析和搜索在不同数据类型中变得简单",
"Elasticsearch 是用 Java 开发的,并且在 Apache 许可证下分发"]
# 将文本转换为 TF-IDF 特征向量
vectorizer = TfidfVectorizer(stop_words='english')
tfidf_matrix = vectorizer.fit_transform(texts)
feature_names = vectorizer.get_feature_names_out()
# 打印每个词的 TF-IDF 分数
for doc_index, doc in enumerate(tfidf_matrix):
print("文档", doc_index)
for word_index, word_weight in zip(doc.indices, doc.data):
print(feature_names[word_index], ":", word_weight)
print()
这段代码使用了scikit-learn库中的TfidfVectorizer
来计算给定文本集的TF-IDF特征向量。然后遍历每个文档和每个词的索引及其相关的TF-IDF权重值,打印出来。这有助于理解Elasticsearch中的相关性评分原理。
评论已关闭