Wortpaare in Texten erkennen

Status
Nicht offen für weitere Antworten.

kognitio

Aktives Mitglied
Hallo,
ich möchte aus Texten Wortpaare erkennen und herausschreiben. Also, wenn in einem Text steht "new york", dann soll dies auch als solches erkannt werden.
Bis jetzt habe ich folgende Idee.
Ich gehe durch einen Text hindurch und lese die Wort einzeln in eine TreeMap ein. Danach wird der text wieder eingelesen und jedes wort in der TreeMap wird mit den Worten des Textes verglichen. Wenn er eines findet, dann soll es zusammen mit dem nächsten Wort als "einen" String zusammennehmen und erneut in eine TreeMap einlesen.
Am Ende dann einfach alle "keys" auslesen, deren "values" größer ist als 2 oder 3.
Also im Prinzip, wenn in einem Text steht:" New York has a new opinion about ...", dann soll das Programm, wenn es "new" vergleicht "new york" und "new opinion" als einen String zusammenpacken.
So ist der Plan, aber ich habe Probleme, mit dem zweiten einlesen in die TreeMap, da ich nicht weiß, wie er es finden soll und dann wissen soll, dass er das nächste Wort mit dazu packen soll.
Der Code sieht bis jetzt so aus:
Code:
public class coll
{
        public static void main(String [] args)
                throws Exception
        {
                BufferedReader in = new BufferedReader(new FileReader("test.txt"));
                BufferedWriter raus = new BufferedWriter(new FileWriter("Gesamt.txt"));
                String rein;
                String wort;
                TreeMap zusammen = new TreeMap();
                TreeMap word = new TreeMap();
                while ((rein=in.readLine())!=null)
                {
                        StringTokenizer st = new StringTokenizer(rein);
                        while (st.hasMoreTokens())
                        {
                                wort = st.nextToken();
                                word.put(wort, wort);
                        }
                }


                Set set = word.entrySet();
                for(Iterator iter = set.iterator(); iter.hasNext();)
                {
                        Map.Entry entry = (Map.Entry) iter.next();
                        wort = (String) entry.getKey();
                        {
                                while ((rein=in.readLine())!=null)
                                {
                                        StringTokenizer st = new StringTokenizer(rein);
                                        while (st.hasMoreTokens())
                                        {
                                                String neu;
                                                neu = st.nextToken();
                                                if (wort.matches(neu))              //das hier istr natürlich mehr oder weniger unsinn, aber ich weiß nicht, wie anders...
                                                                                              //hier muss ich die Wort zusammenlegen und erneut einlesen, aber wie...?
                                                {
                                                        raus.write(wort);
                                                        raus.flush();
                                                        raus.newLine();
                                                }
                                        }
                                }               
                        }
                }

        }
}

wenn jemand eine Idee hat, wäre ich dankbar ...
P.S.: Der oben beschriebene Weg fiel mir heute ein, aber vielleicht gibt es auch einen viel geeigneteren Weg, also, wenn jemand einen weiß ...
 
B

bygones

Gast
ehrlich gesagt versteh ich nicht ganz was du machen willst...
was soll gezählt werden bzw. was soll zusammengefügt werden ??
 
B

bygones

Gast
ehrlich gesagt was das Ganze soll ?!

Du speicherst dir alle Wörter die in einem Text vorkeommen in einer Map - was als key, was als value...
danach gehst du nochmal den text durch und suchst für jedes gespeicherte Wort ein Paar - was speicherst du dann und was zählst du ?
 

kognitio

Aktives Mitglied
ok:
zuerst speichere ich alles in einer Map, um eine Wortliste zu erstellen, da ich danach nur den "key" auslese, habe ich jedes Wort das vorkommt genau "einmal".
danach gehe ich nocheinmal duch den text und (jetzt kommt der teil den ich nicht hinbekomme) lese das erste wort ein und vergleich es mit dem ersten eintrag aus der map. ist der erste eintrag aus der map identlisch mit der der wortliste, wenn ja, nimm das nächste wort dazu (also das zweit) und speichere dieses paar in einer neuen map. danach gehe zum zweiten wort und schau, ob es mit dem ersten eintrag aus der Map identlisch ist, wen ja usw., wenn nein, gehe zum drittem...
das ganze mit einem beispiel
der text:
Code:
new york is happy about the new statue
das erste wort in der treemap ist dann
Code:
about

und dann soll fogendes geschehen:
ist "about" = "new".... nein, also weiter zum nächste:
ist "about" = "york"... nein, usw..... bis
ist "about" = "about", ja, dann speichere in einer neuen Map "about + the" als einen key-eintrag.
dann weiter:
ist "about" = "the" ... nein usw...

ist zwar immer noch ein wenig konfus, aber verständlicher, oder?

dann gehe ich nocheinnmal durch den text und zähle die wortpaare, wie oft sie vorkommen, und schreibe sie heraus, wenn sie öfters, als 2 o. 3 mal vorkommen.
Thats's the idea.
 
B

bygones

Gast
ok - verstanden (mit was man sich so alles die zeit vertreiben kann *g*)

als erstes würde ich beim erstenmal keine Map nehmen - du liest jedes Wort ein und speicherst es - ich sehe da keine key - value beziehung...

Ich würde da ein Set nehmen (z.b. HashSet da Ordnung egal ist) - wenn du willst dass jedes Wort nur einmal aufgenommen wird - ansonsten ArrayList z.b.....

Den Text würde ich in einem String halten.
Code:
String text = // les den Text aus der datei (ohne \n !!);
String[] words = text.split(" "); // trenne alle wörter - delimiter ist das leerzeichen
Set wordList = new HashSet(Arrays.asList(words)); // erstelle Set mit den eingelesen wörtern

usw. - mir stellt sich doch die Frage nach dem Sinn. Warum speicherst du nicht gleich alle zweier paare ? also "new york" , "york is", "is happy" usw.

da wenn ich dich richtig verstanden habe du jedes wort des textes einliest und dann wenn dieses Wort gefunden wurde das Nachbar wort mitreinholst....
 

kognitio

Aktives Mitglied
gute Frage, warum speichere ich nicht gleich alle paare.... oh mann, manchmal sieht man den wald vor lauter bäumen nicht, oder :)
aber wie mach ich das algorithmisch?

ich lese die worte über den StringTokenizer ein und speichere dann die Worte so ab:
Code:
StringTokenizer stw = new StringTokenizer(meinString);
String paare = stw.nextToken() + " " + stw.nextToken();

aber wenn er dann mit
Code:
while (stw.hasNextToken())
den nächsten Token einliest, dann nimmt er den übernächsten?
also:
"new york has a new statute" speichert er dann doch ab mit

"new york"
"has a"
"new staute"

und ich will das ja so:

"new york"
"york has"
"has a"
"a new"
"new statute"
 
B

bygones

Gast
les sie in einen Array ein (entweder per Tokenizer oder per split)
und dann:
Code:
for(int i = 0; i < wordArray.length; i++) {
  if(i < wordArray.length - 1) {
    String wort1 = wordArray[i];
    String wort2 = wordArray[i+1];
    // mach was mit den beiden wörter
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Wortpaare - HashMap - ArrayList Java Basics - Anfänger-Themen 6
M Input/Output Ein und Ausgabe von Texten Java Basics - Anfänger-Themen 20
G Verschlüsselung und Entschlüsselung von Texten Java Basics - Anfänger-Themen 7
C java programm mit Texten, speichern und so Java Basics - Anfänger-Themen 3
N Spracherkennung bei Texten Java Basics - Anfänger-Themen 2
G Hinzufügen und Entfernen von Zahlen, Texten etc. aus JLists Java Basics - Anfänger-Themen 6
S jTextField vergrößert sich bei längeren Texten Java Basics - Anfänger-Themen 4
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
B Zusammenhängende Blöcke bei x-gewinnt erkennen? Java Basics - Anfänger-Themen 14
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
1 Wie dieses Muster am einfachsten erkennen? Java Basics - Anfänger-Themen 32
Yasemin bahar Muster erkennen Java Basics - Anfänger-Themen 13
U Muster in einem Array erkennen Java Basics - Anfänger-Themen 8
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
N palindrom erkennen Java Basics - Anfänger-Themen 3
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
C Erkennen ob Frame geschlossen wurde Java Basics - Anfänger-Themen 2
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
P Eigenschaft eines imperativen Algo (Pseudocode) sofort erkennen Java Basics - Anfänger-Themen 1
G Verlassen einer ComboBox erkennen Java Basics - Anfänger-Themen 16
S Java Großbuchstabe erkennen Java Basics - Anfänger-Themen 5
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
B Unterschiede in einer Liste erkennen Java Basics - Anfänger-Themen 1
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
J Leerzeichen im Pfad automatisch erkennen Java Basics - Anfänger-Themen 30
M Input/Output Zeilenumbrüche erkennen und beibehalten Java Basics - Anfänger-Themen 4
X XML-Eintrag an Attribute erkennen Java Basics - Anfänger-Themen 2
N Erkennen ob Linkshänder Maus Java Basics - Anfänger-Themen 4
L In Javakara Palindrom erkennen. Java Basics - Anfänger-Themen 9
B Tastatureingabe erkennen Java Basics - Anfänger-Themen 8
D Input/Output Buchstaben als bestimmte Zahl erkennen Java Basics - Anfänger-Themen 4
F Blinken oder Dauer ein erkennen Java Basics - Anfänger-Themen 6
F Linien und Kurven erkennen Java Basics - Anfänger-Themen 2
T Richtigen Wert erkennen Java Basics - Anfänger-Themen 9
D Klassenmethode: Befehl erkennen, dann int zurückgeben Java Basics - Anfänger-Themen 2
S Laufzeitfehler erkennen Java Basics - Anfänger-Themen 3
T Erste Schritte Methoden anwenden und erkennen Java Basics - Anfänger-Themen 5
D Erste Schritte Array erkennen Java Basics - Anfänger-Themen 4
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
F Attribute von Feldinhalten erkennen Java Basics - Anfänger-Themen 6
N Erste Schritte Doppelwerte erkennen Java Basics - Anfänger-Themen 5
H Schachbrett erkennen Java Basics - Anfänger-Themen 19
T Erste Schritte Leerzeile in JAVA erkennen /übergehen Java Basics - Anfänger-Themen 9
S Erkennen ob Zahl durch 500Teilbar ist Java Basics - Anfänger-Themen 21
Java-Insel StringBuilder Zeilenumbrüche erkennen Java Basics - Anfänger-Themen 3
H Datei in kleine Stücke teilen und wieder erkennen Java Basics - Anfänger-Themen 10
T Erkennen ob ein Pfad lokal oder im Netzwerk ist Java Basics - Anfänger-Themen 13
X String Sonderzeichen/Zahlen erkennen Java Basics - Anfänger-Themen 3
P System - Tage erkennen ( System Time ?) Java Basics - Anfänger-Themen 3
M Betriebssystem erkennen? Java Basics - Anfänger-Themen 12
lumo Collections Array - erkennen von positionsänderungen Java Basics - Anfänger-Themen 5
M Muster erkennen. Idee: Fassade. Java Basics - Anfänger-Themen 3
M Java-Prog soll Texte innerhalb Bildern erkennen Java Basics - Anfänger-Themen 2
S Leere Datei erkennen Java Basics - Anfänger-Themen 5
E ActionListener in anderer Klasse erkennen Java Basics - Anfänger-Themen 13
Kukulkan Java-Version (ME, SE) erkennen und darauf reagieren? Java Basics - Anfänger-Themen 35
E Position erkennen und überlappungen feststellen Java Basics - Anfänger-Themen 4
3 Leerzeichen erkennen Java Basics - Anfänger-Themen 3
A Gruppen von Namen erkennen Java Basics - Anfänger-Themen 21
M In Router einloggen und PCs im Netzwerk erkennen Java Basics - Anfänger-Themen 18
M ziffer in zahl erkennen mit boolean Java Basics - Anfänger-Themen 12
D Zahl erkennen Java Basics - Anfänger-Themen 4
T Image Position erkennen Java Basics - Anfänger-Themen 6
S Sonderzeichen in einem String erkennen Java Basics - Anfänger-Themen 20
S Filelock erkennen Java Basics - Anfänger-Themen 6
A Angeschlossenes Gerät am Com Port erkennen Java Basics - Anfänger-Themen 4
L Zeilenwechselsequenz erkennen aus der Datei heraus Java Basics - Anfänger-Themen 2
S Erkennen der Eingabe Java Basics - Anfänger-Themen 13
G eine straße im kartenspiel erkennen (algorithmus) Java Basics - Anfänger-Themen 4
G Bildinformationan auslesen - OCR - Zahlen erkennen Java Basics - Anfänger-Themen 10
B Properties erkennen, auslesen Java Basics - Anfänger-Themen 7
M in Textfile Strukturen erkennen Java Basics - Anfänger-Themen 5
kulturfenster Teilstring erkennen Java Basics - Anfänger-Themen 5
L Laufwerksauswahl / Laufwerke erkennen Java Basics - Anfänger-Themen 3
B Threadende erkennen Java Basics - Anfänger-Themen 6
E Klassen erkennen in einer Aufgabenstellung Java Basics - Anfänger-Themen 6
L path einlesen und erkennen ob es für windows oder linux ist Java Basics - Anfänger-Themen 8
H Zeilenanzahl eines Strings erkennen Java Basics - Anfänger-Themen 2
S Umlaute und Sonderzeichen erkennen Java Basics - Anfänger-Themen 12
C Erkennen einer gedrückten Taste Java Basics - Anfänger-Themen 6
S CD/DVD-Laufwerke erkennen mit Java Java Basics - Anfänger-Themen 3
R erkennen von Wortende Java Basics - Anfänger-Themen 5
N Veränderungen in JTextArea erkennen Java Basics - Anfänger-Themen 5
C Japanische Zeichen erkennen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben