python 一个文本要和5000个文本对比相似度,判定和哪个文本相似度最高以及是否一致
import jieba from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # 原始文本 input_text = "这是你要对比的文本。" # 与该文本进行比较的其他5000个文本(示例数据) compare_texts = [ "这是第一篇文本。", "相似度不够高", "这一篇看起来和原始文本很相似。", "还有4967篇文本需要比较" ] # 对原始文本及比较文本分词,并拼接为字符串 input_words = ' '.join(jieba.cut(input_text)) compare_words = [' '.join(jieba.cut(text)) for text in compare_texts] # 初始化TF-IDF向量化器 vectorizer = TfidfVectorizer() # 使用fit_transform函数将所有文本向量化 vectors = vectorizer.fit_transform([input_words] + compare_words) # 计算余弦相似度 sims = cosine_similarity(vectors[0], vectors[1:])[0] # 找到最高相似度的文本及其索引 max_sim = max(sims) max_index = sims.tolist().index(max_sim) # 判断最高相似度是否一致 if max_sim >= 0.8: # 自定义阈值,根据需要调整 print("原始文本和第{}篇文本相似度最高,相似度得分为{}".format( max_index + 1, max_sim)) else: print("没有找到足够相似的文本。")
请注意,本程序使用了jieba库、sklearn.feature_extraction.text库和sklearn.metrics.pairwise库中的一些功能,所以您需要安装它们,方法如下:
pip install jieba scikit-learn
在这个程序中,我们使用了jieba库对原始文本及比较文本进行分词,并将它们拼接为以空格分隔的字符串。这是因为,在将中文文本向量化时,要首先将其标记化(即将文本划分为有意义的单元)并转换为数字表示形式。这里我们使用TF-IDF(词频-逆文档频率)为基础的套袋模型来实现这一点。
最后,这个程序会计算每个文本与原始文本之间的余弦相似度分数,并找到具有最高分数的文本索引。如果最高相似度得分足够高(在此设为0.8),程序将打印出相应的结果,否则提示没有找到足够相似的文本。
希望这份针对中文环境的程序能满足您的需求!