热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用spacy检测文本相似度

#这个比自己通过余弦相似度计算的实现更精确一些#github:https:github.comexplosionspaCy#doc:https:spacy.iousagevecto

# 这个比我们自己通过余弦相似度计算更精确一些,可以基本达到语义相似匹配
# This looks like it's the formula for computing cosine similarity and the vectors seem to be created with SpaCy's .vector which the documentation says is trained from GloVe's w2v model.
# github: https://github.com/explosion/spaCy
# doc: https://spacy.io/usage/vectors-similarity
# install: pip install spacy
# install english model: python -m spacy download en_core_web_sm[md|lg], ref: https://spacy.io/models/en
# install chinese model: python -m spacy download zh_core_web_sm[md|lg], ref: https://spacy.io/models/zh
import spacy
def check_word_property():
nlp = spacy.load("en_core_web_sm")
input_sentence = input('Please input a sentence: ')
while input_sentence:
doc = nlp(input_sentence)
word_property = [{'word': w.text, 'property': w.pos_} for w in doc]
noun_list = [wp['word'] for wp in word_property if wp['property'] == 'NOUN']
verb_list = [wp['word'] for wp in word_property if wp['property'] == 'VERB']
print('Input sentence: %s' % input_sentence)
print('Noun list: %s' % ', '.join(noun_list))
print('Verb list: %s\n' % ', '.join(verb_list))
input_sentence = input('Please input a sentence: ')
def check_en_word_similarity():
# 为了使比较算法简洁和快速,spaCy的小模型(所有以sm结尾的包)都不使用单词向量,
# 而且这些sm包只包含上下文相关的向量,我们虽然可以使用similarity()方法,但结果不会太理想
# 所以为了使用真正的词向量,最好使用en_core_web_lg模型
nlp = spacy.load('en_core_web_lg')
tokens = nlp('dog cat banana ssafsf') # ssafsf会被警告改单词没有向量
# 内置单词向量的模型使它们成为可用的标记,文本向量将默认为它们的token向量的平均值,
# 通过has_vector我们可以检查一个token是否有分配的向量,并得到L2规范,它可以用来使向量标准化
print('Token属性:\n')
for token in tokens:
print(token.text, token.has_vector, token.vector_norm, token.is_oov)
print('\nToken两两之间关系:\n')
for token1 in tokens:
for token2 in tokens:
print('%s and %s: %s' % (token1, token2, token1.similarity(token2)))
def check_en_doc_similarity():
nlp = spacy.load('en_core_web_lg')
doc1 = nlp('How to create ticket?')
doc2 = nlp('How can I create ticket?')
doc3 = nlp('I want to create ticket?')
doc4 = nlp('Do you know how to create the ticket?')
print(doc1.similarity(doc2)) # 0.9540794124760449
print(doc2.similarity(doc3)) # 0.9751696134778753
print(doc1.similarity(doc3)) # 0.9549075548119442
print(doc1.similarity(doc4)) # 0.9547450107860063
sentence3 = nlp('Do you know I love you?')
sentence4 = nlp('I love you so much?')
print(sentence3.similarity(sentence4)) # 0.9629862471369796
def check_zh_doc_similarity():
nlp = spacy.load('zh_core_web_lg')
doc1 = nlp('你好吗?')
doc2 = nlp('你还好吗?')
doc3 = nlp('今天你还好吗?')
doc4 = nlp('你的身体今天还好吗?')
print(doc1.similarity(doc2)) # 0.7544851165307768
print(doc2.similarity(doc3)) # 0.9664107589955437
print(doc1.similarity(doc3)) # 0.730822854943996
print(doc1.similarity(doc4)) # 0.6528684500574182
if __name__ == '__main__':
check_word_property()
check_en_word_similarity()
check_zh_doc_similarity()
check_en_doc_similarity()
print('end!')





 



推荐阅读
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Thisworkcameoutofthediscussioninhttps://github.com/typesafehub/config/issues/272 ... [详细]
  • python3下载mapbox矢量切片通过观察mapbox的页面开发者工具里的network可以发现,打开矢量切片和字体切片pbf和prite图标的链接, ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 【疑难杂症】allennlp安装报错:Installing build dependencies ... error
    背景:配置PURE的算法环境,安装allennlp0.9.0(pipinstallallennlp0.9.0)报错ÿ ... [详细]
  • 验证识别之你讲武德了吗?
    说说那个试用版的打包软件,既然是试用版肯定要加个试用期限,但是里面的pb模型并没有放识别率最好的那个,而是放了一个识别率中等 ... [详细]
author-avatar
手机用户2502905891
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有