首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算文档与特定关键字的相似度

计算文档与特定关键字的相似度
EN

Stack Overflow用户
提问于 2020-07-21 01:55:42
回答 2查看 845关注 0票数 1

我收集了一些关于某种疾病的报纸文章(没有标签,只是原始的文章)。我也有三组手动选择的与疾病相关的关键字,例如:phase-1phase-2等,如下所示。

代码语言:javascript
复制
phase_1 = ["symptoms","signs","fever","ache","vomit","blood","headache","fatigue","breath"]

phase_2 = ["pathogen","flavivirus","swamp","virus","contagious","mosquito bite","virus","agent","host"]

有没有办法用PYTHON计算一组关键词和新闻文章之间的相似度?

EN

回答 2

Stack Overflow用户

发布于 2020-07-21 09:13:24

您可以为这样的任务定义各种相似性度量。然后你可以去看看哪一个效果最好。以下是一些想法:

1.)正如Max在文章中指出的那样,您可以计算文档和两个列表中的每个列表之间的Jaccard索引。Jaccard索引被定义为交集除以两个项目的并集:

代码语言:javascript
复制
set1 = set(news_article.split())
set2 = set(phase_1)

jcc = len(set1.intersection(set2)) / len(set1.union(set2))

jaccard索引越高,文本与列表的相似度越高。但是,只有当您的新闻文章包含您在列表中定义的单词时,Jaccard索引才会起作用。包含语义相似但与列表中的单词不同的单词的文本,即使其中有相似的单词,其jaccard索引仍为0。

2.)我还建议尝试基于单词Mover's Distance (WMD)的更高级的方法。为此,您需要在某个向量空间中表示您的单词(例如,通过word2vec模型获得)。然后,您可以将一篇新闻文章和一个列表表示为该空间中的向量集合。度量标准衡量两种表示的不同程度(您必须移动多少表示才能匹配另一种表示)。距离越小,两种表示法越相似。

您可以根据新闻文章训练您的word2vec模型。我建议使用gensim来训练模型,并在以后评估单词mover的距离。

https://radimrehurek.com/gensim/auto_examples/tutorials/run_wmd.html

它不能保证能工作,但我会试一试。在我的经验中,WMD通常比余弦距离更好,但这当然取决于应用程序。

这两种方法还取决于您预先进行的文本处理。在评估指标/训练word2vec模型之前,请确保您的新闻文章采用您期望的格式。

票数 1
EN

Stack Overflow用户

发布于 2020-07-21 02:36:44

在命名列表时,我不建议使用破折号或其他顶部字符。我希望这能有所帮助:

代码语言:javascript
复制
phase_1 =  ["symptoms","signs","fever","ache","vomit","blood","headache","fatigue","breath"]

phase_2 = ["pathogen","flavivirus","swamp","virus","contagious","mosquito bite","virus","agent","host"]

# Performing the calculations
res = len(set(phase_1) & set(phase_2))
res2 = res / float(len(set(phase_1) | set(phase_2))) * 100

# Showing the results
msg = "The percentage of smilarity between the 2 lists is:"
print(msg, res2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63001234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档