C2W1.LAB.Vocabulary Creation+Candidates from String Edits

理论课:C2W1.Auto-correct

文章目录

  • Vocabulary Creation
    • Imports and Data
    • Preprocessing
    • Create Vocabulary
      • 法1.集合法
      • 法2.词典加词频法
      • Visualization
    • Ungraded Exercise
  • Candidates from String Edits
    • Imports and Data
    • Splits
    • Delete Edit
  • Ungraded Exercise

理论课: C2W1.Auto-correct

Vocabulary Creation

从一个小语料库中创建词表

Imports and Data

导入包

# imports
import re # regular expression library; for tokenization of words
from collections import Counter # collections library; counter: dict subclass for counting hashable objects
import matplotlib.pyplot as plt # for data visualization

语料库也就一句话

# the tiny corpus of text ! 
text = 'red pink pink blue blue yellow ORANGE BLUE BLUE PINK' 
print(text)
print('string length : ',len(text))

结果:
red pink pink blue blue yellow ORANGE BLUE BLUE PINK
string length : 52

Preprocessing

由于没有包含特殊字符,可以简单进行数据预处理:

# convert all letters to lower case
text_lowercase = text.lower()
print(text_lowercase)
print('string length : ',len(text_lowercase))

结果:
red pink pink blue blue yellow orange blue blue pink
string length : 52

# some regex to tokenize the string to words and return them in a list
words = re.findall(r'\w+', text_lowercase)
print(words)
print('count : ',len(words))

结果:
[‘red’, ‘pink’, ‘pink’, ‘blue’, ‘blue’, ‘yellow’, ‘orange’, ‘blue’, ‘blue’, ‘pink’]
count : 10

Create Vocabulary

法1.集合法

# create vocab
vocab = set(words)
print(vocab)
print('count : ',len(vocab))

结果:
{‘red’, ‘pink’, ‘orange’, ‘blue’, ‘yellow’}
count : 5

法2.词典加词频法

利用get

# create vocab including word count
counts_a = dict()
for w in words:counts_a[w] = counts_a.get(w,0)+1
print(counts_a)
print('count : ',len(counts_a))

结果:
{‘red’: 1, ‘pink’: 3, ‘blue’: 4, ‘yellow’: 1, ‘orange’: 1}
count : 5
利用Counter

# create vocab including word count using collections.Counter
counts_b = dict()
counts_b = Counter(words)
print(counts_b)
print('count : ',len(counts_b))

结果同上

Visualization

# barchart of sorted word counts
d = {'blue': counts_b['blue'], 'pink': counts_b['pink'], 'red': counts_b['red'], 'yellow': counts_b['yellow'], 'orange': counts_b['orange']}
plt.bar(range(len(d)), list(d.values()), align='center', color=d.keys())
_ = plt.xticks(range(len(d)), list(d.keys()))

结果:
在这里插入图片描述

Ungraded Exercise

上面由 collections.Counter 返回的 counts_b 是按字频排序的
修改小语料库的text,使counts_b中的pinkred之间出现新的颜色

需要重新运行所有单元格,还是只运行特定单元格?

# 修改 text 变量
text = 'red pink green pink green blue blue yellow ORANGE BLUE BLUE PINK'# 重新运行以下代码来更新 counts_b 的值
text_lowercase = text.lower()
words = re.findall(r'\w+', text_lowercase)
counts_b = Counter(words)
print(counts_b)
print('count : ', len(counts_b))

Candidates from String Edits

Imports and Data

不需要导入什么包,数据也就一个词:

# data
word = 'dearz' # 🦌

Splits

找出将一个单词分成两个部分的所有方法!

# splits with a loop
splits_a = []
for i in range(len(word)+1):splits_a.append([word[:i],word[i:]])for i in splits_a:print(i)

结果:
[‘’, ‘dearz’]
[‘d’, ‘earz’]
[‘de’, ‘arz’]
[‘dea’, ‘rz’]
[‘dear’, ‘z’]
[‘dearz’, ‘’]

也可以用list来完成:

# same splits, done using a list comprehension
splits_b = [(word[:i], word[i:]) for i in range(len(word) + 1)]for i in splits_b:print(i)

结果同上。

Delete Edit

从拆分列表splits中的后半部分的每个字符串中删除一个字母。
这样做的目的是有效删除被编辑的原始单词中每个可能的字母。

# deletes with a loop
splits = splits_a
deletes = []print('word : ', word)
# 遍历分割的结果,检查后半部分是否不为空
for L,R in splits:if R: # 如果后半部分不为空,则打印删除第一个字符后的结果print(L + R[1:], ' <-- delete ', R[0])

结果:
word : dearz
earz <-- delete d
darz <-- delete e
derz <-- delete a
deaz <-- delete r
dear <-- delete z
下面给出了删除的原理示意:

# breaking it down
print('word : ', word)
one_split = splits[0]
print('first item from the splits list : ', one_split)
L = one_split[0]
R = one_split[1]
print('L : ', L)
print('R : ', R)
print('*** now implicit delete by excluding the leading letter ***')
print('L + R[1:] : ',L + R[1:], ' <-- delete ', R[0])

结果:
word : dearz
first item from the splits list : [‘’, ‘dearz’]
L :
R : dearz
*** now implicit delete by excluding the leading letter ***
L + R[1:] : earz <-- delete d

当然也可以用list更加简洁

# deletes with a list comprehension
splits = splits_a
deletes = [L + R[1:] for L, R in splits if R]print(deletes)
print('*** which is the same as ***')
for i in deletes:print(i)

结果:
[‘earz’, ‘darz’, ‘derz’, ‘deaz’, ‘dear’]
*** which is the same as ***
earz
darz
derz
deaz
dear

Ungraded Exercise

经过上面的操作,得到了执行删除编辑后创建的候选字符串列表deletes
下一步是过滤该列表,以查找词汇表中的候选词。
在下面的示例词汇表中,你能想到创建候选词列表的方法吗?
[‘dean’,‘deer’,‘dear’,‘fries’,‘and’,‘coke’]

vocab = ['dean','deer','dear','fries','and','coke']
edits = list(deletes)print('vocab : ', vocab)
print('edits : ', edits)candidates=[]### START CODE HERE ###
#candidates = ??  # hint: 'set.intersection'
#candidates = list(set(edits) & set(vocab))
candidates = list(set(edits).intersection(set(vocab)))
### END CODE HERE ###print('candidate words : ', candidates)

注意:除了splits和deletes操作,还有其他的编辑类型,例如:insert, replace, switch等,这里没有一一实现,留待各位补全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程① | 5.1 - 5.3

前言 第5章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术的内容&#xff0c;学习要以教材为准。 目录 5.1 软件工程定义 5.2 软件需求 5.2.1 需求的层次 5.2.2 质量功能部署 5.2.3 需求获取 5.2.4 需求分析 5.2.5 需求规格说明书 5.2.6 需求变…

C++写一个线程池

C写一个线程池 文章目录 C写一个线程池设计思路测试数据的实现任务类的实现线程池类的实现线程池构造函数线程池入口函数队列中取任务添加任务函数线程池终止函数 源码 之前用C语言写了一个线程池&#xff0c;详情请见&#xff1a; C语言写一个线程池 这次换成C了&#xff01;…

获取淘宝商品详情app原数据item_get_app响应参数解析(二):商品标题、销量、sku、价格、视频

API名&#xff1a;item_get_app 功能说明&#xff1a;通过传入商品id获取该商品的详情页原数据。因为是原数据&#xff0c;响应参数较多。 请求示例&#xff08;curl&#xff09;&#xff1a; -- 请求示例 url 默认请求参数已经URL编码处理 curl -i "https://api-服…

Java 在PDF中替换文字(详解)

目录 使用工具 Java在PDF中替换特定文字的所有实例 Java在PDF中替换特定文字的第一个实例 Java在PDF中使用正则表达式替换特定文字 其他替换条件设置 可能出现的问题及解决方案 PDF文档中的信息随时间的推移可能会发生变化&#xff0c;比如产品价格、联系方式等。为了确保…

2024可信数据库发展大会|存算分离架构驱动电信数据平台革新

7 月 16 日 - 17 日&#xff0c;由中国通信标准化协会和中国信息通信研究院主办&#xff0c;大数据技术标准推进委员会承办&#xff0c;InfoQ 联合主办的「2024 可信数据库发展大会」&#xff08;TDBC&#xff09;在北京召开。 酷克数据解决方案架构师吴昊受邀参与“电信行业数…

算法-计数质数

题目&#xff1a; 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 思路&#xff1a; 使用埃式筛法 当n大于等于2时&#xff0c;如果当前遍历的数 i 是质数&#xff0c;那么从 i*i 开始&#xff0c;直到 n 为止&#xff0c;把 i 的倍数都标记为合数 代码&a…

为什么提示词写作技能会让生成式AI工程师更上一层楼?

欢迎来到云闪世界。 “为什么我的经理对我的文章吹毛求疵&#xff1f;把措辞从 X 改为 Y 有什么区别&#xff1f;” 当你看到你的经理在你的文档中提出了无数建议时&#xff0c;你可能发现自己有这样的想法&#xff1b;我知道我有过。事实上&#xff0c;我曾经认为写作是数据科…

npm安装依赖包报错,npm ERR! code ENOTFOUND

一、报错现象&#xff1a; npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ETIMEDOUT: request to https://registry.npmjs.org/vue failed, reason: connect ETIMEDOUT 104.16.23.35:443 npm WARN registry Using stale data…

“点点通“餐饮点餐小程序-计算机毕业设计源码11264

"点点通"餐饮点餐小程序 XXX专业XX级XX班&#xff1a;XXX 指导教师&#xff1a;XXX 摘要 随着中国经济的飞速增长&#xff0c;消费者的智能化水平不断提高&#xff0c;许多智能手机和相关的软件正在得到更多的关注和支持。其中&#xff0c;微信的餐饮点餐小程序更…

《Exploring Aligned Complementary Image Pair for Blind Motion Deblurring》

这篇论文的标题《Exploring Aligned Complementary Image Pair for Blind Motion Deblurring》可以翻译为《探索对齐的互补图像对用于盲运动去模糊》。从标题可以推断,论文的焦点在于开发一种算法或技术,利用成对的图像来解决运动模糊问题,特别是在不知道模糊核(即造成模糊…

wifi preamble code, 前导码

WiFi packets 很神奇&#xff0c;自从802.11 协议诞生以来 就对信息传输 产生了无尽的影响&#xff0c; 闲来无事 看看wireless 空口包 发现 前导码 非常奇怪。 为什么前导码有两部分组成&#xff0c; 1. radiotap header 2. 802.11 radio information 并且 radiotap 是有在…

AIGC工具:IPAdapter和ControlNet 指导控制生成工具

ControlNet强调对生成过程的直接控制,如通过线条、边缘、形状等信息;而IPAdapter侧重于风格迁移和内容的间接引导。 IPAdapter 它专注于通过迁移图片风格来生成新的图像内容。IPAdapter的强项在于能够将一张图片的风格迁移到另一张图片上,实现风格融合,甚至可以进行多图风格…

CS110L(Rust)

1.Rust 语法总结 数值类型 有符号整数: i8, i16, i32, i64无符号整数: u8, u16, u32, u64 变量声明 声明变量: let i 0; // 类型推断let n: i32 1; // 显式类型声明 可变变量: let mut n 0; n n 1; 字符串 注意&#xff0c;let s: str "Hello world";…

React@16.x(62)Redux@4.x(11)- 中间件2 - redux-thunk

目录 1&#xff0c;介绍举例 2&#xff0c;原理和实现实现 3&#xff0c;注意点 1&#xff0c;介绍 一般情况下&#xff0c;action 是一个平面对象&#xff0c;并会通过纯函数来创建。 export const createAddUserAction (user) > ({type: ADD_USER,payload: user, });这…

WEB前端07-DOM对象

DOM模型 1.DOM概念 文档对象模型属于BOM的一 部分&#xff0c;用于对BOM中的核心对象document进行操作&#xff0c;它是一种与平台、语言无关的接口&#xff0c;允许程序和脚本动态地访问或更新HTML、XML文档的内容、结构和样式&#xff0c;且提供了一系列的函数和对象来实现…

工作边界感

工作边界 **明确工作边界****尊重他人的工作边界**&#xff1a;**建立有效的沟通机制**&#xff1a;**制定明确的规则和流程**&#xff1a;**保持开放和包容的心态**&#xff1a;**寻求专业支持**&#xff1a; 在程序员的日常工作中&#xff0c;会遇到很多边界问题。如果这些边…

【人工智能大模型】文心一言介绍以及基本使用指令

目录 一、产品背景与技术基础 二、主要功能与特点 基本用法 指令的使用 注意事项 文心一言&#xff08;ERNIE Bot&#xff09;是百度基于其文心大模型技术推出的生成式AI产品。以下是对文心一言的详细介绍&#xff1a; 一、产品背景与技术基础 技术背景&#xff1a;百度…

NOMAD: Non-Exclusive Memory Tiering via Transactional Page Migration——论文泛读

OSDI 2024 Paper CXL论文阅读笔记整理 问题 随着可字节寻址存储设备的出现&#xff0c;如CXL内存、持久内存和存储类内存&#xff0c;分层存储系统已成为现实&#xff0c;不同层具有不同的特性&#xff0c;如速度、大小、功耗和成本。分层内存管理的核心是操作系统&#xff0…

vmware虚拟机中,Centos安装Docker,解决国内无法访问

背景 本文主要解决了centos 的yum源 无法更新 和 docker的 源 国内无法访问的问题。 本文环境&#xff1a;windows宿主机装了vmware虚拟机&#xff0c;虚拟机中安装了Centos&#xff0c;centos内装docker。其实可以直接在window装docker desktop for windows&#xff0c;但…

VS C#类文件自动生成头部注释

VS C#类文件自动生成头部注释&#xff08;以VS2019为例&#xff09; 1、更新位置 E:\VS2019\vs_2019\Common7\IDE\ItemTemplates\CSharp\Code\2052\Class 2、替换Class 原始文件 using System; using System.Collections.Generic; $if$ ($targetframeworkversion$ > 3.5…