Strings zerlegen und Schlüsselwörter finden

Status
Nicht offen für weitere Antworten.

MiniCooper

Mitglied
Hallo,

habe folgende Aufgabe und weiß nicht wie ich das machen soll.

"Manchmal kommen in einer Benutzeranfrage mehrere Schlüsselwörter vor. Erweitern Sie Ihr System so, dass die erzeugte Antwort nicht ausschließlich das erste verwendbare Schlüsselwort berücksichtigt."

Ich habe herausgefunden, dass es mit Hilfe von Tokenizer zerlegt werden kann. Nur weiß ich nicht, wie ich weiter machen soll und die zerlegten Worte wieder einbinden kann.

Vielen Dank im voraus.




Beantworter

Code:
import java.util.HashMap;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;

/**
 * Die Klasse Beantworter beschreibt Exemplare, die 
 * automatische Antworten in Abhängigkeit einer Eingabe
 * generieren. Die Eingabe wird einem Beantworter als 
 * eine Menge von Wörtern übergeben. Abhängig von diesen
 * Wörtern wird ein String als Antwort generiert.
 * 
 * Intern benutzt diese Klasse eine HashMap, um bestimmte
 * Stichwörter auf Antworten abzubilden, sowie eine Liste
 * von Standardantworten. Wenn eines der Wörter der Eingabe
 * als Stichwort in der HashMap vorkommt, wird die zugeordnete
 * Antwort zurückgegeben. Wenn keines der Eingabewörter erkannt
 * wird, wird aus den Standardantworten zufällig eine ausgewählt.
 * 
 * @version    1.1  (21.Jan.2002)
 * @author     Michael Kolling and David J. Barnes
 */
public class Beantworter
{
    // Abbildung von Stichwörtern auf Antworten.
    private HashMap antwortMap;

    // Liste von Standardantworten, falls kein Wort erkannt wird.
    private ArrayList standardantworten;

    private Random zufallsgenerator;

    /**
     * Erzeuge einen Beantworter.
     */
    public Beantworter()
    {
        antwortMap = new HashMap();
        standardantworten = new ArrayList();
        antwortMapBefuellen();
        standardantwortlisteFuellen();
        zufallsgenerator = new Random();
    }

    /**
     * Generiere eine Antwort auf eine gegebene Menge von Eingabewörtern.
     * 
     * @param woerter Eine Menge von Wörtern, die der Benutzer eingegeben hat
     * @return Eine Zeichenkette, die als Antwort geliefert werden soll
     */
    public String generiereAntwort(HashSet woerter)
    {
        Iterator it = woerter.iterator();
        while(it.hasNext()) {
            String wort = (String) it.next();
            String antwort = (String) antwortMap.get(wort);
            if(antwort != null) {
                return antwort;
            }
        }
        // Wenn wir hierher gelangen, wurde keines der Eingabewörter erkannt.
        // In diesem Fall wählen wir eine unserer Standardantworten (die
        // wir geben, wenn uns nichts Besseres mehr einfällt).
        
        return standardantwortAuswählen();
    }

    /**
     * Trage alle bekannten Stichwörter mit ihren verknüpften
     * Antworten in die Map 'antwortMap' ein.
     */
    private void antwortMapBefuellen()
    {
        antwortMap.put("absturz", 
                       "Tja, auf unserem System kommt es nie zu einem Absturz. Das muss \n" +
                       "an Ihrem System liegen. Welche Konfiguration haben Sie?");
        antwortMap.put("abstürzt", 
                       "Tja, auf unserem System kommt es nie zu einem Absturz. Das muss \n" +
                       "an Ihrem System liegen. Welche Konfiguration haben Sie?");
        antwortMap.put("stürzt", 
                       "Tja, auf unserem System kommt es nie zu einem Absturz. Das muss \n" +
                       "an Ihrem System liegen. Welche Konfiguration haben Sie?");
        antwortMap.put("langsam", 
                       "Ich vermute, dass das mit Ihrer Hardware zu tun hat. Ein Upgrade\n" +
                       "für Ihren Prozessor sollte diese Probleme lösen. Haben Sie ein\n" +
                       "Problem mit unserer Software?");
        antwortMap.put("performance", 
                       "Bei all unseren Tests war die Performance angemessen. Haben Sie\n" +
                       "andere Prozesse, die im Hintergrund laufen?");
        antwortMap.put("fehler", 
                       "Wissen Sie, jede Software hat Fehler. Aber unsere Entwickler arbeiten\n" +
                       "sehr hart daran, diese Fehler zu beheben. Können Sie das Problem ein\n" +
                       "wenig genauer beschreiben?");
        antwortMap.put("fehlerhaft", 
                       "Wissen Sie, jede Software hat Fehler. Aber unsere Entwickler arbeiten\n" +
                       "sehr hart daran, diese Fehler zu beheben. Können Sie das Problem ein\n" +                        "wenig genauer beschreiben?");
        antwortMap.put("windows", 
                       "Das ist ein bekanntes Problem, das im Betriebssystem von Microsoft begründet\n" +
                       "ist. Bitte leiten Sie es an Microsoft weiter. Da können wir leider nichts \n" +
                       "dran machen.");
        antwortMap.put("macintosh", 
                       "Das ist ein bekanntes Problem, das im Betriebssystem des Mac begründet\n" +
                       "ist. Bitte leiten Sie es an Apple weiter. Da können wir leider nichts \n" +
                       "dran machen.");
        antwortMap.put("teuer", 
                       "Unsere Preise sind absolute Marktpreise. Haben Sie sich mal umgesehen\n" +
                       "und wirklich unser Leistungsspektrum verglichen?");
        antwortMap.put("installation", 
                       "Die installation ist wirklich sehr einfach. Wir haben haufenweise\n" +
                       "Wizards, die die Arbeit für sie erledigen. Haben Sie die Installations-\n" +
                       "anleitung gelesen?");
        antwortMap.put("speicher", 
                       "Wenn sie die Systemanforderungen gründlich lesen, werden Sie feststellen,\n" +
                       "dass die Speicheranforderung 1,5 Gigabyte beträgt. Sie sollten Ihren\n" +
                       "Hauptspeicher unbedingt aufrüsten. Können wir sonst noch etwas für Sie tun?");
        antwortMap.put("linux", 
                       "Wir nehmen Linux sehr ernst. Aber es gibt da einige Probleme.\n" +
                       "Die meisten hängen mit der inkompatiblen glibc-Version zusammen. Können \n" +
                       "Sie das Problem etwas präziser beschreiben?");
        antwortMap.put("bluej", 
                       "Ahhh, BlueJ, ja. Wir haben schon vor längerer Zeit versucht, diese Leute \n" +
                       "aufzukaufen, aber sie wollen nicht verkaufen... Sturköpfe sind das. \n" +
                       "Ich fürchte, da können wir nichts dran ändern.");
    }

    /**
     * Generiere eine Liste von Standardantworten, aus denen wir eine
     * auswählen können, wenn wir keine bessere Antwort wissen.
     */
    private void standardantwortlisteFuellen()
    {
        standardantworten.add("Das klingt seltsam. Können Sie das Problem ausführlicher beschreiben?");
        standardantworten.add("Bisher hat sich noch kein Kunde darüber beschwert. \n" +
        				"Welche Systemkonfiguration haben Sie?");
        standardantworten.add("Das klingt interessant. Erzählen Sie mehr...");
        standardantworten.add("Da brauche ich etwas ausführlichere Angaben.");
        standardantworten.add("Haben Sie geprüft, ob Sie einen Konflikt mit einer DLL haben?");
        standardantworten.add("Das steht im Handbuch. Haben Sie das Handbuch gelesen?");
        standardantworten.add("Das klingt alles etwas wischi-waschi. Haben Sie einen Experten\n" +
        				"in der Nähe, der das etwas präziser beschreiben kann?");
        standardantworten.add("Das ist kein Fehler, das ist eine Systemeigenschaft!");
        standardantworten.add("Könnten Sie es anders erklären?");
    }

    /**
     * Wähle zufällig eine der Standardantworten aus.
     * @return eine zufällig gewählte Standardantwort.
     */
    private String standardantwortAuswählen()
    {
        // Erzeuge eine Zufallszahl, die als Index in der Liste der
        // Standardantworten benutzt werden kann. Die Zahl wird im Bereich
        // von Null (inklusiv) bis zur Größe der Liste (exklusiv) liegen.
        int index = zufallsgenerator.nextInt(standardantworten.size());
        return (String) standardantworten.get(index);
    }
}



Eingabeleser

Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;

/**
 * ein Eingabeleser liest eingetippten Text von der Konsole.
 * 
 * Class Eingabeleser reads typed text input from the standard text terminal. The text
 * typed by a user is then chopped into words, and a set of words is provided.
 * 
 * @author     Michael Kolling and David J. Barnes
 * @version    1.0  (21.Jan.2002)
 */
public class Eingabeleser
{
    private BufferedReader reader;

    /**
     * Erzeuge einen neuen Eingabeleser der Text von der Konsole
     * einliest.
     */
    public Eingabeleser()
    {
        reader = new BufferedReader(new InputStreamReader(System.in));;
    }

    /**
     * Lies eine Zeile von der Konsole und liefere sie als eine
     * Menge von Wörtern zurück.
     *
     * @return  Eine Menge von Zeichenketten, von denen jede ein
     *          vom Benutzer getipptes Wort repräsentiert.
     */
    public HashSet gibEingabe() 
    {
        System.out.print("> ");   // Eingabebereitschaft anzeigen
        String eingabezeile = eingabezeileEinlesen().trim().toLowerCase();

        StringTokenizer tokenizer = new StringTokenizer(eingabezeile);
        HashSet woerter = new HashSet();

        while(tokenizer.hasMoreTokens()) {
            woerter.add(tokenizer.nextToken());  // jedes Wort einfügen
        }

        return woerter;
    }

    /**
     * Lies eine Eingabezeile und liefere sie als String-Ergebnis.
     *
     * @return  Einen String, der die Eingabezeile enthält, oder 
     *           einen leeren String im Falle eines Fehlers.
     */
    private String eingabezeileEinlesen()
    {
        String zeile = "";

        try {
            zeile = reader.readLine();
        }
        catch(java.io.IOException exc) {
            System.out.println ("Beim Einlesen ist ein Fehler aufgetreten: " + exc.getMessage());
        }
        return zeile;
    }
}
 

messi

Bekanntes Mitglied
Hallo #5000!

Zerlege die Eingabe mit String.split()
Packe das String[] mit Arrays.asList() in eine java.util.List
Ändere die Reihenfolge mit Collections.shuffle()
Gehe von Anfang bis Ende durch und prüfe, ob für das Wort eine Antwort existiert.
 

MiniCooper

Mitglied
Wenn dann aber zwei Worte eingegeben werden, die in der HashMap sind, sollen beide Antwortmöglichkeiten ausgegeben werden. Kannst du mir ein Beispiel für den Quelltext schreiben?
 

MiniCooper

Mitglied
Wie muss ich dieses umschreiben, damit er auch noch weitere Worte sucht?

Code:
public String generiereAntwort(HashSet woerter)
    {
        Iterator it = woerter.iterator();
        while(it.hasNext()) {
            String wort = (String) it.next();
            String antwort = (String) antwortMap.get(wort);
            if(antwort != null) {
                return antwort;
            }
        }
        // Wenn wir hierher gelangen, wurde keines der Eingabewörter erkannt.
        // In diesem Fall wählen wir eine unserer Standardantworten (die
        // wir geben, wenn uns nichts Besseres mehr einfällt).
       
        return standardantwortAuswählen();
    }
 
B

bygones

Gast
die antworten in einer collection sammeln und nicht per return unterbrechen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Strings zerlegen Java Basics - Anfänger-Themen 15
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
T Strings unveränderlich???? Java Basics - Anfänger-Themen 22
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
N Strings verpflechten Java Basics - Anfänger-Themen 4
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
L Strings aneinanderhängen Java Basics - Anfänger-Themen 2
M Strings vergleichen Java Basics - Anfänger-Themen 10
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
P Verketten, Aneinanderreihen von Strings Java Basics - Anfänger-Themen 2
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
W Strings und das parsen Java Basics - Anfänger-Themen 8
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
X Anagramm mit Strings und Methode Java Basics - Anfänger-Themen 53
P geschachtelte Schleife mit Strings Java Basics - Anfänger-Themen 2
P Strings mit der Axt zerteilen Java Basics - Anfänger-Themen 7
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
K Strings hochzählen Java Basics - Anfänger-Themen 20
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
J Unveränderbarkeit von Strings Java Basics - Anfänger-Themen 3
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
N Vergleich von Strings schlägt fehl.. Java Basics - Anfänger-Themen 5
B 4 Strings, Anfangsbuchstaben muss unterschiedlich sein Java Basics - Anfänger-Themen 12
P Strings in String Array schreiben Java Basics - Anfänger-Themen 13
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
B mir nur die Gesamtzahl von einzigartigen Strings aus Array ausgeben lassen Java Basics - Anfänger-Themen 5
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
Jinnai4 Strings ersetzen Java Basics - Anfänger-Themen 9
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
C 2 Strings Java Basics - Anfänger-Themen 15
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Strings in andere Klassen importieren. Java Basics - Anfänger-Themen 2
D BlueJ Java: Strings voneinander trennen Java Basics - Anfänger-Themen 11
javaerd Wie kann ich Brute Force Methode mit Strings erweitern Java Basics - Anfänger-Themen 1
R Erste Schritte Strings "einrücken" Java Basics - Anfänger-Themen 3
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
B gemeinsames Vorkommen der charactere von 2 Strings als String zurückgeben Java Basics - Anfänger-Themen 5
R Teilinhalt eines Strings testen Java Basics - Anfänger-Themen 10
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
L Werte von Strings ? Java Basics - Anfänger-Themen 1
L Strings und Arrays - Expand Java Basics - Anfänger-Themen 12
I Schachbrett aus beliebigen Strings erstellen Java Basics - Anfänger-Themen 3
Syncopated Pandemonium Verketten von Strings funktioniert nicht Java Basics - Anfänger-Themen 4
F Wahrscheinlichkeit von Strings Java Basics - Anfänger-Themen 3
MiMa Splitten eines Strings Java Basics - Anfänger-Themen 5
T Hashfunktion für Strings Java Basics - Anfänger-Themen 3
C Zeilenumbruch für langes Strings Java Basics - Anfänger-Themen 2
J Variablen Strings mit Zeilenumbrüchen in neues Array Element Java Basics - Anfänger-Themen 1
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
H Erste Schritte Längstes Wort eines Strings herausfinden Java Basics - Anfänger-Themen 7
D Problem beim umwandeln eines Strings in eine Dzezimalzahl Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
T Strings ersetzen mit \ Java Basics - Anfänger-Themen 10
K Strings bearbeiten Java Basics - Anfänger-Themen 14
N Bestimmte Zeichen eines Strings umwandeln Java Basics - Anfänger-Themen 4
L Java Strings Buchstaben vertauschen Java Basics - Anfänger-Themen 4
L Strings in einem JOptionPane farbig Java Basics - Anfänger-Themen 2
A Wie bekomme ich zwei Strings in eine ArrayList Java Basics - Anfänger-Themen 4
C Chars eines Strings mit for schleife rückwärts auslesen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben