Как выровнять смещение двух строк по списку смещений подстрок?Python

Программы на Python
Ответить
Anonymous
 Как выровнять смещение двух строк по списку смещений подстрок?

Сообщение Anonymous »

Дано a и b, относящиеся к списку подстрок в c:
a = "how are you ?"
b = "wie gehst's es dir?"

c = [
("how", "wie"),
("are", "gehst's"),
("you", "es")
]

Каков оптимальный метод получения смещений, которые дают:
offsets = [
("how", "wie", (0, 3), (0, 3)),
("are", "gehst's", (4, 6), (4, 11)),
("you", "es", (7, 9), (12, 14))
]


Из ChatGPT предлагается упрощенный способ:
Чтобы сгенерировать желаемые смещения из заданных строк. a и b и список пар подстрок c, нам нужно найти начальную и конечную позиции (индексы) каждой подстроки из a в самом a и каждой подстроки из b в самом b.
Шаги:
  • Перебрать каждую пару подстрок в списке c.
  • Найти начальную и конечные позиции подстроки из a в строке a.
  • Найдите начальную и конечную позиции подстроки из b в строке b.
  • Сохраните пару подстрок и соответствующие им позиции.
a = "how are you ?"
b = "wie gehst's es dir?"
c = [
("how", "wie"),
("are", "gehst's"),
("you", "es")
]

# Create the offsets list
offsets = []
for substring_a, substring_b in c:
# Find the start and end indices for substring_a in string a
start_a = a.find(substring_a)
end_a = start_a + len(substring_a) - 1

# Find the start and end indices for substring_b in string b
start_b = b.find(substring_b)
end_b = start_b + len(substring_b) - 1

# Append the result as a tuple
offsets.append((substring_a, substring_b, (start_a, end_a), (start_b, end_b)))

# Output the result
print(offsets)

Но есть ли что-то более оптимальное, особенно если термины повторяются? Например
a = "how are you ? are you okay ?"
b = "wie gehst's es dir? geht es dir gut "

c = [
("how", "wie"),
("are", "gehst's"),
("you", "es"),
("are", "geht"),
("you", "es"),
("okay", "gut")
]


Подробнее здесь: https://stackoverflow.com/questions/793 ... gs-offsets
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»