使用 CountVectorizer、TFIDFVectorizer 计算列表之间的文本相似度

Pra*_*een 4 python gensim scikit-learn countvectorizer tfidfvectorizer

我希望看到使用TFIDFVectorizer和 的列表之间的相似性CountVectorizer

我有如下列表:

list1 = [['i','love','machine','learning','its','awesome'],
         ['i', 'love', 'coding', 'in', 'python'],
         ['i', 'love', 'building', 'chatbots']]
list2 = ['i', 'love', 'chatbots']
Run Code Online (Sandbox Code Playgroud)

我希望看到list1[0]and list2list1[1]and list2list1[2]and之间的相似性list2

期望输出应该是这样的[0.99 , 0.67, 0.54]

eus*_*iro 5

文档 中的内容TfidfVectorizer是: “相当于 CountVectorizer 后跟 TfidfTransformer”。

这是代码

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [
    "i love machine learning its awesome",
    "i love coding in python",
    "i love building chatbots",
    "i love chatbots"
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
# print(vectorizer.get_feature_names())
arr = X.toarray()
Run Code Online (Sandbox Code Playgroud)

以及使用余弦相似度的答案

# similarity of yours `list1[0] and list2`  
np.dot(arr[0], arr[3]) # gives ~0.139
# similarity of yours `list1[1] and list2`  
np.dot(arr[1], arr[3]) # gives ~0.159
# similarity of yours `list1[2] and list2`  
np.dot(arr[2], arr[3]) # gives ~0.687
Run Code Online (Sandbox Code Playgroud)

或使用杰卡德相似度CountVectorizer我认为更接近您的期望

from sklearn.metrics import jaccard_score
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
arr = X.toarray()

jaccard_score(arr[0], arr[3]) # gives 0.5
jaccard_score(arr[1], arr[3]) # gives 0.6
jaccard_score(arr[2], arr[3]) # gives 0.9
Run Code Online (Sandbox Code Playgroud)