句子相似度计算的几种方法
2017-08-09 19:16
253 查看
雅可比相似度,余弦相似度,带tfidf的余弦相似度
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# created by fhqplzj on 2017/07/22 上午12:23
import numpy as np
from scipy.linalg import norm
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
def jaccard_similarity(s1, s2):
"""
计算两个句子的雅可比相似度
:param s1:
:param s2:
:return:
"""
vectorizer = CountVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = vectorizer.fit_transform(corpus).toarray()
numerator = np.sum(np.min(vectors, axis=0))
denominator = np.sum(np.max(vectors, axis=0))
return 1.0 * numerator / denominator
def cosine_similarity_tf(s1, s2):
"""
计算两个句子的TF余弦相似度
:param s1:
:param s2:
:return:
"""
vectorizer = CountVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = vectorizer.fit_transform(corpus).toarray()
return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))
def cosine_similarity_tfidf(s1, s2):
"""
计算两个句子的TFIDF余弦相似度
:param s1:
:param s2:
:return:
"""
vectorizer = TfidfVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = vectorizer.fit_transform(corpus).toarray()
return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))
params = ['a b b c c c', 'b c c d d d']
print jaccard_similarity(*params)
print cosine_similarity_tf(*params)
print cosine_similarity_tfidf(*params)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# created by fhqplzj on 2017/07/22 上午12:23
import numpy as np
from scipy.linalg import norm
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
def jaccard_similarity(s1, s2):
"""
计算两个句子的雅可比相似度
:param s1:
:param s2:
:return:
"""
vectorizer = CountVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = vectorizer.fit_transform(corpus).toarray()
numerator = np.sum(np.min(vectors, axis=0))
denominator = np.sum(np.max(vectors, axis=0))
return 1.0 * numerator / denominator
def cosine_similarity_tf(s1, s2):
"""
计算两个句子的TF余弦相似度
:param s1:
:param s2:
:return:
"""
vectorizer = CountVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = vectorizer.fit_transform(corpus).toarray()
return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))
def cosine_similarity_tfidf(s1, s2):
"""
计算两个句子的TFIDF余弦相似度
:param s1:
:param s2:
:return:
"""
vectorizer = TfidfVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = vectorizer.fit_transform(corpus).toarray()
return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))
params = ['a b b c c c', 'b c c d d d']
print jaccard_similarity(*params)
print cosine_similarity_tf(*params)
print cosine_similarity_tfidf(*params)
相关文章推荐
- Mahout的taste里的几种相似度计算方法
- 推荐系统中常见的几种相似度计算方法和其适用数据
- Mahout的taste里的几种相似度计算方法
- Mahout的taste里的几种相似度计算方法
- Mahout的taste里的几种相似度计算方法
- [推荐系统]mahout中实现的几种相似度计算方法
- Mahout的taste里的几种相似度计算方法
- c/c++在windows下获取时间和计算时间差的几种方法总结
- 关于word2vec 句子相似度计算
- 图像相似度计算之哈希值方法OpenCV实现
- 乘法逆元的几种计算方法
- [转]相似度计算常用方法综述
- 几种Python执行时间的计算方法
- 计算组合数的几种方法
- 文本相似度计算基本方法小结
- 结构化大数据的几种计算方法
- 特征向量相似度和距离计算方法
- 对“基于语义依存的汉语句子相似度计算”的优化。
- 计算文件MD5 Checksum的几种方法
- 关于word2vec 句子相似度计算