Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python模糊匹配 | 刷英语六级段落匹配只需要3秒?

Python模糊匹配 | 刷英语六级段落匹配只需要3秒?

作者头像
叶庭云
发布于 2021-12-30 13:15:27
发布于 2021-12-30 13:15:27
1.1K00
代码可运行
举报
文章被收录于专栏:Python进阶之路Python进阶之路
运行总次数:0
代码可运行

一、前言

一年二度的四六级考试就此落下帷幕,本次考试体验感极强,反手就是一个 “五星好评”

星光不负赶路人,时光不负有心人,想要轻松通过四六级。还得是脚踏实地,一步一个脚印,做好充足的复习准备。预祝大家无论是期末考还是四六级,都能取得理想的成绩,然后回家过个好年~~

本文利用 Python 的模糊匹配方法来刷英语六级段落匹配,仅需要3秒!Python的 FuzzyWuzzy 库,是一个易用而又强大的模糊字符串匹配工具包。它依据 Levenshtein Distance 算法,计算两个序列之间的差异。Levenshtein Distance算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。

Github传送门:https://github.com/seatgeek/fuzzywuzzy

后面的编程都是在 jupyter notebook 中,安装 FuzzyWuzzy 库如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install fuzzywuzzy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

原文链接:https://yetingyun.blog.csdn.net/article/details/122022033

未经作者允许,禁止转载,更勿做其他用途,违者必究。

二、fuzz模块

导入方法,直接导入这个模块的话,系统会提示UserWarning,这不代表报错,程序依旧可以运行(使用的默认算法,执行速度较慢),可以按照系统的提示安装 python-Levenshtein 库进行辅助,这有利于提高计算的速度。

1. 简单匹配

这个其实不怎么精确,也不常用,测试如下:

2. 部分匹配(Partial Ratio)

尽量使用部分匹配,精度较高!测试如下:

可以发现,fuzz.partial_ratio(S1, S2)部分匹配,如果 S2 是 S1 的子串依然返回100

3. 忽略顺序匹配(Token Sort Ratio)

原理:以 空格 为分隔符,小写化所有字母,无视空格外的其它标点符号,测试如下:

fuzz.token_sort_ratio(S1,S2)比较S1,S2单词是否相同,不考虑词语之间的顺序。

4. 去重子集匹配(Token Set Ratio)

相当于比对之前有一个集合去重的过程,注意最后两个,可理解为该方法是在 token_sort_ratio 方法的基础上添加了集合去重的功能,下面三个匹配的都是倒序。

fuzz的这几个 ratio 函数最后得到的结果都是匹配数值,如果需要获得匹配度最高的字符串结果,还需要依旧自己的数据类型选择不同的函数,然后再进行结果提取,如果但看文本数据的匹配程度使用这种方式是可以量化的,但是对于我们要提取匹配的结果来说就不是很方便了,因此就有了 process 模块。

三、process模块

用于处理备选答案有限的情况,返回模糊匹配的字符串和相似度。测试如下:

四、实践

实践当然就是利用 fuzz 模块来刷英语六级段落匹配,看看结果怎么样!!

知乎找到一个网址可以下载六级真题PDF:https://pan.uvooc.com/Learn/CET/

它的 PDF 直接编辑不了,貌似是扫描的。这里我们用 Adobe Acrobat Pro DC 识别后,将阅读材料和要匹配的选项直接复制粘贴到 txt 里面。

顺便说一下:利用 Adobe Acrobat Pro DC 裁剪页面提取 PDF 里的矢量图保存下来,图像放大不会失真,你直接截图的话,放大肯定会失真的。

读取 txt 数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open("Englishreading.txt", "r", encoding="utf-8") as f1:
    con1 = f1.read().split("\n")
dic1 = {}
for i in con1:
    data = i.split(":")
    dic1[data[0]] = data[1]

print(dic1)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open("match.txt", "r") as f2:
    con2 = f2.read().split("\n")

dic2 = {}
for i in con2:
    data = i.split(":")
    dic2[data[0]] = data[1]
print(dic2)

先简单测试一个,比如一个是匹配F,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test_str = "Marconi was central to our present-day understanding of communication."
# test_str = "As an adult, Marconi had an intuition that he had to be loyal to politicians in order to be influential."
big_lst = []
for k, v in dic1.items():
    sentence = [x.strip(" ") for x in v.split(".")]
    scores = []
    for a in sentence:
        score = fuzz.partial_ratio(a, test_str)
        scores.append(score)
    # print(scores, sum(scores), round(sum(scores) / len(scores), 2))
    k_score = sum(scores) * 0.2 + sum(scores) / len(scores)
    big_lst.append((k, scores, round(k_score, 2)))

results = sorted(big_lst, key=lambda x: x[2], reverse=True)
print(results)
print(results[0][0])

得到答案也是 F,俺们的算法做对了!最后刷英语六级段落匹配(10个题),结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: UTF-8 -*-
"""
@Author  : 叶庭云
@CSDN    : https://yetingyun.blog.csdn.net/
"""
answers = []
for idx, ans in dic2.items():
    big_lst = []
    for k, v in dic1.items():
        sentence = [x.strip(" ") for x in v.split(".")]
        scores = []
        for a in sentence:
            # score = fuzz.token_sort_ratio(a, ans)
            score = fuzz.partial_ratio(a, ans)
            if score > 30:
                scores.append(score)
        scores.sort()
        if len(scores) >= 2:
            max_ = max(scores) + scores[-2]
        else:
            max_ = max(scores)
        big_lst.append((k, max_, scores))
    results = sorted(big_lst, key=lambda x: x[1], reverse=True)
    print(results)
    print("-" * 66)
    answers.append(results[0][0])


print("answer:", answers)

本文利用 Python 的模糊匹配方法来刷英语六级段落匹配,仅需要3秒!(还是在打印了中间结果的情况下),选取的是 2021 年 6 月英语六级真题(卷一)来进行测试,昨天刚考的六级,网上还没有找到能用的真题PDF。感兴趣的读者后面可以自行动手实践呀,看看能对多少个。不会吧不会吧,不会有人六级错两个以上吧🚀🚀

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NLP教程:用Fuzzywuzzy进行字符串模糊匹配
在计算机科学中,字符串模糊匹配( fuzzy string matching)是一种近似地(而不是精确地)查找与模式匹配的字符串的技术。换句话说,字符串模糊匹配是一种搜索,即使用户拼错单词或只输入部分单词进行搜索,也能够找到匹配项。因此,它也被称为字符串近似匹配。
AiTechYun
2018/11/08
5.6K0
Python中匹配模糊的字符串
如何使用thefuzz 库,它允许我们在python中进行模糊字符串匹配。此外,我们将学习如何使用process 模块,该模块允许我们在模糊字符串逻辑的帮助下有效地匹配或提取字符串。
Python学习者
2023/10/09
9310
Python算法模糊匹配:FuzzyWuzzy深度剖析,从入门到精通,解决你所有需要匹配的需求
在数据科学与机器学习的广阔领域中,处理不精确或模糊的数据是一项至关重要的技能。想象一下,当你面对的是一堆拼写错误、缩写、或是格式不一的文本数据时,如何高效地从中提取有价值的信息?这正是FuzzyWuzzy——Python中一个强大的模糊字符串匹配库,能够大展身手的地方。
小白的大数据之旅
2024/11/20
1.3K0
Python算法模糊匹配:FuzzyWuzzy深度剖析,从入门到精通,解决你所有需要匹配的需求
字段匹配工具----python编写
FuzzyWuzzy是一个基于Levenshtein Distance算法的模糊字符串匹配工具包。该算法计算两个序列之间的差异,即从一个字符串转换到另一个字符串所需的最少编辑操作次数。编辑操作可以是替换、插入或删除字符。编辑距离越小,两个字符串的相似度越大。
cultureSun
2023/10/18
8530
python实现字符串模糊匹配
之前笔者写过一篇文章关于如何做搜索,但那篇文章的角度是从文本相似度角度写的。那种方式是目前发展的趋势,但是真正的搜索特别是网页搜索不可能在大范围的文本之间两两算相似度的。那样搜索引擎的效率会变得特别低下。本文将从字符串模糊匹配的角度介绍一下搜索引擎。 一般的搜索,要分为两个步骤:搜索和排序。搜索的方法有很多,为了高效一般进行字符串或关键词匹配,而用户提供的一些关键词可能不是数据库中保存的,例如使用倒排的方法很难找到Head节点,此处需要使用模糊匹配的方式。这里简单列举一下Learning-to-Rank排序
CodeInHand
2018/04/08
23K0
python实现字符串模糊匹配
FuzzyWuzzy:Python中模糊匹配的魔法库
在日常开发工作中,经常会遇到这样的一个问题:要对数据中的某个字段进行匹配,但这个字段有可能会有微小的差异。比如同样是招聘岗位的数据,里面省份一栏有的写“广西”,有的写“广西壮族自治区”,甚至还有写“广西省”……为此不得不增加许多代码来处理这些情况。
可以叫我才哥
2022/06/06
4K0
FuzzyWuzzy:Python中模糊匹配的魔法库
非常实用的 Python 库,推一次火一次!
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使它成为全世界用户(初学者和高级用户)的合适选择。它的成功和流行的原因之一是它强大的第三方库的集合,这些库使它可以保持活力和高效。
码农向前冲
2022/01/11
4410
非常实用的 Python 库,推一次火一次!
非常实用的9个Python库,谁用谁知道
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使它成为全世界用户(初学者和高级用户)的合适选择。它的成功和流行的原因之一是它强大的第三方库的集合,这些库使它可以保持活力和高效。
秃头程序员
2021/12/27
7630
非常实用的9个Python库,谁用谁知道
Marker 源码解析(一)
ApacheCN_飞龙
2024/03/09
4230
精通 Transformers(一)
在过去的 20 年间,我们在自然语言处理(NLP)领域已经见证了巨大的变化。在此期间,我们经历了不同的范式,最终进入了由神奇的Transformers架构主宰的新时代。这种深度学习架构是通过继承多种方法而形成的。诸如上下文词嵌入、多头自注意力、位置编码、可并行化的架构、模型压缩、迁移学习和跨语言模型等方法都在其中。从各种基于神经网络的自然语言处理方法开始,Transformers架构逐渐演变成为一个基于注意力的编码器-解码器架构,并持续至今。现在,我们在文献中看到了这种架构的新成功变体。有些出色的模型只使用了其编码器部分,比如 BERT,或者只使用了其解码器部分,比如 GPT。
ApacheCN_飞龙
2024/05/24
4770
精通 Transformers(一)
Python 自然语言处理实用指南:第三部分
在本节中,我们将使用 PyTorch 中可用的各种自然语言处理(NLP)技术来构建各种实际 -使用 PyTorch 的世界应用。 情感分析,文本摘要,文本分类以及使用 PyTorch 构建聊天机器人应用是本节将介绍的一些任务。
ApacheCN_飞龙
2023/04/27
1.8K0
Python100Days
这可能是我目前发现最好最好的Python教程了,故整理至我的博客。 原项目GitHub地址https://github.com/jackfrued/Python-100-Days
一点儿也不潇洒
2018/08/07
10K0
Python 迁移学习实用指南:6~11
在计算机视觉的保护下,图像识别是一个活跃的跨学科研究领域。 顾名思义,图像或对象识别是识别图像或视频序列中的对象的任务。 传统上,该领域利用数学和计算机辅助建模以及对象设计方面的进步。 这些年来,已经开发了一些手工标注的数据集,以测试和评估图像识别系统。 我们现在称它们为传统技术,一直统治着整个场景,并且不断地改进这项任务,直到最近。 2012 年,深度学习参加了 ImageNet 竞赛,为快速改善和进步计算机视觉和深度学习技术打开了闸门。
ApacheCN_飞龙
2023/04/23
1.7K0
自然语言处理学术速递[6.29]
【1】 Efficient Dialogue State Tracking by Masked Hierarchical Transformer 标题:基于屏蔽分层变换器的高效对话状态跟踪
公众号-arXiv每日学术速递
2021/07/02
1.4K0
Python 人工智能:11~15
在本章中,我们将学习遗传算法。 首先,我们将描述什么是遗传算法,然后将讨论进化算法和遗传编程的概念,并了解它们与遗传算法的关系。 我们将学习遗传算法的基本构建模块,包括交叉,变异和适应度函数。 然后,我们将使用这些概念来构建各种系统。
ApacheCN_飞龙
2023/04/23
1.8K0
一种绝对提高开发水平的方法
如果做了多年开发的你发现自己的水平一直上不去,你可能要提高自己的英文水平了,英语就是你技术的瓶颈,对有些人可能是硬伤。
张果
2018/07/31
9.3K2
一种绝对提高开发水平的方法
自然语言处理学术速递[12.14]
【1】 Dependency Learning for Legal Judgment Prediction with a Unified Text-to-Text Transformer 标题:使用统一文本到文本转换器的法律判决预测的依赖学习 链接:https://arxiv.org/abs/2112.06370
公众号-arXiv每日学术速递
2021/12/17
7400
机器学习学术速递[12.6]
【1】 TC-GNN: Accelerating Sparse Graph Neural Network Computation Via Dense Tensor Core on GPUs 标题:TC-GNN:在GPU上通过密集张量核加速稀疏图神经网络计算 链接:https://arxiv.org/abs/2112.02052
公众号-arXiv每日学术速递
2021/12/09
1.4K0
机器学习学术速递[8.31]
【1】 Whole Brain Vessel Graphs: A Dataset and Benchmark for Graph Learning and Neuroscience (VesselGraph) 标题:全脑血管图:图学习和神经科学(VesselGraph)的数据集和基准 链接:https://arxiv.org/abs/2108.13233
公众号-arXiv每日学术速递
2021/09/16
1.9K0
【机器学习Machine Learning】资料大全
  昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^)   推荐几本好书: 1.Pattern Recognition and Machine Learning (by Hastie, Tibshirani, and Friedman's ) 2.Elements of Statistical Learning(by Bishop's)   这两本是英文的,但是非常全,第一本需要有一定的数学基础,第可以先看第二本。如果看英文觉得吃力,推荐看一下下面几本英文书
Charlotte77
2018/01/09
9.2K0
相关推荐
NLP教程:用Fuzzywuzzy进行字符串模糊匹配
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验