2012-01-24 35 views
5

Phỏng vấn Câu hỏiLàm thế nào bạn sẽ nhận được số lượng của một từ nhất định trong một PDF nhất định?

Tôi đã được hỏi câu hỏi này trong một cuộc phỏng vấn, và câu trả lời không phải là ngôn ngữ lập trình cụ thể, từng platform hay cụ thể tool-.

Câu hỏi đã được phrased như sau:

Làm thế nào bạn sẽ nhận được số lượng thể hiện của một từ được đưa ra trong một PDF. Câu trả lời không phải là lập trình, nền tảng hoặc công cụ cụ thể. Chỉ cần cho tôi biết làm thế nào bạn sẽ làm điều đó trong một bộ nhớ và tốc độ cách hiệu quả

Tôi đăng câu hỏi này vì những lý do sau đây:

  1. Để hiểu rõ hơn bối cảnh - Tôi vẫn không hiểu được bối cảnh của câu hỏi này, người phỏng vấn có thể tìm kiếm điều gì bằng cách đặt câu hỏi này?
  2. Để nhận ý kiến ​​đa dạng - Tôi có xu hướng trả lời các câu hỏi như vậy dựa trên kỹ năng của tôi về ngôn ngữ lập trình (C#), nhưng có thể có các tùy chọn hợp lệ khác để thực hiện việc này.

Cảm ơn sự quan tâm của bạn.

Trả lời

4

Nếu tôi phải viết chương trình để làm điều đó, tôi sẽ tìm thấy thư viện kết xuất PDF có khả năng trích xuất văn bản từ các tệp PDF, chẳng hạn như Xpdf và sau đó đếm các từ. Nếu đây là một nhiệm vụ hoặc một thứ gì đó cần được tự động hóa cho một tác vụ chất lượng phi sản xuất, tôi chỉ cần đưa tệp vào chương trình pdftotext và sau đó phân tích cú pháp tệp đầu ra bằng python, tách thành các từ, đặt chúng vào một từ điển và đếm số lần xuất hiện.

Nếu tôi được hỏi câu hỏi phỏng vấn này, tôi muốn được tìm kiếm một vài điều:

  1. hiểu sự khác biệt giữa các thiết lập cho công việc này: một lần kịch bản thingy vs mã sản xuất
  2. không cố gắng để triển khai PDF được hiển thị và cố gắng tìm một thư viện thay thế.

Bây giờ tôi không mong đợi điều này từ bất kỳ ứng cử viên ngẫu nhiên nào không có trải nghiệm PDF, nhưng bạn có thể thảo luận rất có ý nghĩa về PDF là gì và "từ" là gì. Bạn thấy, PDF được lưu trữ dưới dạng một chuỗi các chuỗi có tọa độ. Mỗi chuỗi không nhất thiết phải là một từ. Thông thường, các từ sẽ được chia thành một vài chuỗi hoàn toàn riêng biệt được đặt hoàn toàn trong tài liệu để tạo thành một từ duy nhất. Đây là lý do tại sao đôi khi khi tìm kiếm các từ trong tài liệu PDF, bạn sẽ nhận được kết quả tìm kiếm lạ. Vì vậy, để thực hiện tìm kiếm từ trong một tài liệu bạn phải dán các chuỗi này lại với nhau (pdftotext sẽ xử lý điều đó cho bạn).

Đó không phải là một câu hỏi tồi chút nào.

+2

Tôi thích câu hỏi này bởi vì nó vượt xa chỉ cần đánh giá nếu một ứng cử viên có thể mã-up một thuật toán đếm từ. Nó làm cho các ứng cử viên chứng minh làm thế nào ông sẽ đi về việc thực hiện công việc thực tế từ và nếu anh ta chu đáo, đủ để hỏi những câu hỏi thông minh trở lại với người phỏng vấn để làm rõ. Nếu tôi là người phỏng vấn, tôi có thể đi sâu vào việc thực hiện từ điển (băm, trie, vv ...), nhưng cũng ném các quả bóng cong vào ứng cử viên về một số quyết định khác của mình để xem phản ứng của anh ta như thế nào. (ví dụ: "tệp pdf là sách được viết bằng tiếng Trung - tệp đó tác động đến mã của bạn như thế nào?"). – selbie

+0

@selbie: Cảm ơn bạn đã thêm sự phức tạp! :) Ý kiến ​​đa dạng là những gì tôi đang tìm kiếm! –

2

Bạn có thể sử dụng Trie Rất dễ dàng để có được số lượng từ đã cho.

+1

Bạn có nghĩa là "Trie" chứ không phải "Lốp". Sau đó đi trên một chiếc xe hơi. ;) – selbie

+0

cảm ơn selbie. Tôi sửa nó rồi. – Sandeep

0

Tôi sẽ đề xuất giải pháp nguồn mở bằng Java. Trước tiên, bạn sẽ phải phân tích cú pháp tệp pdf và trích xuất tất cả văn bản bằng cách sử dụng Tika.

Sau đó, tôi tin rằng câu hỏi đúng là làm cách nào để tìm TF (tần suất cụm từ) của một từ trong văn bản. Tôi sẽ không làm phiền bạn với các định nghĩa bởi vì bạn có thể đạt được điều này chỉ đơn giản bằng cách quét văn bản trích xuất và đếm tần số của từ.

Mẫu mã sẽ trông như thế này:

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 
     } 
    }  
Các vấn đề liên quan