动手实现一个基于NLP的相近单词检索器

 

 介绍

  这个项目的名字为SimilarVocabulary,项目本身并不复杂,使用了NLP中的词向量来检索到关联程度较大的单词,项目套用了NLP中一个开源库spacy.该库自带了一个训练好的模型,可以进行英文文本的预测。

  项目源码地址:

  https://github.com/wotchin/SimilarVocabulary

  下面,我们以这个简单的demo演示一下spacy库的使用,以及介绍获取相近单词的代码。

  加载模型:

  nlp = spacy.load('en_core_web_lg')

  其中,en_core_web_log 是该库自带的一个训练好的模型,这个模型很大,需要自己下载,在项目中给出了初始化的脚本为:init.sh

  获取输入文本

  这行代码主要是用于获取输入文本内容,然后将输入的文本(主要是单词)进行预处理,生成token:

  while True:

  if line != :

  words += line.replace( , )

  line = f.read()

  else:

  break

  nlp = spacy.load('en_core_web_lg')

  print(modal loaded.)

  tokens = nlp(words)

  设定阈值

  套用这个库来实现相近单词检索的大致原理是:

  通过已经训练好的模型,通过词向量对比给定的两个单词之间的“距离”,我们给定的这个阈值就是这个“距离”的上线,通过设定这个上限值,就可以获取我们想要的输出结果——语义相近的单词。

  我们简单看一下设定阈值的过程:

  threshold = 0.0

  while threshold = 0.0:

  try:

  threshold = float(input(input threshold value:))

  except:

  threshold = 0.0

  length = 3

  try:

  length = int(input(input result length:))

  except:

  length = 3

  代码逻辑很简单:

  要求输入阈值,需要查询到的相近单词的个数。

  实现对比查询

  我在这里实现的逻辑是:给一个语料库数据集,数据集里收集了绝大多数的常用英文单词,在这个数据集中寻找与我们事先给定的单词意思相近的结果,然后选择n个比较优的结果返回。这部分的代码是:

  while True:

  queue = [] #[['dog',0.1],['cat',0.2]...]

  i = input(input your word:)

  if i != :

  txt = nlp(i)

  for token in tokens:

  score = token.similarity(txt)

  if score = threshold and family_check(txt.text.strip(),token.text.strip()) 0:

  if len(queue) = length:

  index = 0 # in order to contrast

  value = 1.0

  for i in range(0,len(queue)):

  if queue[i][1] value:

  value = queue[i][1]

  index = i if value score:

  queue[index] = [token.text,score]

  else:

  queue.append([token.text,score])

  print(queue)

  用途

  诸如这样寻找相似的单词的意义是怎样的呢? 譬如某些答题竞猜类APP,如之前非常火爆的在线直播答题类APP进行编题时,如果只有一个选项,需要补充额外三个干扰选项怎么办?可以使用这样的相近单词生成器,生成关联比较近的单词,例如输入单词dog,它可能会为我们返回:pig,cat,cook.

  同时,也可以用在搜索引擎这样的联想搜索场景中。当然了,它的更多用途远不止于此,全凭脑洞。

  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值