2009-11-13 3 views
8

업데이트 : 지금 PHP 확장은 기본적으로 PHP에서 퍼지 해시 및 해시 비교를 용이하게하기 위해 ssdeep의 C API에 대한 php_ssdeep라고 작성했습니다. 자세한 내용은 over at my blog입니다. 나는 이것이 사람들에게 도움이되기를 바랍니다.문서 관리 응용 프로그램에서 문서의 중복 및 유사 문서를 확인

다양한 파일 형식 (1000 개 파일)을 저장할 Linux 상자에서 PHP로 사용자 지정 문서 관리 응용 프로그램을 작성하는 중입니다. 텍스트 문서가 업로드되지 않았는지 여부를 확인해야합니다 데이터베이스에서 중복.

기본적으로 사용자가 새 파일을 업로드하면 중복되거나 유사한 콘텐츠가 포함 된 파일 목록을 제공 할 수 있습니다. 이렇게하면 기존 문서 중 하나를 선택하거나 자신의 파일을 계속 업로드 할 수 있습니다.

유사한 문서는 유사 콘텐츠에 대한 콘텐츠 및 동적으로 생성 된 키워드 목록을 조사하여 결정됩니다. 그런 다음 사용자에게 중복을 찾는 데 도움이되는 백분율 일치를 표시 할 수 있습니다.

이 과정에 대한 패키지와 과거에 어떻게했는지에 대한 아이디어가 있습니까?

내가 생각하는 직접 중복 공백

  • 제거 구두점을 스트리핑
  • 낮은 변환 또는
  • 는 다음을 형성 대문자 모든 텍스트의 내용과

    • 을 받고하여 수행 할 수 있습니다 새 문서와 비교할 MD5 해시입니다. 이러한 항목을 제거하면 사용자가 문서를 편집하여 예를 들어 추가 단락 나누기를 추가하는 경우 중복이 발견되지 않도록 방지 할 수 있습니다. 이견있는 사람?

      이 프로세스는 야간 작업으로도 실행될 수 있으며 계산 요구 사항이 실시간으로 실행하기에 너무 큰 경우 다음 로그인시 사용자에게 중복 사실을 알릴 수 있습니다. 그러나 실시간이 선호됩니다.

    +0

    MD5 해시를 사용하면 정확하게 동일한 두 문서 만 사용할 수 있습니다. 한 문자 만 다른 경우 결과 MD5 해시는 비슷한 위치에 있지 않습니다 (해시 지점 중 하나임). 따라서,이 비슷한 파일을 찾는 데는 효과가 없을 것입니다 ... – Franz

    +0

    나는 그것을 깨닫습니다. 그게 내가 왜 비슷한 파일이 아닌 정확한 일치를 찾는 기술이라고 언급했는지. – Treffynnon

    답변

    5

    업데이트 : 지금 기본적으로 PHP에 퍼지 해시 및 해시 비교를 용이하게하기 위해 ssdeep의 C API에 대한 php_ssdeep라는 PHP 확장을 작성한. 자세한 내용은 over at my blog입니다. 나는 이것이 사람들에게 도움이되기를 바랍니다.

    작성자 Jesse Kornblum이 "퍼지 해싱"이라고 부르는 프로그램을 발견했습니다. 아주 기본적으로 유사한 파일이나 동일한 일치를 탐지하는 데 사용할 수있는 파일의 해시를 만듭니다.

    뒤에 이론은 여기에 설명되어 있습니다 : Identifying almost identical files using context triggered piecewise hashing

    ssdeep 프로그램의 이름이며 Windows 또는 리눅스에서 실행할 수 있습니다. 법의학 컴퓨팅에서 사용하기위한 것이지만, 우리의 목적에 충분히 부합하는 것 같습니다. 필자는 오래된 Pentium 4 컴퓨터에 대한 짧은 테스트를 수행했으며 두 파일에 대한 일치를 찾는 23MB의 해시 파일 (135,000 개 미만의 파일에 대한 해시)을 살펴 보려면 약 3 초가 걸립니다. 그 시간에는 내가 찾고 있던 두 파일에 대한 해시 생성도 포함됩니다.

    1

    나는 web2project에서 비슷한 문제를 해결하기 위해 노력하고 있으며 주위를 물어보고 파고 들기 시작하면서 "사용자는 신경 쓰지 않는다"는 결론에 도달했습니다. 중복 된 문서가있는 이 자신의 이름으로 자신의 문서를 찾을 수있는 한 사용자에게 중요하지 않습니다. 말했다되고 그건

    , 여기에 내가 가지고있어 접근 방식 :

    • 는 사용자가 어느 프로젝트 그들이 원하는/작업과 연결 문서를 업로드 할 수 있도록 허용;
    • 누군가가 http를 통해 파일을 가져 오거나 웹 루트 외부에 저장되지 못하도록 파일의 이름을 변경해야합니다. 사용자는 여전히 시스템에서 파일 이름을 볼 수 있으며 파일을 다운로드하는 경우 "적절한"파일 이름으로 헤더를 설정할 수 있습니다.
    • 미래에 어떤 점에서 문서가 중복되었는지 확인하십시오.이 시점에서 우리는 이 아니며 문서를 수정하고 있습니다.결국 공백이나 대문자가 변경되는 중요한 이유가있을 수 있습니다.
    • 중복 파일이있는 경우 새 파일을 삭제 한 다음 이전 파일로 링크하십시오.
    • 중복성이 없으면 아무 작업도하지 마십시오.
    • 검색 용어에 대한 파일의 색인을 생성합니다. 파일 형식에 따라 Word 문서에도 많은 옵션이 있습니다.

    이 모든 것을 통해 우리는 사용자에게 복제본이라고 말하지 않고 ... 상관하지 않습니다. 우리 (개발자, DB 관리자 등)가 신경 쓰는 사람입니다.

    그리고 예, 나중에 파일의 새 버전을 업로드하더라도 가능합니다. 먼저 파일에 대한 참조를 삭제 한 다음 가비지 수집과 마찬가지로 이전 참조 파일에 대한 참조가없는 경우 이전 파일 만 삭제합니다.

    +0

    흥미로운 아이디어. 그러나 문서가 여러 중앙 사이트에서 여러 사이트에 걸쳐 사용되고 모든 사이트가 동시에 업데이트되어야하기 때문에 중복되지 않아야합니다. 문서 자체 수정을 제안하지 않았습니다. 해시 일치로 인해 유사한 문서가 최대한 일치 할 수 있습니다. 일치하는 항목이 있으면 사용자에게 현재 사용 가능한 파일을 수락하거나 업로드중인 새 파일로 업데이트하거나 단순히 다른 파일로 추가해야합니다. 이전 파일을 사용자에게 투명하지 않은 것으로 삭제할 수 없습니다. – Treffynnon

    +0

    죄송합니다. 답장을 조금 잘못 들었습니다. 필자는 문서를 비교하기 전에 수정하여 실제로 문서를 비교하지 않고 ... 수정 된 문서를 비교하고 있다는 것을 의미했습니다. 예를 들어, "Hello, my name is keith"는 "Hello, my name is Keith"와 같은 문장입니다. 개념적으로 그들은 동일하지만 첫 번째 것에 내 이름을 대문자로 사용하지 않는 것은 아마도 오타 일 것입니다. 제안 된 아이디어는 이러한 문서를 동일하게 취급하고 중복으로 플래그를 지정합니다. – CaseySoftware

    +0

    정확히 내가하고 싶은 일이 있습니다. :) 그들은 본질적으로 같은 문장입니다. 하나는 오타가 있습니다. 따라서 새로운 문서를 업로드하는 대신 기존 문서를 업데이트해야합니다. – Treffynnon

    관련 문제