2022-05-14:语法补全功能,比如"as soon as possible",
当我们识别到"as soon as"时, 基本即可判定用户需要键入"possible"。
设计一个统计词频的模型,用于这个功能,
类似(prefix, next word)这样的二元组,
比如一个上面的句子"as soon as possible",
有产生如下的二元组(as, soon, 1)、(as soon, as, 1)、(as soon as, possible, 1)。
意思是这一个句子产生了如下的统计:
当前缀为"as",接下来的单词是"soon",有了1个期望点;
当前缀为"as soon",接下来的单词是"as",有了1个期望点;
当前缀为"as soon as",接下来的单词是"possible",有了1个期望点。
那么如果给你很多的句子,当然就可以产生很多的期望点,同一个前缀下,同一个next word的期望点可以累加。
现在给你n个句子,让你来建立统计,
然后给你m个句子,作为查询,
最后给你k,表示每个句子作为前缀的情况下,词频排在前k名的联想。
返回m个结果,每个结果最多k个单词。
来自字节飞书团队。

答案2022-05-14:

前缀树。本来想用rust编写,但实力有限,实在写不出。所以用go语言了。

代码用golang编写。代码如下:

package mainimport ("fmt""sort""strings"
)func main() {sentences := []string{"i think you are good", "i think you are fine", "i think you are good man"}k := 2ai := NewAI(sentences, k)for _, ans := range ai.suggest("i think you are") {fmt.Println(ans)}fmt.Println("=====")ai.fill("i think you are fucking good")ai.fill("i think you are fucking great")ai.fill("i think you are fucking genius")for _, ans := range ai.suggest("i think you are") {fmt.Println(ans)}fmt.Println("=====")
}type TrieNode struct {word      stringtimes     intnextNodes map[string]*TrieNodenextRanks []*TrieNode
}func NewTrieNode(w string) *TrieNode {ans := &TrieNode{}ans.word = wans.times = 1ans.nextNodes = make(map[string]*TrieNode)ans.nextRanks = make([]*TrieNode, 0)return ans
}type AI struct {root *TrieNodetopk int
}func NewAI(sentences []string, k int) *AI {ans := &AI{}ans.root = NewTrieNode("")ans.topk = kfor _, sentence := range sentences {ans.fill(sentence)}return ans
}func (this *AI) fill(sentence string) {cur := this.rootvar next *TrieNodefor _, word := range strings.Split(sentence, " ") {if _, ok := cur.nextNodes[word]; !ok {next = NewTrieNode(word)cur.nextNodes[word] = nextcur.nextRanks = append(cur.nextRanks, next)} else {next = cur.nextNodes[word]next.times++}cur = next}
}func (this *AI) suggest(sentence string) []string {ans := make([]string, 0)cur := this.rootfor _, word := range strings.Split(sentence, " ") {if _, ok := cur.nextNodes[word]; !ok {return ans} else {cur = cur.nextNodes[word]}}sort.Slice(cur.nextRanks, func(i, j int) bool {a := cur.nextRanks[i]b := cur.nextRanks[j]if a.times != b.times {return a.times > b.times} else {return a.word < b.word}})for _, n := range cur.nextRanks {ans = append(ans, n.word)if len(ans) == this.topk {break}}return ans
}

执行结果如下:


左神java代码

2022-05-14:语法补全功能,比如“as soon as possible“, 当我们识别到“as soon as“时, 基本即可判定用户需要键入“possible“。 设计一个统计词频的模型,相关推荐

  1. linux 函数自动补全,Shell脚本中实现自动补全功能

    对于Linuxer来说,自动补全是再熟悉不过的一个功能了.当你在命令行敲下部分的命令时,肯定会本能地按下Tab键补全完整的命令,当然除了命令补全之外,还有文件名补全. Bash-completion ...

  2. html标签 补全方法 python,Python Beautiful Soup学习之HTML标签补全功能

    Beautiful Soup是一个非常流行的Python模块.该模块可以解析网页,并提供定位内容的便捷接口. 使用下面两个命令安装: pip install beautifulsoup4或者 sudo ...

  3. TeXworks自定义自动补全功能

    2021年1月25日更新: 经过这些年对Sublime Text3, VSCode, TeXStudio写LaTeX文件的摸索,非常建议放弃原教旨主义的TeXWorks,使用TeXStudio.TeX ...

  4. Vim: 使用tags文件扩展YCM对C族语言第三方库的代码自动补全功能

    前言 在众多Vim编辑器的自动补全插件中,YouCompleteMe(YCM)绝对是最好用的插件之一,但其配置过程往往令初学者望而却步.经过笔者多年折腾,至今基本达到满足日常使用水平. 如果读者对Yo ...

  5. linux下 为自己编写的程序 添加tab自动补全 功能

    linux下 为自己编写的程序 添加tab自动补全功能 入门 complete 在我的tmp下随便写了一个a.sh, 为他补全 edit /etc/bash_completion.d/foo _foo ...

  6. 转:Eclipse自动补全功能轻松设置

    Eclipse自动补全功能轻松设置 || 不需要修改编辑任何文件 2012-03-08 21:29:02|  分类: Java |  标签:eclipse  自动补全  设置  |举报|字号 订阅 下 ...

  7. Jupyter Notebook 代码自动补全功能

    调试记录 第一步 第二步 第三步 第四步 第一步 打开如下命令行 第二步 输入如下命令 conda info --envs 可以看到现在是基础(base)环境,我是想进入tensorflow环境 输入 ...

  8. gocode+auto-complete搭建emacs的go语言自动补全功能

    上篇随笔记录了在emacs中使用go-mode和goflymake搭建了go语言的简单编程环境(推送门),今天来记录一下使用gocode+auto-complete配置emacs中go语言的自动补全功 ...

  9. python shell怎么调字体_Python3设置在shell脚本中自动补全功能的方法

    本篇博客将会简短的介绍,如何在ubuntu中设置python自动补全功能. 需求:由于python中的内建函数较多,我们在百纳乘时,可能记不清函数的名字,同时自动补全功能,加快了我们开发的效率. 方法 ...

最新文章

  1. C# 语言规范_版本5.0 (第10章 类)
  2. Nacos配置中心原理
  3. 工作中技术学习总结-初版
  4. iOS 开发音视频流[1]---FFmpeg
  5. 从机器学习谈起(机器学习简介)
  6. [WPF疑难]ErrorTemplate显示与隐藏问题
  7. 混沌分形之逻辑斯蒂(Logistic)映射系统
  8. MAVEN [ERROR] 不再支持源选项 5。请使用 7 或更高版本。
  9. 并查集(UnionFindSet)
  10. 利用递归求某数的阶乘——C/C++
  11. 【2016年第6期】情境大数据建模及其在用户行为预测中的应用
  12. WPF,Silverlight与XAML读书笔记第六 - WPF新概念之一逻辑树与可视树
  13. 小心Java中封装类的值比较
  14. Python链家租房信息爬虫和高德地图展示
  15. 本科进了大厂拿高薪,为什么硕士和博士却要挤破头进高校?
  16. c语言负数与正数判断大小,c语言编程,输入一些整数,判断其中正数与负数的个数,并分别求出正数与负数的平均值...
  17. SQL注入攻击及防御 手动注入+sqlmap自动化注入实战(网络安全学习12)
  18. 使用python绘制wav 音频文件频谱图
  19. [HNOI 2012] 永无乡
  20. c语言二维图形变换程序,C语言图形编程(五、二维图形变换-01)(国外英文资料).doc...

热门文章

  1. 就离谱!使用机器学习预测2022世界杯:小组赛挺准,但冠亚季军都错了 ⛵
  2. Android基础知识——完善
  3. 微型计算机原理及应用:基于Arm微处理器
  4. oracle 创建 permanent tablespace
  5. 【入门-08】系统控制单元(SCU)
  6. Android 13 适配指南~
  7. flutter Container设置渐变色
  8. 清除linux挖矿木马[crypto]的过程
  9. [附源码]计算机毕业设计二次元信息分享平台的设计及实现
  10. 商务汇报PPT制作的七堂课-第二课:模板制作