2012-01-24 9 views
5

Domanda Di IntervistaCome si ottiene il conteggio di una determinata parola in un dato PDF?

mi è stato chiesto a questa domanda in un'intervista, e la risposta non deve essere specifico linguaggio di programmazione, dalla piattaforma o specifici tool-.

la questione è stata formulata come segue:

Come ti ottenere il conteggio di una data parola esempio, in un file PDF. La risposta non deve essere la programmazione, la piattaforma o lo strumento specifico. Fammelo sapere come si farebbe in un modo efficiente di memoria e la velocità

sto postando questa domanda per motivi seguenti:

  1. Per comprendere meglio il contesto - Continuo a non capire il contesto di questa domanda, che cosa potrebbe chiedere l'intervistatore ponendo questa domanda?
  2. Per ottenere opinioni diverse - Tendo a rispondere a tali domande in base alle mie competenze in un linguaggio di programmazione (C#), ma potrebbero esserci altre opzioni valide per ottenere questo risultato.

Grazie per il vostro interesse.

risposta

4

Se dovessi scrivere un programma per farlo, troverei una libreria di rendering PDF in grado di estrarre testo da file PDF, come Xpdf e poi contare le parole. Se si trattasse di un'attività one-of o qualcosa che doveva essere automatizzato per un'attività di qualità non di produzione, avrei semplicemente inserito il file nel programma pdftotext e poi analizzato il file di output con python, suddividendolo in parole, inserendole in un dizionario e il conteggio del numero di occorrenze.

Se mi è stato chiesto questa domanda intervistando, mi piacerebbe essere alla ricerca di un paio di cose:

  1. comprendere la differenza tra l'impostazione per questo compito: una tantum sceneggiatura thingy vs codice di produzione
  2. non si sta tentando di implementare PDF da soli e provare a trovare una libreria .

Ora non me lo aspetterei da nessun candidato casuale senza esperienza PDF, ma puoi avere una discussione molto significativa su cosa sia il PDF e che sia una "parola". Vedete, il testo memorizzato in PDF è un mucchio di corde con le coordinate. Ogni stringa non è necessariamente una parola. Spesso le parole vengono divise in un paio di stringhe completamente separate che sono posizionate in modo assoluto nel documento per creare una singola parola. Questo è il motivo per cui a volte quando si cercano le parole in un documento PDF si ottengono risultati dall'aspetto strano. Quindi, per implementare la ricerca di parole in un documento, dovrai incollare nuovamente queste stringhe (pdftotext si prenderà cura di te per te).

Non è una cattiva domanda.

+2

Mi piace questa domanda perché va oltre la semplice valutare se un candidato può codificare-up un algoritmo di conteggio delle parole. Rende il candidato in grado di dimostrare come farebbe per ottenere un lavoro di parole reali e se è abbastanza premuroso da rivolgere domande intelligenti all'intervistatore per chiarimenti. Se fossi l'intervistatore, potrei approfondire l'implementazione del dizionario (hash, trie, ecc ...), ma anche lanciare palle curve al candidato su alcune delle sue altre decisioni per vedere come reagisce. (ad esempio "il file pdf è un libro scritto in cinese - come influisce sul tuo codice?"). – selbie

+0

@selbie: Grazie per aver aggiunto la complessità! :) Diversa opinione è ciò che sto cercando! –

2

È possibile utilizzare Trie È molto semplice ottenere il conteggio della parola data.

+1

Vuoi dire "Trie", non "Tire". Quest'ultimo va su una macchina. ;) – selbie

+0

grazie selbie. L'ho corretto – Sandeep

0

Suggerirei una soluzione open source utilizzando Java. Per prima cosa dovresti analizzare il file pdf ed estrarre tutto il testo usando Tika.

Quindi credo che la domanda corretta sia come trovare la TF (frequenza dei termini) di una parola in un testo. Non ti disturberò con le definizioni perché puoi ottenerlo semplicemente scansionando il testo estratto e contando la frequenza della parola.

codice di esempio sarebbe simile a questa:

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 
     } 
    }  
Problemi correlati