2009-07-12 4 views
1

나는 여러 장의 문서를 두 번째 문서와 비교하여 유사성을 판단해야하는 프로젝트가 있습니다. 문제는이 일을 어떻게 수행해야하는지, 어떤 접근법이 존재하는지 또는 이용 가능한 라이브러리가 있는지 전혀 모릅니다.대용량 문서의 텍스트 분석

내 첫 번째 질문은 ... 무엇이 비슷합니까? 일치하는 단어의 수, 일치하는 연속적인 단어의 수?

단어와 위치가있는 배열에 각 문서를 넣은 다음 파서를 비교하는 파서를 작성했습니다.

나는 그러나 내가 할 시도하고있는 것보다 다소 다른 것 같다 Algorithms or libraries for textual analysis, specifically: dominant words, phrases across text, and collection of text

에서 이전 질문을 보았다.

사람들이 가질 수있는 옵션이나 포인터가 좋을 것입니다.

+0

나는이 접근법이 문서의 유형 (수동, 박사 학위 논문, 소설?)에 크게 의존한다고 말하고 싶습니다. – Treb

+0

"무엇이 비슷합니까"는 핵심 질문이며 누가 결과를 사용할 것이며 어떤 목적으로 사용될 것인가에 의해 좌우됩니다 . 당신은이 측면에 대해 자세히 설명해야합니다. – RBarryYoung

+0

약간의 배경, 혼란에 대한 미안. 우리는 사람들이 제출 한 문서와 저작권이있는 문서의 목록을 비교하고자합니다.이 문서는 100 페이지가 될 수 있습니다. 그러나 제출 될 때 가비지 및 다른 유효한 시간에 제출됩니다. 우리는 중요한 일치가있는 곳을 식별 할 수 있기를 원합니다. –

답변

1

"무엇이 비슷합니다"우리는 당신에게 말할 수 없습니다. 이것은 프로젝트의 기본적인 요구 사항을 나타내는 것입니다. 당신이 이것을 모르는 경우에, 조금 그것을 빨리하는 방법에 대하여 생각하십시오.

"이유"를 묻는 것이 도움이 될 수 있습니다. 유사성 척도는 무엇에 사용됩니까?

예를 들어, 표절을 탐지하는 목적이 있다면 동일한 주제에 대해 이야기하고 유사한 참조를하기 때문에 두 개의 에세이가 유사하다는 것을 감지하는 것이 도움이되지 않을 것입니다 - 전체 수업은 비슷한 에세이를 제출할 것입니다! 그래서 정확한 문장과 구문을 찾으려고합니다.

대신에 일부 문서에 대한 카탈로그를 작성하려는 경우 키워드를 검색하는 것이 좋습니다. 두 개의 문서가 동일한 길이의 영어 단어 또는 유사한 고유 명사를 사용하면 유사합니다.

두 가지 예는 비슷한 의미의 것을 이해할 때까지 많은 조언을하기 어렵다는 것을 보여줍니다.

그러나 가능한 접근 방법은 다음과 같습니다. Extractor와 Comparator라는 두 가지 주요 사항을 작성할 수 있습니다.

추출기의 임무는 문서를 꼼꼼히 살펴보고 문서의 본질 인 청크 집합 (또는 목록, 주문해야합니까?)을 생성하는 것입니다. 개별 단어 나 문장 및 구가 될 수 있습니다.

비교기의 작업은 두 문서 "본질"의 유사성을 평가하는 것입니다.

간단한 예 : 문서에서 8 자 이상의 단어의 고유 목록을 추출하십시오. 다른 사람의 75 % 이상이 세트에 포함되어 있으면 두 문서가 서로 비슷할 수 있습니다.

0

모든 소스 제어 시스템에서 사용되는 diff 도구는 거의 이와 동일합니다. 차이점 수를 측정하는 데 도움이되는 방법 중 하나를 사용해보십시오.

0

달성하려는 목표에 따라 다릅니다. 목표가 문서 세트에서 특정 문서와 유사한 문서를 찾으려면 다음과 같이 시도하십시오.

문서에 따라 긴 문서에서 가장 중요한 키워드 또는 핵심 문장을 먼저 추출 할 수 있습니다 텍스트 (구글 "키워드 추출")의 본질을 추출합니다.그런 다음 텍스트 유사성 알고리즘 (예 : k- 가장 가까운 이웃 알고리즘)을 사용하여 비슷한 문서를 출력 할 수 있습니다. 열쇠는 텍스트의 핵심 부분을 추출하는 것입니다.

1

간단한 방법 중 하나는 문서 텍스트를 연결하여 압축하는 것입니다. 압축률은 얼마나 비슷한지를 알려줍니다.

1

사용할 수있는 방법 중 하나는 Shingling입니다. 이 과정에는 두 문서의 모든 단어를 토큰 화하는 작업이 포함됩니다.

D1 = {"An", "Example", "Document", "To", "Show", "Shingling"} 
D2 = {"Another", "Example", "Document", "To", "Show", "Shingling", "but", "longer"} 

그런 다음 창 길이 n의 인접한 하위 시퀀스 집합을 취합니다 (집합에 중복이 없음을 기억하십시오).

S(D1, 3) = {{"An", "Example", "Document"}, {"Example", "Document", "To"}, {"Document", "To", "Show"}, {"To", "Show", "Shingling"}} 

S(D2, 3) = {{"Another", "Example", "Document"}, {"Example", "Document", "To"}, {"Document", "To", "Show"}, {"To", "Show", "Shingling"}, {"Show", "Shingling", "but"}, {"Shingling", "but", "longer"}} 

그러면 유사점은 교차의 카디널리티를 공용의 카디널리티로 나눈 것입니다. 그래서 예 3/7 = 43 % 유사합니다.

무작위로 선택한 스케치 (대상 포진의 집합)를 사용하여 효율적인 근사를 만들 수 있습니다.

관련 문제