【问题标题】:Find the closest match between two string variables using difflib使用 difflib 查找两个字符串变量之间最接近的匹配项
【发布时间】:2015-09-29 19:55:27
【问题描述】:

))大家好,我想使用 difflib 找到两个字符串变量之间最接近的匹配,这是我的情况...

varA = 'plainmountain'
varB = 'skymountain'

newVarA = 'piaimauntain'

我想通过 difflib 在 VarA 和 VarB 变量中找到最接近的匹配项(它们只是变量,而不是列表),如果我在搜索中添加第三个变量 varC 会怎样???我怎样才能让 difflib 找到一个最接近的匹配项。

目前我正在尝试这个...

varA = 'plaimountain'
varB = 'skymountain'
varAll = [varA, varB, varC]
newVarA = 'piaimauntain'

我是这样做的......

import difflib
d = difflib.Differ()
diff = d.compare(varA, newVarA)
print '\n'.join(diff)

现在我是这样做的……

from difflib import SequenceMatcher
result = difflib.get_close_matches(newVarA, varAll, 1, 0.7)
print result

感谢高级。

【问题讨论】:

标签: python string-matching difflib


【解决方案1】:

如果我理解您的任务,它将有所帮助:

import difflib

varA = 'plaimountain'
varB = 'piaimauntain'
varC = 'skymountain'
varS = ['piaimauntain','sky','skymountain','dog','231']

#it parse varB by letters
best = difflib.get_close_matches(varA, varB)
print best

best = difflib.get_close_matches(varA, [varB])
print best

best = difflib.get_close_matches(varA, [varB,varC])
print best

best = difflib.get_close_matches(varA, [varB,varS])
print best

【讨论】:

  • hi @zveryansky 谢谢,是的,我从 difflib 文档中读到了(即使我不能在不创建列表变量的情况下完成这项任务,但没有它可以做到吗?)请在你的回答中我不'不明白你为什么将 varB 括在括号 [varB]、[varB, varC] 或 [varB, carS] 中,这是为什么呢?您正在创建一个新列表吗?
  • get_close_matches() 至少获得 2 个参数:单词和“可能性”是序列列表。如果您使用 varB 函数,则会将 'plaimountain' 与 ['p','i','a','i','m','a','u','n','t',' 进行比较一个','我','n']。如果您使用 [varB],它将比较 'plaimountain' 和 ['piaimauntain']。当我使用 [varB] 时,我正在创建一个列表,如果您不能使用列表,请尝试 (varB) 它将是元组。
  • 嗨@zveryansky,但有一个问题,脚本返回['plaimountain'],但我想得到varA 作为结果。我的意思是,我想获得最佳匹配的字符串的变量名,而不是字符串本身。我怎样才能做到这一点?我需要创建第二个比较吗?谢谢高级。
  • 我尝试使用第二个比较,但我得到了最佳匹配(最佳)作为单个项目的列表变量,并且 python 不允许我将变量与列表变量进行比较,如果我只是得到一个最佳匹配,我想把它作为一个字符串,而不是作为一个列表项。有什么解决办法吗?谢谢高级。
  • best = difflib.get_close_matches(varA, [varB])[0] 它将是一个字符串
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 2019-09-22
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多