如何检查字符串是否与列表中的任何字符串相似



我正试图弄清楚我的字符串是否与列表中的任何项目列表相似。我的错误是,它只迭代到我的列表大小,而不是单个字符串的长度。有什么建议吗?

my_string = "aplpe"
my_list=["orange", "apple", "grape"]
correctamount=0
if(my_string in my_list):
print("Passed")
else:
if any(my_string in s for s in my_list):
for i in range(len(my_string) + 1):
if my_string[i] == my_list[i][i]:
correctamount += 1
print(correctamount)
else:
correctamount == 0
print(correctamount)
if((correctamount/len(my_list) + 1 ) > .75):
print("Passed")
else:
print("Failure")

有一个名为jellyfish的库用于此目的-https://github.com/jamesturk/jellyfish

>>> import jellyfish
>>> jellyfish.levenshtein_distance(u'jellyfish', u'smellyfish')
2
>>> jellyfish.jaro_distance(u'jellyfish', u'smellyfish')
0.89629629629629637
>>> jellyfish.damerau_levenshtein_distance(u'jellyfish', u'jellyfihs')
1

该库具有不同的字符串匹配算法

Levenshtein Distance
Damerau-Levenshtein Distance
Jaro Distance
Jaro-Winkler Distance
Match Rating Approach Comparison
Hamming Distance

为了找到字符串之间的相似性,有很多种算法,Python有一个名为textdistance的库,它包含了所有的算法。

根据您的要求,我将使用的是Jaccard距离。你需要根据自己的需要来决定算法。

import textdistance as td
similarity_perc = [td.jaccard.normalized_similarity(my_string, s) for s in my_list]

每个字符串的相似性百分比

[0.22, 1.0, 0.42]

获取最相似字符串的索引

most_similar_index = similarity_perc.index(max(similarity_perc))
# Omitted not found check. Please do it yourself.
print(my_list[most_similar_index])

输出

apple

如果您希望将其用于大型数据集,这里会给出与其他库的文本距离基准。

我相信编写一个干净的代码并分离出单独的功能,这样代码就很容易阅读和贡献。

我定义了一个函数is_similar来检查similarity_percentage

看看以下实现:

import math
def is_similar(my_string, test_string):
min_len = min(len(my_string), len(test_string))
count = 0
for i in range(0, min_len):
if(my_string[i] == test_string[i]):
count = count+1
similarity_percentage = count/len(my_string)
print("Similarity Precentage: ", similarity_percentage)
return ( similarity_percentage > 0.75 )
my_string = "aplpe"
my_list=["orange", "apple", "grape"]
if(my_string in my_list):
print("Passed - Identical")
else:
for i in range(0, len(my_list)):
if(is_similar(my_string, my_list[i])):
print("Passed - Similar with", my_list[i], sep=" ")
else:
print("Failure")

输出:

Similarity Precentage:  0.0
Failure
Similarity Precentage:  0.6
Failure
Similarity Precentage:  0.4
Failure

情况2:

如果

my_string = "aplpe"
my_list=["orange", "apppe", "grape"]

然后,输出:

Similarity Precentage:  0.0
Failure
Similarity Precentage:  0.8
Passed - Similar with apppe
Similarity Precentage:  0.4
Failure

情况3:

如果

my_string = "aplpe"
my_list=["orange", "aplpe", "grape"]

然后,输出:

Passed - Identical

相关内容

最新更新