2012-01-24 2 views
5

면접 질문주어진 PDF에서 주어진 단어의 수를 어떻게 계산합니까?

나는 인터뷰에서이 같은 질문을 한, 대답은 특정 프로그래밍 언어를 필요는 없습니다, 플랫폼에 또는 도구 - 특정.

질문

는 다음과 같은 말로 표현했다 :

어떻게 당신은 PDF에서 특정 단어의 인스턴스 수를 얻을 것입니다. 대답은 프로그래밍, 플랫폼 또는 도구와 관련된 것은 아닙니다. 그냥 당신이

나는 다음과 같은 이유로이 질문에 게시하고 메모리와 속도 효율적인 방법으로 그것을 할 것입니다 방법을 알려 주시기 :

  1. 더 나은 상황을 이해하기를 - 난 아직도 이해하지 못하는 이 질문의 문맥, 면접관이이 질문을함으로써 무엇을 찾고있을 것인가?
  2. 다른 의견을 얻으려면 - 저는 프로그래밍 언어 (C#)에 대한 자신의 기술을 토대로 이러한 질문에 답하는 경향이 있지만,이를 수행하는 다른 유효한 옵션이있을 수 있습니다.

관심을 가져 주셔서 감사합니다.

답변

4

내가 프로그램을 작성해야한다면 PDF 파일에서 텍스트를 추출 할 수있는 PDF 렌더링 라이브러리 (예 : Xpdf)를 찾은 다음 단어를 센다. 비생산적인 작업을 위해 자동화해야 할 일이 있거나 작업이 필요한 경우 파일을 pdftotext 프로그램에 공급 한 다음 출력 파일을 파이썬으로 구문 분석하고 단어로 분리하여 파일을 넣은 다음 사전과 발생 횟수를 세고있다.

  1. 이 작업에 대한 설정의 차이 이해 :

    나는이 인터뷰 질문을 한 경우에, 나는 몇 가지를 찾고있을 것 일회성 스크립트 꼬추 생산 코드 대를

  2. 을 시도하지 않고 PDF 렌더링을 구현하고 대신 라이브러리 을 찾으려고합니다.

가 지금은없는 PDF 경험을 가진 어떤 임의 후보에서이를 기대하지 않을 것이다, 그러나 당신이 PDF이고 무엇 "단어"일에 대해 매우 의미있는 토론을 가질 수있다. 보시다시피, PDF는 텍스트를 좌표가있는 문자열의 묶음으로 저장합니다. 각 문자열은 반드시 단어가 아닙니다. 종종 단어는 한 단어를 만들기 위해 문서에 절대적으로 배치 된 두 개의 완전히 별개의 문자열로 나뉩니다. 이것은 때때로 PDF 문서에서 단어를 검색 할 때 이상한 결과를 얻는 이유입니다. 따라서 문서에서 단어 검색을 구현하려면이 문자열을 다시 붙여야합니다 (pdftotext가이를 처리합니다).

전혀 문제가되지 않습니다.

+2

나는이 질문을 좋아한다. 응시자는 실제 작업을 완료하는 방법과 명확한 설명을 위해 면밀한 질문을 면접관에게 다시 물을 수있을만큼 신중한지를 보여줍니다. 면접관이라면 사전 (해시, 트라이 등)의 구현에 대해 연습 할 수있을뿐만 아니라 그가 어떻게 반응하는지보기 위해 다른 결정에 대한 후보자에게 곡선 볼을 던져 볼 수도 있습니다. (예 : "pdf 파일은 중국어로 작성된 서적으로 코드에 어떤 영향을 미칩니 까?"). – selbie

+0

@selbie : 복잡성을 추가해 주셔서 감사합니다! :) 다양한 의견이 내가 찾고있는 것입니다! –

2

당신은 Trie을 사용할 수 있습니다. 주어진 단어의 수를 얻기가 매우 쉽습니다.

+1

"Tire"가 아니라 "Trie"를 의미합니다. 후자는 차에 간다. ;) – selbie

+0

감사 셀비. 나는 그것을 바로 잡았다. – Sandeep

0

Java를 사용하는 오픈 소스 솔루션을 제안합니다. 먼저 pdf 파일을 구문 분석하고 Tika을 사용하여 모든 텍스트를 추출해야합니다.

그렇다면 올바른 질문은 텍스트에서 단어의 TF (용어 빈도)를 찾는 것입니다. 나는 추출 된 텍스트를 스캔하고 단어의 빈도를 세기 만하면이를 달성 할 수 있기 때문에 정의에 대해 문제를 일으키지 않을 것입니다.

샘플 코드는 다음과 같을 것이다 : 그것은 후보자가 코드를 업 수 있다면 단어 수 알고리즘을 단지 평가 넘어 때문에

while(scan.hasNext()) 
    { 
     word = scan.next(); 
     ha += (" " + word + " "); 

     int countWord = 0; 
     if(!listOfWords.containsKey(word)) 
     {  
      listOfWords.put(word, 1); //first occurance of this word 
     } 
     else 
     { 
      countWord = listOfWords.get(word) + 1; //get current count and increment 
                 //now put the new value back in the HashMap 
      listOfWords.remove(word);    //first remove it (can't have duplicate keys) 
      listOfWords.put(word, countWord);  //now put it back with new value 
     } 
    }  
관련 문제