gpt4 book ai didi

python - 在字符串列表中找到最常见的子字符串?

转载 作者:行者123 更新时间:2023-11-28 21:31:14 27 4
gpt4 key购买 nike

我有一个字符串名称的 Python 列表,我想从其中删除所有名称中的公共(public)子字符串。

读完这个类似的 answer我几乎可以使用 SequenceMatcher 获得所需的结果。

但仅当所有 项具有公共(public)子字符串时:

From List:
string 1 = myKey_apples
string 2 = myKey_appleses
string 3 = myKey_oranges

common substring = "myKey_"

To List:
string 1 = apples
string 2 = appleses
string 3 = oranges

但是我有一个稍微嘈杂的列表,其中包含一些不符合相同命名约定的零散项目。

我想从多数中删除“最常见”的子串:

From List:
string 1 = myKey_apples
string 2 = myKey_appleses
string 3 = myKey_oranges
string 4 = foo
string 5 = myKey_Banannas

common substring = ""

To List:
string 1 = apples
string 2 = appleses
string 3 = oranges
string 4 = foo
string 5 = Banannas

我需要一种方法来匹配“myKey_”子字符串,以便我可以将其从所有名称中删除。

但是当我使用 SequenceMatcher 时,项目“foo”导致“最长匹配”等于空白“”。

我认为解决这个问题的唯一方法是找到“最常见的子串”。但这怎么可能实现呢?


基本示例代码:

from difflib import SequenceMatcher

names = ["myKey_apples",
"myKey_appleses",
"myKey_oranges",
#"foo",
"myKey_Banannas"]

string2 = names[0]
for i in range(1, len(names)):
string1 = string2
string2 = names[i]
match = SequenceMatcher(None, string1, string2).find_longest_match(0, len(string1), 0, len(string2))

print(string1[match.a: match.a + match.size]) # -> myKey_

最佳答案

给定 names = ["myKey_apples", "myKey_appleses", "myKey_oranges", "foo", "myKey_Bannanas"]

我能想到的一个 O(n^2) 解决方案是找到所有可能的子字符串并将它们存储在字典中,其中包含它们出现的次数:

substring_counts={}

for i in range(0, len(names)):
for j in range(i+1,len(names)):
string1 = names[i]
string2 = names[j]
match = SequenceMatcher(None, string1, string2).find_longest_match(0, len(string1), 0, len(string2))
matching_substring=string1[match.a:match.a+match.size]
if(matching_substring not in substring_counts):
substring_counts[matching_substring]=1
else:
substring_counts[matching_substring]+=1

print(substring_counts) #{'myKey_': 5, 'myKey_apples': 1, 'o': 1, '': 3}

然后选择出现次数最多的子串

import operator
max_occurring_substring=max(substring_counts.iteritems(), key=operator.itemgetter(1))[0]
print(max_occurring_substring) #myKey_

关于python - 在字符串列表中找到最常见的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58585052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com