余弦相似度是一种衡量两个向量相似性的方法。在自然语言处理、信息检索、数据挖掘等领域都有广泛应用。
创新互联是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,微信小程序开发,十载建站对小搅拌车等多个方面,拥有多年的网站制作经验。
余弦相似度计算公式如下:
import numpy as np def cosine_similarity(vec1, vec2): dot_product = np.dot(vec1, vec2) norm = np.linalg.norm(vec1) * np.linalg.norm(vec2) return dot_product / norm
其中,vec1
和vec2
都是向量,可以是list
或numpy.ndarray
类型。可以使用numpy.array
方法将list
类型转换为numpy.ndarray
类型。
在进行余弦相似度计算之前,需要对文本进行预处理。一般包括去除停用词、分词等操作。
import jieba import re def preprocess_text(text): # 去除除中文、字母、数字以外的其他字符 pattern = re.compile('[^\u4e00-\u9fa5^a-z^A-Z^0-9]') text = pattern.sub('', text) # 分词 seg_list = jieba.cut(text) # 去除停用词 stopwords = [line.strip() for line in open('stopwords.txt', 'r', encoding='utf-8').readlines()] words = [word for word in seg_list if word not in stopwords] return words
在此代码中,我们使用了jieba
库进行中文分词,同时使用了re
库去除了除中文、字母、数字以外的其他字符。
我们将停用词文本文件读入,并在函数内定义了一个stopwords
变量存储停用词。然后使用列表推导式去除了停用词。
将文本转化为向量是余弦相似度计算的基础。我们可以使用词袋模型或TF-IDF算法生成文本向量。
下面是使用词袋模型生成文本向量的代码:
def get_text_vector(text, words_dict): text_vector = [0] * len(words_dict) for word in text: if word in words_dict: text_vector[words_dict[word]]+= 1 return np.array(text_vector)
其中,输入参数words_dict
为一个词典,用于存储每一个单词对应的序列索引。
下面是使用TF-IDF算法生成文本向量的代码:
from sklearn.feature_extraction.text import TfidfVectorizer def get_tfidf_vector(text_list): tfidf_vectorizer = TfidfVectorizer(tokenizer=lambda x: x, preprocessor=lambda x: x) tfidf_vectorizer.fit(text_list) tfidf_vector = tfidf_vectorizer.transform(text_list) return tfidf_vector.toarray()
TF-IDF算法可以帮助我们区分文本中重要和不重要的单词,并将其转换为一个向量。这个向量表示文本中每个单词在整个语料库中的重要性。
现在,我们尝试使用余弦相似度来进行文本相似性匹配。
docs = ['我喜欢打篮球', '打篮球真是太好玩了', '毛泽东是中国伟大的领袖'] words_dict = {} text_matrix = [] for i, doc in enumerate(docs): words = preprocess_text(doc) text_matrix.append(words) for word in words: if word not in words_dict: words_dict[word] = len(words_dict) doc_vectors = [] for words in text_matrix: doc_vectors.append(get_text_vector(words, words_dict)) score_matrix = np.zeros((len(docs), len(docs))) for i in range(len(docs)): for j in range(len(docs)): score = cosine_similarity(doc_vectors[i], doc_vectors[j]) score_matrix[i][j] = score print(score_matrix)
在这个示例中,我们有三个文本,即'我喜欢打篮球'
、'打篮球真是太好玩了'
和'毛泽东是中国伟大的领袖'
。首先,我们定义了一个words_dict
字典,存储了每一个单词对应的序列索引。然后,我们使用preprocess_text
方法对每一个文本进行预处理,生成一个处理后的列表。接下来,我们使用get_text_vector
方法将每一篇文本表示为一个向量,并将这些向量储存在doc_vectors
列表中。最后,我们使用cosine_similarity
方法计算每一篇文本之间的余弦相似度,并将得分维护在score_matrix
矩阵中。
余弦相似度是一种常用的文本相似性度量方法,在自然语言处理、信息检索、数据挖掘等领域都有重要的应用。在实现余弦相似度计算时,需要进行文本预处理、文本向量构建和余弦相似度计算。实际应用时,可以根据需求选择不同的文本向量构建方法,比如词袋模型或TF-IDF算法。
网站栏目:创新互联Python教程:Python计算余弦相似度
浏览路径:http://www.36103.cn/qtweb/news23/2973.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联