Как мне создать разницу между файлом и его неполным патчем?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как мне создать разницу между файлом и его неполным патчем?

Сообщение Anonymous »

Я работаю над проектом, который требует от меня создания интерфейса между LLM и пользователем. LLM используется для генерации исправлений кода, и мне нужно вывести разницу между сгенерированным кодом и содержимым данного файла C. Проблема возникает, когда в сгенерированном коде есть эллипсы, обозначающие блок неизмененного кода, это нарушает различие.
До сих пор я пытался использовать расстояние Левенштейна, чтобы найти похожие строки и найти diff между ними, однако этот подход, похоже, не работает при добавлении новых строк. Вот как я это реализовал
import difflib
from rapidfuzz import fuzz

def compare_code_with_diffs(
original_code, fixed_code, similarity_threshold=0.7
):
def string_similarity(s1, s2):
# Remove spaces and convert to lowercase for a more robust comparison
s1 = s1.replace(" ", "").lower()
s2 = s2.replace(" ", "").lower()
return (
fuzz.ratio(s1, s2) / 100.0
) # Convert percentage to a float between 0 and 1

def find_matching_indices(A, B):
result = []
for i, a_item in enumerate(A):
best_match = None
best_similarity = 0
for j, b_item in enumerate(B):
similarity = string_similarity(a_item, b_item)
if similarity > best_similarity:
best_similarity = similarity
best_match = (j, b_item, similarity)

if best_match and best_similarity >= similarity_threshold:
result.append(
(i, best_match[0], a_item, best_match[1], best_similarity)
)

return result

def generate_diff(old_line, new_line):
differ = difflib.Differ()
diff = list(differ.compare([old_line], [new_line]))
return "\n".join(diff)

A = fixed_code.splitlines()
B = original_code.splitlines()
matches = find_matching_indices(A, B)

diffs = []
for match in matches:
if similarity_threshold < match[4] < 1.0:
diff = generate_diff(match[3], match[2])
diffs.append(
{
"fixed_index": match[0],
"original_index": match[1],
"similarity": match[4],
"diff": diff,
}
)

return diffs


Подробнее здесь: https://stackoverflow.com/questions/787 ... atch-of-it
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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