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

2024-10-02 18:24:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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")

Tags: 项目字符串in列表forstringlenif
3条回答

为了找到字符串之间的相似性,有很多种算法,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

如果您希望将textdistance与其他库的基准测试用于大型数据集,则会给出here

我相信应该编写一个干净的代码并分离出各个功能,这样代码就易于阅读和贡献

我定义了一个函数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

为此,有一个名为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

相关问题 更多 >