python - 使用 sklearn 如何计算文档和查询之间的 tf-idf 余弦相似度?
问题描述
我的目标是输入 3 个查询并找出哪个查询与一组 5 个文档最相似。
到目前为止,我已经计算了tf-idf
执行以下操作的文件:
from sklearn.feature_extraction.text import TfidfVectorizer
def get_term_frequency_inverse_data_frequency(documents):
allDocs = []
for document in documents:
allDocs.append(nlp.clean_tf_idf_text(document))
vectorizer = TfidfVectorizer()
matrix = vectorizer.fit_transform(allDocs)
return matrix
def get_tf_idf_query_similarity(documents, query):
tfidf = get_term_frequency_inverse_data_frequency(documents)
我现在遇到的问题是我拥有tf-idf
文档,我对查询执行了哪些操作,以便找到与文档的余弦相似度?
解决方案
这是我的建议:
- 我们不必两次拟合模型。我们可以重用相同的矢量化器
TfidfVectorizer
文本清理功能可以直接使用preprocessing
属性 插入。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
vectorizer = TfidfVectorizer(preprocessor=nlp.clean_tf_idf_text)
docs_tfidf = vectorizer.fit_transform(allDocs)
def get_tf_idf_query_similarity(vectorizer, docs_tfidf, query):
"""
vectorizer: TfIdfVectorizer model
docs_tfidf: tfidf vectors for all docs
query: query doc
return: cosine similarity between query and all docs
"""
query_tfidf = vectorizer.transform([query])
cosineSimilarities = cosine_similarity(query_tfidf, docs_tfidf).flatten()
return cosineSimilarities
推荐阅读
- php - php加密和解密cookies
- python - 绘制多列的 seaborn 箱线图并与标准比例进行比较
- haskell - 如何在 Haskell 中打印列表的最后一个元素?
- javascript - 遍历一个对象,只返回某些键及其值
- python - 如何在PANDAS中“默认”更改列顺序?
- java - mvn clean 失败并出现错误“无法删除类”
- airflow - 气流任务是否可以发送上游失败的错误电子邮件通知?
- fortran - 请求的处理器多于允许的数量
- oracle - OCI 和 Azure - 如何通过 Azure APIM 保护 OCI 托管 API
- python - 如何使用 python 编程更改预先存在的 Excel 工作表中的文本对齐方式?