Подсчет количества вхождений каждого слова в PDF-файл Java - PullRequest
0 голосов
/ 01 ноября 2018

Я делаю Java-программу, использующую PDFbox, которая читает любой файл PDF и подсчитывает, сколько раз каждое слово появляется в файле, но по какой-то причине ничего не появляется при запуске программы, я ожидаю, что она напечатает каждое слово и число появления этого слова рядом с ним. заранее спасибо. вот мой код:

package lab8;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import java.util.Scanner;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

public class Extractor {


public static void main(String[] args) throws FileNotFoundException {
    Map<String, Integer> frequencies = new TreeMap<String, Integer>();
    PDDocument pd;
    File input = new File("C:\\Users\\Ammar\\Desktop\\Application.pdf"); 
    Scanner in = new Scanner(input);
    try {
        pd = PDDocument.load(input);
        PDFTextStripper stripper = new PDFTextStripper();
        stripper.setEndPage(20);
        String text = stripper.getText(pd);

        while (in.hasNext()) {
            String word = clean(in.next());

            if (word != "") {
                Integer count = frequencies.get(word);



                if (count == null) {
                    count = 1;
                } else {
                    count = count + 1;
                }

                frequencies.put(word, count);
            }
        }

        for (String key : frequencies.keySet()) {
            System.out.println(key + ": " + frequencies.get(key));
        }

        if (pd != null) {
            pd.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
   }

    private static String clean(String s) {
    String r = "";
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (Character.isLetter(c)) {
            r = r + c;
        }
    }
    return r.toLowerCase();
   }

  }

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

В вашем коде вы также можете использовать объект StringTokenizer, передав вашу строку, т.е.

StringTokenizer st = new StringTokenizer(stripper.getText(pd));

И в цикле while st.hasMoreTokens() и для рендеринга каждого слова String word = clean(st.nextToken()); Это также работает нормально.

0 голосов
/ 01 ноября 2018

Я попытался решить логику.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

public class Extractor {

    public static void main(String[] args) throws FileNotFoundException {
        Map<String, Integer> wordFrequencies = new TreeMap<String, Integer>();
        Map<Character, Integer> charFrequencies = new TreeMap<Character, Integer>();
        PDDocument pd;
        File input = new File("C:\\Users\\Ammar\\Desktop\\Application.pdf");
        try {
            pd = PDDocument.load(input);
            PDFTextStripper stripper = new PDFTextStripper();
            stripper.setEndPage(20);
            String text = stripper.getText(pd);
            for(int i=0; i<text.length(); i++)
            {
                char c = text.charAt(i);
                int count = charFrequencies.get(c) != null ? (charFrequencies.get(c)) + 1 : 1;
                charFrequencies.put(c, count);
            }
            String[] texts = text.split(" ");
            for (String txt : texts) {
                int count = wordFrequencies.get(txt) != null ? (wordFrequencies.get(txt)) + 1 : 1;
                wordFrequencies.put(txt, count);

            }

            System.out.println("Printing the number of words");
            for (String key : wordFrequencies.keySet()) {
                System.out.println(key + ": " + wordFrequencies.get(key));
            }

            System.out.println("Printing the number of characters");
            for (char charKey : charFrequencies.keySet()) {
                System.out.println(charKey + ": " + charFrequencies.get(charKey));
            }

            if (pd != null) {
                pd.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Попробуйте этот код. Если проблема еще не решена и вы не можете ее решить. Я могу попытаться решить.

...