2012-01-24 79 views
5

面試問題如何計算給定PDF中給定單詞的數量?

有人問我在採訪這個問題,答案並不一定是特定的編程語言,與平臺或特定刀具。

問題被表述爲以下幾點:

你怎麼會得到給定單詞的實例計數爲PDF。答案不一定是編程,平臺或特定工具。只要讓我知道你怎麼會在內存和速度效率的方式

我張貼了以下原因這個問題做:

  1. 爲了更好地理解上下文 - 我仍然無法理解在這個問題的背景下,面試官可以通過問這個問題尋找什麼?
  2. 獲得不同的意見 - 我傾向於根據我在編程語言(C#)方面的技能來回答這些問題,但可能有其他有效的方法來完成此操作。

感謝您的關注。

回答

4

如果我不得不編寫一個程序來做到這一點,我會找到一個能夠從PDF文件中提取文本的PDF渲染庫,例如Xpdf,然後對這些文字進行計數。 如果這是一項任務或需要爲非生產質量任務自動執行的任務,那麼我只需將該文件提供給pdftotext程序,然後使用python解析輸出文件,然後將其分解爲文字一本字典和計數的發生次數。

如果我問這個面試問題時,我會找一兩件事情:

  1. 瞭解設置此任務之間的區別: 一次性腳本啄VS生產代碼
  2. 不要嘗試 實現你自己渲染的PDF並試圖找到一個庫 。

現在我不希望這個來自任何沒有PDF體驗的隨機候選人,但是您可以對PDF是什麼以及什麼是「單詞」進行非常有意義的討論。你看,PDF存儲文本爲一串帶座標的字符串。每個字符串不一定是一個字。通常情況下,這些單詞將被分割成幾個完全獨立的字符串,這些字符串絕對位於文檔中以形成單個單詞。這就是爲什麼有時在PDF文檔中搜索單詞時會看到奇怪的結果。因此,要在文檔中實現文字搜索,您必須將這些字符串粘貼在一起(pdftotext爲您處理)。

這根本不是一個壞問題。

+2

我喜歡這個問題,因爲它超越了只是評估,如果候選人可以編碼,一個字計數算法。這使得候選人能夠展示他將如何完成實際工作,如果他足夠深思熟慮,可以向面試官提出明智的問題以進行澄清。如果我是面試官,我可能會深入研究字典的實現(哈希,特里等),還可以向候選人展示一些關於他的其他決定的曲線球,以瞭解他是如何做出反應的。 (例如「pdf文件是用中文書寫的 - 這對你的代碼有什麼影響?」)。 – selbie

+0

@selbie:感謝您增加複雜性! :)不同的意見是我正在尋找的! –

2

您可以使用Trie這是很容易得到給定的單詞的計數。

+1

你的意思是「Trie」,而不是「Tire」。後者上了一輛車。 ;) – selbie

+0

謝謝selbie。我糾正了它。 – 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 
     } 
    }  
相關問題