【发布时间】:2020-08-10 09:06:35
【问题描述】:
我需要使用 python 在列表中查找类似的项目。 (例如,“限制”类似于“限制”或“下载 ICD 文件”类似于“下载 ICD zip 文件”) 我真的希望我的结果与字符相似,而不是数字(例如“角度 1”与“角度 2”相似)。我列表中的所有这些字符串都以 '\0'
结尾我想要做的是将每个项目拆分为空白,并查看是否有任何部分由数字组成。 但不知何故,它并没有像我希望的那样工作。
这是我的代码示例:
for k in range(len(split)): # split already consists of splitted list entry
replace = split[k].replace(
"\\0", ""
) # replace \0 at every line ending to guarantee it is only a digit
is_num = lambda q: q.replace(
".", "", 1
).isdigit() # lambda i found somewhere on the internet
check = is_num(replace)
if check == True: # break if it is a digit and split next entry of list
break
elif check == False: # i know, else would be fine too
seq = difflib.SequenceMatcher(a=List[i].lower(), b=List[j].lower())
if seq.ratio() > 0.9:
print(Element1, "is similar to", Element2, "\t")
break
【问题讨论】:
-
你是如何定义相似的?..你是否只想检查一个词的末尾是否有一个's'并进行比较,或者如果 2 个单词甚至包含 1 个相同的字母,它们是否会被认为是相似的?
-
有点难回答,因为字符串可以有不同的长度,所以很难说匹配字符的数量。它们需要明显相似
-
在尝试编程之前,您需要先有一些想法,我建议您首先考虑您的程序需要什么样的相似性,然后为它编写代码。对于计算机来说,对人类理解有一个大致的了解是不够的,它需要一些逻辑。为了清楚起见,请考虑一下您的需求,在您确定需求之前不要开始考虑代码。
标签: python list difflib sequencematcher