使用Python实现中文文本相似度计算的方法有哪些
发布时间:2023-12-24 05:24:16
Python中有多种方法可以用于计算中文文本的相似度,下面列举了一些常用的方法,并给出了使用例子。
1. 余弦相似度
余弦相似度是计算两个向量的夹角余弦值,值越接近1表示两个向量越相似。在文本相似度计算中,可以将文本转换为向量表示(如词袋模型或TF-IDF),然后计算向量的余弦相似度。
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# 分词
def seg_words(text):
return ' '.join(jieba.cut(text))
# 计算文本相似度
def text_similarity(text1, text2):
# 分词
seg_text1 = seg_words(text1)
seg_text2 = seg_words(text2)
# 构建TF-IDF向量
vectorizer = TfidfVectorizer()
tfidf = vectorizer.fit_transform([seg_text1, seg_text2])
# 计算余弦相似度
similarity = cosine_similarity(tfidf)[0][1]
return similarity
text1 = '我喜欢打篮球'
text2 = '我爱踢足球'
similarity = text_similarity(text1, text2)
print(similarity)
2. 词向量相似度
词向量表示了词语在语义空间中的分布,可以通过计算词向量的相似度来计算文本的相似度。在中文文本中,可以使用预训练的中文词向量(如Word2Vec、GloVe等)来表示文本中的词语,并计算词向量的相似度。
import jieba
from gensim.models import Word2Vec
# 分词
def seg_words(text):
return jieba.lcut(text)
# 计算文本相似度
def text_similarity(text1, text2, model):
# 分词
seg_text1 = seg_words(text1)
seg_text2 = seg_words(text2)
# 计算词向量的相似度平均值
similarity = model.wv.n_similarity(seg_text1, seg_text2)
return similarity
# 加载预训练的中文词向量
model = Word2Vec.load('zhwiki_word2vec.model')
text1 = '我喜欢打篮球'
text2 = '我爱踢足球'
similarity = text_similarity(text1, text2, model)
print(similarity)
3. Jaccard相似度
Jaccard相似度是计算两个集合的交集与并集之间的比例,值越接近1表示两个集合越相似。在文本相似度计算中,可以将文本转换为词语的集合,然后计算集合的Jaccard相似度。
import jieba
# 分词
def seg_words(text):
return set(jieba.lcut(text))
# 计算文本相似度
def text_similarity(text1, text2):
# 分词
set_text1 = seg_words(text1)
set_text2 = seg_words(text2)
# 计算Jaccard相似度
intersection = len(set_text1 & set_text2)
union = len(set_text1 | set_text2)
similarity = intersection / union
return similarity
text1 = '我喜欢打篮球'
text2 = '我爱踢足球'
similarity = text_similarity(text1, text2)
print(similarity)
4. 编辑距离
编辑距离是计算两个字符串之间的最小编辑操作次数,值越小表示两个字符串越相似。可以使用Python的Levenshtein库来计算字符串的编辑距离。
import Levenshtein
# 计算文本相似度
def text_similarity(text1, text2):
# 计算编辑距离
distance = Levenshtein.distance(text1, text2)
similarity = 1 - distance / max(len(text1), len(text2))
return similarity
text1 = '我喜欢打篮球'
text2 = '我爱踢足球'
similarity = text_similarity(text1, text2)
print(similarity)
这些是常用的用于计算中文文本相似度的方法,根据实际应用需求选择适合的方法进行计算。
