직장에서 문서 개정판을 비교하기 위해 DIFF 구현을 작성했습니다. 그것은 O (ND) 차이 알고리즘 및 그 변형에 기초한다 .
중요한 것은 변경 목록을 가져 와서 사람이 읽을 수있는 텍스트로 해석하는 것입니다. 현재 알고리즘은 매우 효율적이지만 확장하기가 너무 많습니다.
짧은 질문
A *와 휴리스틱을 사용하여 "턴"에 대한 벌칙을 추가하려고했습니다. 아이디어는 할 수있는 부드럽게 인간이 읽을 수있는 무언가로 분석하는 것이 더 쉽습니다 그래서 "삭제, 추가, 추가, 삭제, 추가, 삭제"불필요한. 기본적으로 가장 짧은 경로 문제를 가장 간단한 경로 문제 로 바꾸십시오 .
물론 항상 출력을 생성하지의 그리고 "삭제 모든 추가 다 "
이것이 합리적으로 들립니까?
DIFF 구현에서 휴리스틱을 사용하는 데 우선 순위가 있습니까? 휴리스틱이란 무엇입니까?
문제 :
긴 문장이 삭제되고 다른 긴 문장이 제거되었지만 적어도 한 단어를 공유하는 경우 "with"라고 말합니다. 공통 단어를 그대로두면 (추가 및 삭제하지 않음) 가장 짧은 경로가 만들어집니다. 그러나 이것은 실제로 변경 내용을 인쇄하려는 인간에게 변화의 맥락을 혼란스럽게합니다.
현재 DIFF를 사용한 예 :
- 기존 문구 : 청소 : 작업장 공기로 파워 워시 및 블로우 드라이.
- 새 텍스트 : 청소 : 아세톤과 보풀없는 천으로 닦습니다.
- 메모 목록 변경 :
- "파워 워시 및 블로우 드라이"를 "아세톤으로 닦아 내기"로 변경
- "샵 에어"를 "아세톤 및 보풀없는 천"으로 변경
참고 : " 'shop air'를 삭제하고 'acetone'을 추가 하십시오."대신 "Change"가 사용됩니다.
보시다시피, 두 번째 노트는 모든 컨텍스트를 잃어 버리고 이전 텍스트와 새 텍스트 세트를 전혀 보지 않으면 의미를 이해할 수 없습니다.
구두점에 대한 참고 사항 :
구두점을 별도의 "단어"로 구분하여
- "("추가
대신에
- "수리"를 "(수리)"로 변경
이것은 독특했기 때문입니다. 그러나 두 텍스트 모두에 쉼표가있는 경우 (이전 예에서 "with"라는 단어와 반대되는 경우) 동일한 일이 발생합니다.
가능한 해결책:
나는 다른 경로 찾기 알고리즘을 대신 사용할 수 있다고 생각한다. 이것은 사람에게 더 의미가있는 다른 변화 "경로"에 가중치를 추가 할 수있는 유연성을 제공한다. 어쩌면 구두점을 포함하는 노드로 여행 할 때 무게가 거의 들지 않을 수도 있습니다 (이것이 다른 것들에 어떤 영향을 줄지 잘 모르겠습니다).
그런 다음 이전 예제에서 다음을 나열 할 수 있습니다.
- 메모 목록 변경 :
- "작업장 공기로 파워 워시 및 블로우 드라이"를 "아세톤 및 보풀없는 천으로 닦기"로 변경
보다! 훨씬 더 명확하다!
나는 성능에 타격을 줄 것이라는 것을 알고 있으며, 프로그램을 상당히 대대적으로 점검해야 할 수도 있지만, 원하는 최종 결과를 얻는 것이 더 중요합니다.
결론 :
DIFF 구현에서 휴리스틱을 사용하는 데 우선 순위가 있습니까?
다른 생각들? 합리적인 시간 투자? 다른 아이디어? 다른 알고리즘?
미리 감사드립니다!
편집하다:
A *를 사용하지 않고 알고리즘에 휴리스틱을 추가하도록 내 질문을 명확하게 / 고화시키고 질문을 일반화하려고했습니다. 이 경우 기본적으로 같은 것이지만 지금은 여전히 더 정확하다고 생각합니다. 이 게시물 은 통찰력 이 있었습니다.