Merge pull request 'FileManager' (#5) from FileManager into main

Reviewed-on: #5
main
Daniel Fromm 2025-05-08 22:11:34 +02:00
commit 06c821ad8d
6 changed files with 191 additions and 124 deletions

20
pom.xml
View File

@ -14,6 +14,26 @@
<artifactId>pdfbox</artifactId> <artifactId>pdfbox</artifactId>
<version>2.0.29</version> <version>2.0.29</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.18.0</version>
</dependency>
</dependencies> </dependencies>
<properties> <properties>

View File

@ -0,0 +1,53 @@
package domain;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class FileLoader {
private File inputFile;
public FileLoader() {
this.inputFile = null;
}
//KI erstellte Methode
public File loadFileGUI() {
try {
JFileChooser fileChooser = new JFileChooser();
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PDF Files", "pdf"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Text Files", "txt")); //selbst hinzugefügt
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Word Documents", "docx")); //selbst hinzugefügt
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PowerPoint Presentations", "pptx")); //selbst hinzugefügt
int result = fileChooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
inputFile = fileChooser.getSelectedFile();
}
return inputFile;
} catch (HeadlessException e) {
throw new RuntimeException(e);
}
}
public String getFileFormat(File file) {
String fileName = file.getName();
String fileFormat = fileName.contains(".") ? fileName.substring(fileName.lastIndexOf(".") + 1) : "";
switch (fileFormat.toLowerCase()) {
case "pdf":
return "pdf";
case "txt":
return "txt";
case "docx":
return "docx";
case "pptx":
return "pptx";
default:
return "File format not supported";
}
}
}

View File

@ -1,115 +1,26 @@
package domain; package domain;
import org.apache.pdfbox.pdmodel.PDDocument; import java.io.File;
import org.apache.pdfbox.text.PDFTextStripper;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.io.*;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
public class FileManager { public class FileManager {
File inputFile; FileLoader fileLoader = new FileLoader();
String originalPath; TextProcessing textProcessing = new TextProcessing();
String goalPath; private File file;
public FileManager() { public String loadFile() {
originalPath = "quelle.pdf"; file = fileLoader.loadFileGUI();
goalPath = "ziel.txt"; String fileFormat = fileLoader.getFileFormat(file);
inputFile = null; String text = textProcessing.formatToText(file, fileFormat);
return text;
} }
public OutputStream loadFilePath() { public HashMap tokenizingText(String text) {
InputStream in; HashMap<String, Integer> wordMap = textProcessing.tokenizingText(text);
OutputStream out = null; return wordMap;
try {
in = new FileInputStream(originalPath);
out = new FileOutputStream(goalPath);
byte[] buffer = new byte[1024];
int gelesen;
while ((gelesen = in.read(buffer)) > -1) {
out.write(buffer, 0, gelesen);
}
in.close();
out.close();
return out;
}
catch (IOException e) {
e.printStackTrace();
}
return out;
}
public File loadFileGUI() {
try {
JFileChooser fileChooser = new JFileChooser();
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PDF Files", "pdf"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Text Files", "txt"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Word Documents", "docx"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PowerPoint Presentations", "pptx"));
int result = fileChooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
inputFile = fileChooser.getSelectedFile();
}
return inputFile;
} catch (HeadlessException e) {
throw new RuntimeException(e);
}
}
public HashMap tokenizingText(File inputFile){
HashMap<String, Integer> filteredWords = new HashMap<>();
try {
PDDocument document = null;
if(inputFile != null) {
document = PDDocument.load(inputFile);
PDFTextStripper pdfStripper = new PDFTextStripper();
String text = pdfStripper.getText(document);
//Tokenizing der Wörter
String splittedText = "[,\\s\\.:/!§$%&/()=?+*~#.;_<>^°\"']";
String[] textWords = text.split(splittedText);
for(String word : textWords){
if (filteredWords.containsKey(word)) {
filteredWords.compute(word, (k, counter) -> counter + 1);
}
else {
filteredWords.put(word, 1);
}
}
for(Map.Entry e : filteredWords.entrySet()){
System.out.println(e.getKey() + " = " + e.getValue());
}
if (document != null) {
document.close();
}
}
} catch (Exception e){
e.printStackTrace();
}
return filteredWords;
}
public HashMap maxShowWords(int number, HashMap<String, Integer> words) {
HashMap <String, Integer> cuttedHashmap = new HashMap<>();
int index = number;
for (String word : words.keySet()) {
if(index > 0) {
cuttedHashmap.put(word, words.get(word));
}
index--;
}
return cuttedHashmap;
} }
public void saveFile(){} public void saveFile(){}
} }

View File

@ -0,0 +1,93 @@
package domain;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFShape;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
import java.io.*;
import java.util.HashMap;
public class TextProcessing {
public String formatToText(File file, String format) {
try {
StringBuilder text = new StringBuilder();
if (file != null) {
switch (format) {
case "txt":
FileReader fileReader = new FileReader(file);
BufferedReader reader = new BufferedReader(fileReader);
String line;
while((line = reader.readLine()) != null) {
text.append(line).append("\n");
}
return text.toString();
case "pdf":
PDDocument document = PDDocument.load(file);
PDFTextStripper pdfStripper = new PDFTextStripper();
return pdfStripper.getText(document);
case "docx":
XWPFDocument officeDocument = new XWPFDocument(new FileInputStream(file));
for(XWPFParagraph paragraph : officeDocument.getParagraphs()) {
text.append(paragraph.getText()).append("\n");
}
return text.toString();
case "pptx":
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
for (XSLFSlide slide : ppt.getSlides()) {
for (XSLFShape shape : slide.getShapes()) {
if (shape instanceof XSLFTextShape) {
text.append(((XSLFTextShape) shape).getText()).append("\n");
}
}
}
return text.toString();
}
}
}
catch (IOException e) {
throw new RuntimeException(e);
}
return "Nothing found!";
}
public HashMap maxShowWords(int number, HashMap<String, Integer> words) {
HashMap <String, Integer> cuttedHashmap = new HashMap<>();
int index = number;
for (String word : words.keySet()) {
if(index > 0) {
cuttedHashmap.put(word, words.get(word));
}
index--;
}
return cuttedHashmap;
}
public HashMap tokenizingText(String text){
HashMap<String, Integer> filteredWords = new HashMap<>();
try {
if(!text.isEmpty()) {
//Tokenizing der Wörter
String splitter = "[,\\s\\.:/!§$%&/()=?+*~#.;_<\\->^°\"']";
String[] textWords = text.split(splitter);
for (String word : textWords) {
if (filteredWords.containsKey(word)) {
filteredWords.compute(word, (k, counter) -> counter + 1);
} else {
filteredWords.put(word, 1);
}
}
}
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
return filteredWords;
}
}

View File

@ -4,9 +4,8 @@ import domain.FileManager;
import domain.PictureManager; import domain.PictureManager;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.OutputStream;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
public class WordCloudManager { public class WordCloudManager {
FileManager fileManager; FileManager fileManager;
@ -18,18 +17,14 @@ public class WordCloudManager {
} }
public boolean loadFileGUI() { public boolean loadFileGUI() {
File inputFile = fileManager.loadFileGUI();
HashMap wordMap = fileManager.tokenizingText(inputFile); String fileText = fileManager.loadFile();
if(wordMap == null) { HashMap wordMap = fileManager.tokenizingText(fileText);
return false; if(wordMap != null) {
}
else {
return true; return true;
} }
else {
return false;
} }
public void loadFilePath() {
OutputStream inputFile = fileManager.loadFilePath();
// fileManager.processFile(null, inputFile);
} }
} }

View File

@ -1,10 +1,7 @@
package tui; package tui;
import domain.FileManager;
import facade.WordCloudManager; import facade.WordCloudManager;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner; import java.util.Scanner;
public class TUI { public class TUI {
@ -17,16 +14,14 @@ public class TUI {
public void tui() { public void tui() {
Scanner scan = new Scanner(System.in); Scanner scan = new Scanner(System.in);
while(isRunning) { WordCloudManager wcm = new WordCloudManager();
// while(isRunning) {
System.out.println("Welcome to Word Cloud.\nMenu:\n\n(0) Load File from main path\n(1) Load File with Gui" + System.out.println("Welcome to Word Cloud.\nMenu:\n\n(0) Load File from main path\n(1) Load File with Gui" +
"\n(2) Save File\n(3) Show Picture\n(4) Exit"); "\n(2) Save File\n(3) Show Picture\n(4) Exit");
int option = scan.nextInt(); int option = scan.nextInt();
WordCloudManager wcm = new WordCloudManager();
switch (option) { switch (option) {
case (0): case (0):
//Load File Path //Load File Path
wcm.loadFilePath();
break; break;
case (1): case (1):
//Load File GUI //Load File GUI
@ -48,7 +43,7 @@ public class TUI {
System.out.println("Close Program!"); System.out.println("Close Program!");
break; break;
} }
} // }
scan.close(); scan.close();
} }
} }