python - 计算文档和特定关键字之间的相似度
问题描述
我收集了有关某种疾病的报纸文章(未标记,只是原始文章)。我还有三组与疾病相关的手动选择的关键字,例如:phase-1
等,phase-2
如下所示。
phase_1 = ["symptoms","signs","fever","ache","vomit","blood","headache","fatigue","breath"]
phase_2 = ["pathogen","flavivirus","swamp","virus","contagious","mosquito bite","virus","agent","host"]
无论如何,使用 PYTHON 计算一组关键字和新闻文章之间的相似性吗?
解决方案
您可以为此类任务定义各种相似度指标。然后你可以去看看哪一个效果最好。这里有一些想法:
1.)正如 Max 在帖子中指出的那样,您可以计算文档和两个列表中的每一个之间的 Jaccard 索引。Jaccard 索引定义为交集除以两项的并集:
set1 = set(news_article.split())
set2 = set(phase_1)
jcc = len(set1.intersection(set2)) / len(set1.union(set2))
Jaccard 指数越高,文本与列表越相似。但是,只有当您的新闻文章完全包含您在列表中定义的词时,Jaccard 索引才会起作用。包含语义相似但与列表中的单词不同的单词的文本仍具有 0 的 jaccard 索引,即使其中包含相似的单词。
2.) 我建议也尝试基于 Word Mover 的距离 (WMD) 的稍微更高级的方法。为此,您需要在某个向量空间中表示您的单词(例如,通过 word2vec 模型获得)。然后,您可以将一篇新闻文章和一个列表表示为该空间中的向量集合。该指标衡量两种表示的差异程度(您必须移动一种表示以匹配另一种表示)。距离越小,两个表示越相似。
您可能可以在您的新闻文章上训练您的 word2vec 模型。我建议使用 gensim 来训练模型并稍后评估单词移动器的距离。
https://radimrehurek.com/gensim/auto_examples/tutorials/run_wmd.html
它不能保证有效,但我会试一试。根据我的经验,WMD 通常比余弦距离效果更好,但这当然取决于应用程序。
这两种方法还取决于您事先进行的文本处理。在评估指标/训练 word2vec 模型之前,请确保您的新闻文章采用您期望的格式。
推荐阅读
- email - 如何设置电子邮件跟踪代码来跟踪不同客户电子邮件提供商的电子邮件打开/点击?
- r - R:如何将日期附加到 timeseries(ts) 对象中?
- javascript - angularjs 指令 ngrepeat 不适用于角度向导中的对象
- visual-studio - Visual Studio Diff 显示不需要的大小写差异
- vitess - Vitess 分片问题
- python - 基于“时间瞬间”的不同字典中的值总和
- python - Windows 10 linux子系统ubuntu试图安装python pip
- css - CSS 如果第一个元素是下拉菜单,那么做一些事情
- c# - IIS 在使用 Visual Studio 进行调试时拒绝连接
- php - 与 belongsTo 关联的不一致数据