본문 바로가기
미디어위키

(번역) Wikidiff2

by 다움위키 2024. 12. 2.

원문 보기: https://dawoum.duckdns.org/wiki/Wikidiff2

 

Original article: mw:Wikidiff2

Wikidiff2는 미디어위키에 더 빠른 diff 엔진을 제공하는 PHP에 대한 네이티브 확장입니다. 그것은 원래의 wikidiff와 미디어위키의 DifferenceEngine 클래스를 기반으로 합니다. 그것은 입력 텍스트 (줄-기반 또는 단어-수준)에서 diff를 생성하고 이것들을 HTML 또는 JSON으로 포맷할 수 있습니다.

Wikidiff2에는 일본어와 태국어 알파벳, 그리고 통합된 한자로부터 문자로 구성된 텍스트에 대한 문자-수준 diff 지원이 포함되어 있고, 해당 언어에서 단어-수준 diff에 대한 태국어 세그먼테이션 지원이 포함되어 있습니다. 일본어, 중국어, 및 태국어는 단어를 구분하기 위해 공백을 사용하지 않습니다. 입력은 UTF-8로 인코딩된 것으로 가정합니다. 잘못된 UTF-8은 출력의 자름과 같은 바람직하지 않은 작업을 일으킬 수 있으므로, 응용 프로그램에서 입력을 검증해야 합니다. 입력 텍스트는 유닉스-스타일 줄 끝을 가져야 합니다.

Installing

Debian or Ubuntu

apt-get install php-wikidiff2

이전 버전의 패키지에서는 실제로 확장 기능을 활성화하기 위해 다음 명령을 실행해야 할 수도 있습니다:

sudo phpenmod wikidiff2

Manually

먼저, libthai를 가져와서 컴파일합니다 (libthai는 OS나 배포판의 패키지, 예를 들어 libthai-dev에서 사용할 수 있어야 합니다).

git (git clone https://gerrit.wikimedia.org/r/mediawiki/php/wikidiff2)을 통해 wikidiff2를 다운로드하거나 https://releases.wikimedia.org/wikidiff2/에서 타르볼을 다운로드함으로써 가져올 수 있습니다.

그런-다음 wikidiff2를 컴파일합니다. phpize가 필요합니다 (PHP와 함께 제공됨).

cd wikidiff2
phpize
./configure
make
sudo make install

다음과 같이 php 옵션이 설정되었는지 확인하십시오:

extension = wikidiff2.so

이것은 보통 "php.ini" 파일에 설정됩니다.

Configuration

다음 "php.ini" 매개변수가 지원됩니다:

wikidiff2.moved_line_threshold

Wikidiff2는 변경된 문자 개수를 기반으로 추가 및 삭제된 줄의 유사성을 추정합니다. 추가 및 삭제된 줄의 유사성이 이 임계값보다 크면 줄은 이동된 것으로 표시됩니다.

범위 0.0 .. 1.0. 기본값 0.4.

wikidiff2.change_threshold

이 임계값 아래의 유사도 값을 갖는 변경된 줄은 삭제된 줄과 추가된 줄로 나뉩니다. 이것은 어떤 경우에서 이동된 줄을 일치시키는 데 도움이 됩니다.

범위 0.0 .. 1.0. 기본값 0.2.

wikidiff2.moved_paragraph_detection_cutoff

Diff 테이블에 추가되거나 삭제된 줄의 수가 이 제한보다 클 때, 이동된 줄을 감지하려는 시도는 이루어지지 않을 것입니다.

기본값 100.

wikidiff2.max_word_level_diff_complexity

줄 안에서 두 줄의 변화를 비교할 때, LHS 단어 개수와 RHS 단어 개수의 곱이 이 제한을 초과하지 않는 한 단어 수준 차이가 수행될 것입니다.

기본값 40000000.

MediaWiki

만약 모듈이 PHP에 설치되어 있으면, 미디어위키가 이를 사용하려고 시도할 것입니다. 구성 옵션에 대해 $wgExternalDiffEngine을 참조하십시오.

Usage

입력은 UTF-8로 인코딩된 것으로 가정합니다. 잘못된 UTF-8은 출력이 잘리는 것과 같은 바람직하지 않은 작업을 일으킬 수 있으므로, 입력은 응용 프로그램에서 검증되어야 합니다. 입력 텍스트는 유닉스-스타일 줄 끝을 가져야 합니다.

wikidiff2_do_diff

function wikidiff2_do_diff(string $text1, string $text2, int $numContextLines): string

두 문자열 $text1과 $text2를 비교하고, HTML 테이블의 일부, 즉 일련의 <tr> 요소로 포맷된 출력을 생성합니다.

$numContextLines는 각 변경 전후에 표시된 복사된 컨텍스트 줄의 숫자입니다. 컨텍스트 줄과 변경의 각 블록 앞에, 줄 번호가 <tr>/<td> 내부의 HTML 주석으로 표시됩니다. 예를 들어,

<!--LINE 1-->

이를 통해 응용 프로그램은 줄 번호를 지역화할 수 있습니다.

wikidiff2_inline_diff

function wikidiff2_inline_diff(string $text1, string $text2, int $numContextLines): string

두 문자열 $text1과 $text2를 비교하고, 인라인 HTML 형식으로 출력을 생성합니다.

wikidiff2_inline_json_diff

function wikidiff2_inline_json_diff(string $text1, string $text2, int $numContextLines): string

두 개의 문자열 $text1과 $text2를 비교하고 JSON으로 포맷된 출력을 생성합니다. JSON diff 포맷 문서를 참조하십시오.

wikidiff2_multi_format_diff

function wikidiff2_multi_format_diff(string $text1, string $text2, array $options = []): array

옵션의 결합 배열을 갖는 두 개의 문자열 $text1과 $text2를 비교합니다:

  • numContextLines: 각 블록 전후에 표시되는 컨텍스트 줄의 개수
  • changeThreshold: 줄의 쌍이 변경으로 감지되고 단어-수준 차이로 표시되기 위해 가져야 하는 최소 유사도입니다. 만약 존재하면, 이것은 php.ini wikidiff2.change_threshold를 덮어씁니다.
  • movedLineThreshold: 이동된 줄로 감지되기 ​​위해 두 줄이 가져야 하는 최소 유사성입니다. 만약 존재하면, php.ini wikidiff2.moved_line_threshold를 덮어씁니다.
  • maxMovedLines: 추가 또는 삭제된 줄의 최대 수로, 이 수를 초과하면 이동 감지가 수행되지 않을 것입니다. 만약 존재하면, php.ini moved_paragraph_detection_cutoff를 덮어씁니다.
  • maxWordLevelDiffComplexity: 단어-수준 diff의 최대 복잡도입니다. LHS와 RHS에서 단어 개수의 곱이 이 값을 초과하면, 단어-수준 diff가 수행되지 않을 것입니다. 만약 존재하면, 이것이 php.ini wikidiff2.max_word_level_diff_complexity를 덮어씁니다.
  • maxSplitSize: $text1의 단일 줄에 대한 단어-수준 diff에 대해 고려할 수 있는 $text2의 최대 줄 수. 기본값: 1.
  • initialSplitThreshold: 분할 감지 검색 중에 유지해야 하는 최소 유사도입니다. 유사도가 이 수준 아래로 떨어지면 검색이 종료됩니다. 기본값: 0.1.
  • finalSplitThreshold: 한 줄과 여러 줄을 분할하여 비교를 표시하기 위해 달성해야 하는 최소 유사도입니다. 기본값: 0.6.
  • formats: 원하는 형식의 배열입니다. 각 형식은 다음 문자열 중 하나입니다: table, inline 또는 inlineJSON. 기본값: ['table'].

반환 값은 포맷된 출력의 결합 배열입니다. 각 요소의 키는 포맷 이름 table, inline 또는 inlineJSON이고, 값은 문자열입니다.

wikidiff2_version

function wikidiff2_version(): string {}

phpversion('wikidiff2')와 같은 결과를 생성합니다.

Formats

HTML

HTML diff (나머지 문서 구조가 생략된 여러 HTML 테이블 행)는 나란히 비교 또는 인라인 비교로 사용할 수 있습니다. "<", ">" 및 "&" 문자는 출력에서 ​​HTML-이스케이프될 것입니다. Wikidiff2 C++ 라이브러리에서, TableDiff 클래스를 사용하여 나란히 diff에 접근하거나 InlineDiff 클래스를 사용하여 인라인 diff에 접근할 수 있습니다. 두 클래스 모두는 매개변수로 전달된 텍스트의 diff를 반환하는 execute 메서드를 포함합니다. PHP 래퍼 함수 (나란히 diff에 대해) wikidiff2_do_diff 및 (인라인 diff에 대해) wikidiff2_inline_diff를 사용하여 이들 execute 메서드에 접근할 수도 있습니다.

JSON

JSON diff는 두 텍스트 집합 사이의 시각적인, 줄별 비교를 구성하는 구조화된 데이터를 제공합니다. Wikidiff2 C++ 라이브러리에서, InlineDiffJSON 클래스를 사용하여 JSON diff에 접근할 수 있으며, 이 클래스에는 매개변수로 전달된 텍스트의 diff를 반환하는 execute 메서드가 포함되어 있습니다. PHP 래퍼 함수 wikidiff2_inline_json_diff를 사용하여 이 execute 메서드에 접근할 수도 있습니다.

JSON diff schema

JSON diff에는 두 텍스트 집합 사이의 변경 사항을 식별하는 속성이 포함되어 있습니다. JSON diff의 예제에 대해, MediaWiki REST API compare revisions endpoint를 참조하십시오.