2012-01-24 77 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 
     } 
    }  
相关问题