문서 비교
문서 비교
이 가이드는 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 값 목록에서 재조립합니다 |