Guten Abend,
ich bräuchte Hilfe bei einem Project. In diesem Project muss ich einen englischen Text einlesen und daraus alle eigenen Namen zählen. Dieser Text wird davor noch in Abschnitte mit jeweils 2000 Wörter aufgeteilt. Hier mein Code:
Code (Java):
Dieser Code funktioniert noch nicht richtig, da ich noch rausfinden muss, wie ich die eine Antwort eingeben kann, um darauf die Tabelle zu erhalten.
Hier benutze ich ja die HashMap. Aber ich habe keine Ahnung, wie ich sie in eine Tabelle einfügen soll, denn ich bin mir ziemlich sicher, dass der Code für die Tabelle falsch ist.
Die Tabelle soll eine Spalte für die am häufigsten vorkommende Namen mit Gesamtanzahl haben. Die Restlichen Spalten sind für die verschiedenen Abschnitten mit der Beschriftung ganz oben und in den einzelnen Zeilen, die Anzahl der Namen in diesem Abschnitt
ich bräuchte Hilfe bei einem Project. In diesem Project muss ich einen englischen Text einlesen und daraus alle eigenen Namen zählen. Dieser Text wird davor noch in Abschnitte mit jeweils 2000 Wörter aufgeteilt. Hier mein Code:
Code (Java):
Java:
/**
*
*/
package einlesen;
/**
* @author a
*
*/
import java.io.*;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.table.TableColumn;
public class Einlesen {
/**
* @param args
* @throws IOException
*/
@SuppressWarnings({ "resource" })
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(800, 800);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
JTable table = new JTable();
panel.add(table);
Scanner scan = new Scanner (System.in);
String antwort = null;
JLabel label1 = new JLabel("Welches Dokument wollen Sie? Geben Sie dabei den Path an, bitte.");
panel.add(label1);
JTextField textfield = new JTextField(antwort, 20);
panel.add(textfield);
antwort = scan.nextLine();
String path = System.getProperty("user.home");
//System.out.println(path);
File file = Paths.get(path, antwort).toFile();
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
Scanner sc = new Scanner(br);
List<String> wörter = new ArrayList<String>();
while( sc.hasNext() )
{
String wort = sc.next();
// Remove quotes
if (wort.startsWith("\"")) { wort = wort.substring(1); }
if (wort.endsWith("\"")) { wort = wort.substring(0, wort.length() - 1); }
wörter.add(wort);
}
br.close();
int chunkStartIndex = 0;
while (wörter.size() - chunkStartIndex > 0) {
int chunkEndIndex = chunkStartIndex + 2000;
if (chunkEndIndex > wörter.size()) {
chunkEndIndex = wörter.size();
}
List<String> chunkOfWords = wörter.subList(chunkStartIndex, chunkEndIndex);
Map<String, Integer> wordsInTheMiddle = new HashMap<>();
for( int i = 0; i < chunkOfWords.size(); i++)
{
String word = chunkOfWords.get(i);
if (word.matches("[A-Z][a-z][a-z]\\w+")) {
wordsInTheMiddle.putIfAbsent(word, 0);
int oldCount = wordsInTheMiddle.get(word);
wordsInTheMiddle.put(word, oldCount + 1);
}
}
// do not process the last word! Would cause an index out of bounds exception.
for (int i = 0; i < chunkOfWords.size() - 1; i++ ) {
String word = chunkOfWords.get(i);
if( word.matches("\\w*(\\.|\\?|!)$")) {
// Word is at end of sentence
String nextWord = chunkOfWords.get(i+1);
if ( wordsInTheMiddle.getOrDefault(nextWord, 0) < 2) {
// sort out words that appear at the beginning of a sentence and appear less than 2 times in the text
wordsInTheMiddle.remove(nextWord);
}
}
}
// remove blacklisted words
String[] blacklist = { "This", "When", "Night", "Most", "Stone", "There", "Bonfire", "Tuesday", "Their", "They", "Professor", "Famous", "About", "Madam", "Nearly", "Aunt", "What", "Uncle", "Mommy", "Scars", "Scotch", "Every", "That" };
for (String listedWord : blacklist) {
wordsInTheMiddle.remove(listedWord);
}
System.out.println("Mitte: " + wordsInTheMiddle);
table.addColumn((TableColumn) wordsInTheMiddle);
chunkStartIndex = chunkEndIndex;
}
}
}
Hier benutze ich ja die HashMap. Aber ich habe keine Ahnung, wie ich sie in eine Tabelle einfügen soll, denn ich bin mir ziemlich sicher, dass der Code für die Tabelle falsch ist.
Die Tabelle soll eine Spalte für die am häufigsten vorkommende Namen mit Gesamtanzahl haben. Die Restlichen Spalten sind für die verschiedenen Abschnitten mit der Beschriftung ganz oben und in den einzelnen Zeilen, die Anzahl der Namen in diesem Abschnitt
Zuletzt bearbeitet von einem Moderator: