Поиск общих подстрок в нескольких строках

Только пытаюсь учить python. Подскажите пожалуйста библиотеку для python да и вообще в какую сторону рыть для решения задачи по поиску одинаковых сочетаний символов в сравнении 2х и более строк. Под одинаковыми символами подразумевается сочетание 2х и более символов. Например:

Строка 1

54545wqeqweretert545512abcfgdfhfgh54uyi5yuihjkjh5k45454xcv

Строка 2

popowe512abcwql87552453kjkdsfmndsfnsdfsdf5896

В этих 2х разных строках есть одинаковое сочетание символов а именно "512abc", эти сочетания всегда разные и они неизвестны изначально. Их можно обнаружить только после сравнения этих строк. С помощью какой библиотеки python можно решить эту задачу??


Ответы (2 шт):

Автор решения: CrazyElf

Можно по-простому:

  • Нарезать каждую из строк на n-граммы (фрагменты длиной n)
  • Сделать из n-грамм множество
  • Пересечь такие множества для этих двух строк
text1 = "54545wqeqweretert545512abcfgdfhfgh54uyi5yuihjkjh5k45454xcv"
text2 = "popowe512abcwql87552453kjkdsfmndsfnsdfsdf5896"

def get_ngrams(text, min_len=3):
    return set(text[i:i+n] for n in range(min_len, len(text)) for i in range(len(text)-n+1))

print(sorted(list(get_ngrams(text1) & get_ngrams(text2)), key=len, reverse=True))

Вывод:

['512abc', '512ab', '12abc', '512a', '12ab', '2abc', '12a', 'abc', '512', '2ab']

Здесь берутся n-граммы начиная от размера 3 (иначе их слишком много будет). Результат сортируется от самого длинного размера подстроки к короткому.

→ Ссылка
Автор решения: Fox Fox

Задание слишком ёмкое для начинающего (обработка многих строк). Поэтому в качестве примера я переформулировал условие, сделав его менее сложным. Вот готовый скрипт, дальше развивайте его сами:

'''
написать скрипт для решения задачи по поиску одинаковых сочетаний символов (двух и более)
в двух строках. Вывести такие сочетания в виде списка.
'''

import os
def find_common_substrings(str1, str2, min_length=2):
    common_substrings = set()
    len1, len2 = len(str1), len(str2)

    for i in range(len1):
        for j in range(i + min_length, len1 + 1):
            substring = str1[i:j]
            if substring in str2:
                common_substrings.add(substring)

    return list(common_substrings)

# Входные данные
str1 = '54545wqeqweretert545512abcfgdfhfgh54uyi5yuihjkjh5k45454xcv'
str2 = 'popowe512abcwql87552453kjkdsfmndsfnsdfsdf5896'

# Поиск одинаковых сочетаний
common_substrings = find_common_substrings(str1, str2)

# Вывод результата
print("Строка №1:", str1)
print("Строка №2:", str2)
print("Общие сочетания символов:", common_substrings)
os.system("pause")
→ Ссылка