python文本字符串比对_python-模糊字符串比较

python-模糊字符串比较

我正在努力完成的是一个程序,该程序读取文件并根据原始句子比较每个句子。 与原始句子完全匹配的句子将得到1分,而与之相反的句子将得到0分。所有其他模糊句子将得到1到0分之间的分数。

我不确定要使用哪种操作在Python 3中完成此操作。

我包括了示例文本,其中文本1是原始文本,其他前面的字符串是比较文本。

文字:样本

文字1:那是一个黑暗而暴风雨的夜晚。 我一个人坐在红色的椅子上。 我并不孤单,因为我只有三只猫。

文字20:那是一个阴暗而暴风雨的夜晚。 我独自一人坐在深红色的椅子上。 我并不孤单,因为我有三只猫//应该得分最高但不能得分1

文字21:那是一个阴暗而狂暴的夜晚。 我一个人坐在一个深红色的大教堂上。 我并不孤单,因为我有三只猫//分数应低于文字20

文字22:我一个人坐在一个深红色的大教堂上。 我并不孤单,因为我有三只猫科动物。 那是一个阴暗而狂暴的夜晚。//分数应低于文字21,但不能低于0

文字24:那是一个黑暗而暴风雨的夜晚。 我并不孤单。 我没有坐在红色的椅子上。 我有三只猫。//应该得分为0!

4个解决方案

96 votes

有一个名为difflib的软件包。通过pip安装:

pip install fuzzywuzzy

简单用法:

>>> from fuzzywuzzy import fuzz

>>> fuzz.ratio("this is a test", "this is a test!")

96

该软件包建立在difflib的基础上。您问为什么不仅仅使用它? 除了更简单之外,它还具有许多不同的匹配方法(例如令牌顺序不敏感,部分字符串匹配),这使其在实践中更加强大。 process.extract函数特别有用:从集合中找到最佳匹配的字符串和比率。 从他们的自述文件:

偏比

>>> fuzz.partial_ratio("this is a test", "this is a test!")

100

代币分类率

>>> fuzz.ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")

90

>>> fuzz.token_sort_ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")

100

代币设定比率

>>> fuzz.token_sort_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")

84

>>> fuzz.token_set_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")

100

处理

>>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]

>>> process.extract("new york jets", choices, limit=2)

[('New York Jets', 100), ('New York Giants', 78)]

>>> process.extractOne("cowboys", choices)

("Dallas Cowboys", 90)

congusbongus answered 2019-10-25T04:21:53Z

79 votes

标准库中有一个模块(称为SequenceMatcher),可以比较字符串并根据它们的相似性返回分数。 SequenceMatcher类应该做您想要做的。

编辑:来自python提示符的小例子:

>>> from difflib import SequenceMatcher as SM

>>> s1 = ' It was a dark and stormy night. I was all alone sitting on a red chair. I was not completely alone as I had three cats.'

>>> s2 = ' It was a murky and stormy night. I was all alone sitting on a crimson chair. I was not completely alone as I had three felines.'

>>> SM(None, s1, s2).ratio()

0.9112903225806451

HTH!

mac answered 2019-10-25T04:22:25Z

15 votes

unicode的索引和搜索速度比unicode(bytes)快得多。

from fuzzyset import FuzzySet

corpus = """It was a murky and stormy night. I was all alone sitting on a crimson chair. I was not completely alone as I had three felines

It was a murky and tempestuous night. I was all alone sitting on a crimson cathedra. I was not completely alone as I had three felines

I was all alone sitting on a crimson cathedra. I was not completely alone as I had three felines. It was a murky and tempestuous night.

It was a dark and stormy night. I was not alone. I was not sitting on a red chair. I had three cats."""

corpus = [line.lstrip() for line in corpus.split("\n")]

fs = FuzzySet(corpus)

query = "It was a dark and stormy night. I was all alone sitting on a red chair. I was not completely alone as I had three cats."

fs.get(query)

# [(0.873015873015873, 'It was a murky and stormy night. I was all alone sitting on a crimson chair. I was not completely alone as I had three felines')]

警告:注意不要在模糊集中混用unicode和bytes。

hobs answered 2019-10-25T04:22:59Z

1 votes

该任务称为复述识别,这是自然语言处理研究的活跃领域。 我已经链接了几篇最新的论文,您可以在GitHub上找到其中的许多开源代码。

请注意,所有回答的问题均假设两个句子之间存在某些字符串/表面相似性,而实际上两个字符串相似性很少的句子在语义上可以相似。

如果您对这种相似性感兴趣,可以使用Skip-Thoughts。根据GitHub指南安装软件,然后转到自述文件中的释义检测部分:

import skipthoughts

model = skipthoughts.load_model()

vectors = skipthoughts.encode(model, X_sentences)

这会将您的句子(X_sentences)转换为向量。 稍后,您可以通过以下方式找到两个向量的相似性:

similarity = 1 - scipy.spatial.distance.cosine(vectors[0], vectors[1])

我们假设vector [0]和vector1是要查找其分数的X_sentences [0]和X_sentences1的对应向量。

还有其他将句子转换为向量的模型,您可以在此处找到。

将句子转换为向量后,相似度只是找到这些向量之间的余弦相似度的问题。

Ash answered 2019-10-25T04:24:05Z

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

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

相关文章

C++判断字符是字母或数字

判断字符是字母:isalpha() 判断字符是数字:isdigit() 判断字符是字母或数字:isalnum()

获取版本号

-(NSString*)version; { NSDictionary *infoDictionary [[NSBundle mainBundle] infoDictionary]; CFShow((__bridge CFTypeRef)(infoDictionary)); // app版本 NSString *app_Version [infoDictionary objectForKey:"CFBundleShortVersionString"]; return app_Ve…

深度!全球机器人产业趋势及特征分析

来源:AI城市智库当前,全球机器人市场规模持续扩大,工业机器人市场增速回落,服务、特种机器人增速稳定。技术创新围绕仿生结构、人工智能和人机协作不断深入,产品在教育陪护、医疗康复、危险环境等领域的应用持续拓展&a…

设计代码说明什么是多态性?如何实现多态?(代码中要写注释解释)_狗屎一样的代码!快,重构我...

关注后你就是我的人了重构不止是代码整理,它提供了一种高效且受控的代码整理技术。(一)重构原则1、何谓重构对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本…

C++字母转大小写

大小写字母转化: 转化为大写:toupper() 转化为小写:tolower()

影响国家安全的四项新兴技术

来源:《Technology and National Security: Maintaining Americas Edge》The Aspen Institute (2019年1月31日)本文节选自专著《Technology and National Security: Maintaining Americas Edge》,本文部分讨论了四种新兴技术:生物技术、小型卫…

中小学生学python_《中小学生Python编程入门指南》 附录一

我们怎么看懂二进制的大小呢?换句话说,二进制怎么转化成十进制来理解呢?举个例子,比如说有一个8位的二进制数“01011011”如下,转换为十进制的,应该怎么转化?二进制数的每一位数都是2的几次幂&a…

Expected tensor for argument #1 ‘input‘ to have the same device as tensor for argument #2 ‘weight‘;

这种情况出现的原因之一是创建网络的语句没有放进train函数里 比如主文件中有train(),test(),eval()......等各个函数,但是创建网络的语句:netcreatenet()放…

单例在多线程中的使用

一次执行 dispatch_once: 对应的代码只执行一次 , 并且它是线程安全的, 系统会自动这个函数加锁,保存同一时间只有一个线程去执行任务, 实现真正意义的一次性执行 什么时候需要用到一次性执行: 单例 单例: 就是在程序运行期间,只有一个实例化对象 ---- 举例:音乐播放器的App…

找到一个或多个多重定义的符号_初中数学之相反数,总结规律,学会多重符号的化简...

今天继续和大家一起来学习初中数学,初一的相关知识,在前面已经介绍了正数和负数,对于有理数也有了清楚的认识,今天我们来学习相反数,相反数的概念和表示是中考命题的热点之一,经常结合其他知识点一起考察&a…

分类分布(categorical分布)

解释: 假设X有3种状态,分别为x_1,x_2,x_3,这三种状态的概率分别为0.1,0.7,0.2(分别对应θ_1,θ_2,θ_3) 例如现在要求x_2这种状态的概率,则x_10,x_21,x_30 代入公式: θ_1^x_1θ_1^01; θ_…

SQL Server XML转Table

前言   在SQL Server中有时候我们需要传人一个Table过去,然后可以在存储过程中批量更新,批量的获取相应数据。 但存储过程的参数是固定,所以这里我们可以变通的传人xml类型的参数,然后在存储过程中直接将其转换成我们需要的Tabl…

python处理报错_python3报错及解决方案/须注意的细节(持续更新)

问题:编码的问题导致。在pymysql.connect()创建连接时,参数charset"utf8",而非"utf-8".2、latin-1 codec cant encodecharacters编码的问题导致。数据库的编码和数据源的编码不一致,并且包含了不能处理的字符。出现这种报…

【人工智能】人工智能时代的道路选择 | 焦点评论

‍‍‍来源:产业智能官对话嘉宾朱松纯(Song-Chun Zhu)教授马尔奖、赫尔姆霍茨奖获得者、UCLA教授、IEEE Fellow、暗物智能科技创始人沈向洋(Harry Shum)博士微软全球执行副总裁、美国国家工程院外籍院士、英国皇家工程…

error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1)

leetcode179题中编译出现则个问题 出错的代码: class Solution { public:bool cmp1(const int& a, const int& b){string s1to_string(a);string s2to_string(b);string ans1s1.append(s2);string ans2s2.append(s1);return ans1>ans2;}string largest…

Java中间件

传统的HTML已经满足不了如今web系统的诸多的功能需求,建立一个交互式的Web,便诞生了各种Web开发语言,如ASP,JSP,PHP等,这些语言与传统的语言有着密切的联系,如JSP基于Java语言。 JSP是在普通的…

怎么把php查询到的值显示到下拉框中_RazorSQL for Mac(数据库工具查询) v8.5.0

RazorSQL Mac是一款专门为mac用户推出的数据库管理软件,允许您从一个数据库工具查询,更新,导航和管理所有主要数据库,RazorSQL Mac功能强大还支持SQL的编辑、数据库管理工具,支持多种数据库!razorsql mac版使用方法Raz…

5分钟,看尽芯片和摩尔定律“你追我赶”的抗衡50年

来源:大数据文摘“摩尔定律过去是每5年增长10倍,每10年增长100倍。而如今,摩尔定律每年只能增长几个百分点,每10年可能只有2倍。因此,摩尔定律结束了。”今年一月份,英伟达(Nvidia)CEO黄仁勋在CES 2019展会…

Android Context 上下文 你必须知道的一切

今天被问到了关于Context的一些问题。发现自己关于这部分还是不是很清晰,然后发现洋神博客里有一篇讲的很好 很详细。我反正是看懂了,我觉得我再写 也不会比这个更清楚了,所以转过来。 http://blog.csdn.net/lmj623565791/article/details/40…