Java - извлечение неповторяющихся слов из файлов PDF

Я написал простую программу на Java, используя PDFBox для извлечения слов из файла PDF. Читает текст из PDF и извлекает слово за словом.

public class Main {

    public static void main(String[] args) throws Exception {
        try (PDDocument document = PDDocument.load(new File("C:\\my.pdf"))) {

            if (!document.isEncrypted()) {

                PDFTextStripper tStripper = new PDFTextStripper();
                String pdfFileInText = tStripper.getText(document);
                String lines[] = pdfFileInText.split("\\r?\\n");
                for (String line : lines) {
                    System.out.println(line);
                }

            }
        } catch (IOException e){
            System.err.println("Exception while trying to read pdf document - " + e);
        }
    }

}

Есть ли способ извлечь слова без дубликатов?

В общем, для этого можно использовать Set <T>, примерно так: Set <String> words = new HashSet <String> (); затем вы можете добавить каждое слово в набор set.add (слово), он проигнорирует дублированное слово, после чего вы можете снова просмотреть набор, чтобы получить все слова, которые не являются дублированными словами.

No Em 09.10.2018 06:02

@NoEm Как это будет выглядеть в коде?

TomCold 09.10.2018 06:03

// удерживаем все недублированные слова Set <String> uniqueWords = new HashSet <String> (); for (Строка строка: строки) {Строка [] слова = строка.split (""); для (Строковое слово: слова) {uniqueWords.add (word.trim ()); }} // выводим все недублированные слова System.out.println ("Non-duplicated words:"); Итератор <String> it = uniqueWords.iterator (); в то время как (it.hasNext ()) {System.out.println (it.next ()); }

No Em 09.10.2018 06:09

Вместо этого вы можете опубликовать это как ответ

TomCold 09.10.2018 06:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
251
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
  1. Разделите каждую строку на space - line.split(" ")
  2. Держите HashSet для хранения этих слов и продолжайте добавлять к нему все слова.

HashSet по своей природе игнорирует дубликаты.

HashSet<String> uniqueWords = new HashSet<>();

for (String line : lines) {
  String[] words = line.split(" ");

  for (String word : words) {
    uniqueWords.add(word);
  }
}

Так мне нужно создать его? Как тогда извлекать слова в Hashset?

TomCold 09.10.2018 06:01

Когда я пытаюсь напечатать uniqueWords, я все еще мог видеть дубликаты в каждом ключе

TomCold 09.10.2018 06:10

Можно ли после сохранения в hashSet сохранить эти «слова» в базе данных, такой как MYSQL, для полнотекстовой индексации?

TomCold 09.10.2018 06:16

Если ваша цель - удалить дубликаты, то один из способов добиться этого - добавить массив в java.util.Set. Итак, прямо сейчас вам просто нужно сделать следующее:

Set<String> noDuplicates = new HashSet<>( Arrays.asList( lines ) );

Больше никаких дубликатов.

Как мне сохранить эти слова в хеш-таблице MySQL?

TomCold 09.10.2018 08:32

Это другая проблема.

Rigo Sarmiento 10.10.2018 10:10

Другие вопросы по теме