【Educoder数据挖掘实训】用SMC相似度计算文本之间的相似度

【Educoder数据挖掘实训】用SMC相似度计算文本之间的相似度

开挖!

还是计算文本之间相似度的实训,跟前两关区别不大。

需要注意的是 S M C SMC SMC的计算方式 s = f 11 + f 00 f 11 + f 00 + f 10 + f 01 s = \frac{f11+f00}{f11+f00+f10+f01} s=f11+f00+f10+f01f11+f00

代码如下:

python 复制代码
import numpy as np  
import jieba  
jieba.setLogLevel(jieba.logging.INFO)  
  
def smc_similarity(sentence1: str, sentence2: str) -> float:  
    # 1. 实现文本分词  
    ########## Begin ##########
    seg1 = [word for word in jieba.cut(sentence1)]  
    seg2 = [word for word in jieba.cut(sentence2)]  
    ########## End ##########
    # 2. 建立词库  
    ########## Begin ##########
    word_list = list(set([word for word in seg1 + seg2]))  
    ########## End ##########
    # 3. 统计各个文本在词典里出现词的次数  
    ########## Begin ##########
    word_counts_1 = np.array([len([word for word in seg1 if word==w]) for w in word_list])  
    word_counts_2 = np.array([len([word for word in seg2 if word==w]) for w in word_list])  
    ########## End ##########
    # 4. 余弦公式  
    ########## Begin ##########
    f00 = np.sum((word_counts_1 == 0) & (word_counts_2 == 0))  
    f01 = np.sum((word_counts_1 == 0) & (word_counts_2 != 0))  
    f10 = np.sum((word_counts_1 != 0) & (word_counts_2 == 0))  
    f11 = np.sum((word_counts_1 != 0) & (word_counts_2 != 0))  
    smc = (f00 + f11) / (f01 + f10 + f00 + f11)  
    ########## End ##########
      
    return smc  
  
str1 = "我爱北京天安门"  
str2 = "天安门雄伟壮阔让人不得不爱"  
  
sim1 = smc_similarity(str1, str2)  
  
print(sim1)
相关推荐
云烟成雨TD4 分钟前
Agent Scope Java 2.x 系列【1】核心架构
java·人工智能·agent
Xiaofeng36935 分钟前
三大旗舰模型横评:Claude 4.6、ChatGPT 5.5、Gemini 2.0 Pro 谁更强
人工智能
benben0446 分钟前
Gym从入门到精通
人工智能
金銀銅鐵6 分钟前
用 Tkinter 实现简单的论语第一章阅读器
后端·python
Zaimmm7 分钟前
ChatGPT医疗智能体能做文献检索和指南比对吗?
人工智能·chatgpt
小玮看世界7 分钟前
【技术成长实录】北京地铁12号线数据分析系统:从一个观察到一个完整项目的演进之路
python·人机交互·学习方法·cicd·项目交付
qq_382949227 分钟前
企业级机器学习落地实战(含源码与课件)
人工智能·机器学习
极光代码工作室8 分钟前
基于机器学习的金融风险预测系统
python·深度学习·机器学习·ai·系统设计
小鹿研究点东西9 分钟前
AI直播复盘实操:如何自动录制并拆解直播话术
人工智能·自动化·音视频