문서 비교

문서 비교

이 가이드는 Aspose.PDF FOSS 텍스트-디프 엔진을 사용하여 .NET에 대한 두 텍스트 실행을 비교하고 그 사이의 편집 시퀀스를 생성하는 방법을 보여줍니다. 이 비교 모델의 진입점은 DiffOperation, 단일 편집이 태그된 Operation (Equal, Delete, 또는 Insert), 함께 DiffUtils 공통 텍스트를 찾고 디프를 원본 및 대상 텍스트로 다시 조립하는 데 사용되는 헬퍼 클래스. 별도의 최적화 단계는 다음에 설명되어 있습니다 Diff 최적화, 이렇게 생성된 원시 디프 출력을 렌더링하거나 적용하기 전에 정규화합니다.


디프 모델: 연산 및 DiffOperation

Operation은(는) 디프에서 각 편집을 분류하는 열거형입니다: Equal은(는) 변경되지 않은 텍스트 구간을 표시하고, Delete은(는) 원본에서 제거된 구간을 표시하며, Insert은(는) 대상에 추가된 구간을 표시합니다. DiffOperation는 Operation 값을 해당 Text와 연결하고, 두 편집을 동등성 비교할 수 있도록 IEquatable<DiffOperation>을 구현합니다.

using Aspose.Pdf.Comparison.Diff;

// A single edit consists of an Operation and the run of text it applies to.
var unchanged = new DiffOperation(Operation.Equal, "Aspose.PDF ");
var removed = new DiffOperation(Operation.Delete, "for .NET Framework");
var added = new DiffOperation(Operation.Insert, "FOSS for .NET");

Console.WriteLine(unchanged.Operation); // Equal
Console.WriteLine(added.Text);          // "FOSS for .NET"

DiffUtils를 사용한 공통 텍스트 찾기

DiffUtils은(는) 디프 엔진이 두 문자열이 공유하는 공통 접두사와 접미사를 찾기 위해, 차이가 있는 중간 부분을 디프하기 전에 사용하는 정적 헬퍼 클래스입니다. FindCommonStartParts은(는) 공통 접두사를 찾고, FindCommonEndParts은(는) 공통 접미사를 찾습니다; FindCommonEndParts의 오버로드는 startIndex를 받아 이미 찾은 접두사 뒤에 오는 텍스트로 접미사 검색을 제한할 수 있게 합니다.

string original = "The quick brown fox";
string revised = "The quick red fox jumps";

var commonStart = DiffUtils.FindCommonStartParts(original, revised);
var commonEnd = DiffUtils.FindCommonEndParts(original, revised);

디프에서 텍스트 재조립

diff가 DiffOperation 값들의 시퀀스로 표현되면, DiffUtils은 비교 양쪽을 재구성할 수 있습니다: AssemblySourceText는 Equal와 Delete 실행으로부터 원본 텍스트를 재구성하고, AssemblyDestinationText는 Equal와 Insert 실행으로부터 수정된 텍스트를 재구성합니다.

using System.Collections.Generic;

var diffs = new List<DiffOperation>
{
    new DiffOperation(Operation.Equal, "The quick "),
    new DiffOperation(Operation.Delete, "brown"),
    new DiffOperation(Operation.Insert, "red"),
    new DiffOperation(Operation.Equal, " fox")
};

string sourceText = DiffUtils.AssemblySourceText(diffs);
string destinationText = DiffUtils.AssemblyDestinationText(diffs);

Console.WriteLine(sourceText);      // "The quick brown fox"
Console.WriteLine(destinationText); // "The quick red fox"

편집 비교 및 보고

DiffOperation은 Equals, GetHashCode, 그리고 ToString을 덮어쓰기하므로, 편집을 동등성 비교하거나 추가 변환 코드 없이 로그와 테스트 출력에 기록할 수 있습니다.

var a = new DiffOperation(Operation.Equal, "PDF");
var b = new DiffOperation(Operation.Equal, "PDF");

bool same = a.Equals(b); // true - same Operation and Text
Console.WriteLine(a.ToString());

팁 및 모범 사례

  • DiffOperation은 불변이며 IEquatable<DiffOperation>을 구현합니다 — 두 편집을 참조 동등성 대신 Equals를 사용해 비교하십시오.
  • 먼저 FindCommonStartParts을 사용해 공통 접두사를 찾은 다음, 그 길이를 FindCommonEndParts의 startIndex 오버로드에 전달하여 짧은 공통 접두사가 접미사의 일부로 이중 계산되는 것을 방지합니다.
  • AssemblySourceText와 AssemblyDestinationText을 사용해 DiffOperation 값들의 시퀀스가 원본 및 수정된 텍스트와 정확히 일치하는지 라운드트립을 검증한 후에 다른 곳에서 사용하십시오.
  • 시각적 diff를 렌더링할 때 Operation.Equal 실행을 무동작으로 처리하고, Delete과 Insert 실행만 강조 표시하십시오.
  • 이 엔진은 텍스트를 차이 분석하고, 문서를 직접 비교하지 않습니다 — 차이를 만들기 전에 비교하려는 텍스트를 추출하세요(예: 페이지나 문서에서).

일반적인 문제

문제원인수정
AssemblySourceText / AssemblyDestinationText 출력이 원본과 일치하지 않습니다diffs 목록이 불완전하거나 DiffOperation 항목의 순서가 뒤섞여 있습니다편집이 발생한 원래 순서대로, 시퀀스에 모든 편집을 포함하십시오
FindCommonEndParts이(가) 짧고 유사한 문자열에서 예상치 못한 결과를 반환합니다공통 접미사 검색이 FindCommonStartParts에 의해 이미 매치된 텍스트와 겹칩니다FindCommonStartParts이 반환한 길이를 startIndex 인수로 전달하십시오
Equals은(는) 동일하게 보이는 편집에 대해 false을 반환합니다Text 값은 공백이나 대소문자 차이로 다릅니다비교하려는 DiffOperation 값을 만들기 전에 텍스트를 정규화(트림/대소문자 변환)하십시오
Diff 출력이 시끄럽거나 불필요하게 조각난 것처럼 보입니다원시 DiffOperation 시퀀스는 아직 정규화되지 않았습니다설명된 최적화 단계에 따라 시퀀스를 실행하십시오 Diff 최적화

FAQ

차이 엔진은 무엇을 비교합니까?

텍스트 연속을 비교하고 DiffOperation 값의 순서를 생성합니다. 이 값들은 편집을 설명합니다 — 변경되지 않은, 삭제된, 또는 삽입된 텍스트 — 하나의 문자열을 다른 문자열로 바꾸는 데 필요합니다.

Operation 은 어떤 편집 유형을 지원합니까?

세 가지: Equal 은 변경되지 않은 텍스트, Delete 은 원본에서 제거된 텍스트, Insert 은 대상에 추가된 텍스트를 나타냅니다.

두 편집이 동일한지 어떻게 확인합니까?

Equals을(를) DiffOperation 인스턴스에서 호출하거나, 해당 인스턴스의 Operation와 Text 속성을 직접 비교하십시오.

diff에서 원본 텍스트와 수정된 텍스트를 다시 얻을 수 있나요?

예 — 원본 텍스트에는 DiffOperation 값 목록을 DiffUtils.AssemblySourceText에 전달하고, 수정된 텍스트에는 DiffUtils.AssemblyDestinationText에 전달하십시오.

이 페이지에서는 diff를 병합하거나 정리하는 내용을 다루나요?

아니요 — 원시 diff를 정규화(인접 실행 병합, 동일 부분을 가로질러 편집 슬라이딩)는 별도로 다루어집니다 차이 최적화.


API Reference 요약

클래스 / 메서드설명
Operation편집을 Equal, Delete, 또는 Insert 로 분류하는 열거형
DiffOperation단일 편집: 적용 대상인 Text와 짝을 이루는 Operation
DiffOperation.Operation이 편집에 대한 Operation 값
DiffOperation.Text이 편집이 적용되는 텍스트 구간
DiffOperation.Equals두 편집을 Operation와 Text으로 동등성을 비교합니다
DiffOperation.ToString편집을 문자열로 렌더링하여 로그 또는 표시용으로 사용합니다
DiffUtils텍스트 차이 분석 유틸리티를 제공하는 정적 헬퍼 클래스
DiffUtils.FindCommonStartParts두 문자열이 공유하는 공통 접두사를 찾습니다
DiffUtils.FindCommonEndParts두 문자열이 공유하는 공통 접미사를 찾으며, 선택적으로 인덱스에서 시작할 수 있습니다.
DiffUtils.AssemblySourceText원본 텍스트를 DiffOperation 값 목록에서 재조립합니다
DiffUtils.AssemblyDestinationText수정된 텍스트를 DiffOperation 값 목록에서 재조립합니다

참조

 한국어