# NGram erstellen - Scheitere schon an der Planung



## magicx (31. Mai 2016)

Guten Tag,

ich soll für eine ziemlich umfangreiche Aufgabe (für mich ist sie zumindest sehr umfangreich) eine NGram Klasse erstellen. Diese soll alle Informationen beinhalten um das n-gram zu speichern.

Dazu habe ich folgende Teilaufgaben:

a) Konstruktor
Das String[ ] soll das komplette tokenisierte NGram beinhalten. Das letzte String-Feld
hat den 'Token' zum Inhalt.
public NGram(String[ ] contents)

b) toString/fromString
Zur spateren Serialisierung sollen die Instanzen ihre vollstandige Information mithilfe
der toString-Methode in einen String zu wandeln.
public String toString()
In einer weiteren Klassen-Methode soll aus einem String eine NGram-Objekt geparst
werden.
public static NGram fromString(String input)

Diese beiden Methoden sollen 'Hand in Hand' gehen konnen. Folgender Code sollte also
problemlos funktionieren:
St r ing [ ] con = new St r ing [ ] f " this " , "is" , " just " , "an" , " example " g ;
NGram n = new NGram( con ) ;
NGram m = NGram. f romSt r ing ( n . t oSt r ing ( ) ) ;
m. equa l s (n ) ; // true
c) equals/hashCode
Um die NGramme spater in Kombination mit Collections benutzen zu konnen mussen
die Methoden hashCode und equals sinnvoll uberschrieben werden. Beachten Sie hierbei,
dass die equals-Methode ein Object ubergeben bekommen muss.
public boolean equals(Object other)
Die equals-Methode sollte prufen, ob es sich um die selbe Klasse handelt und ob die
Inhalte der NGram-Instanzen die selben sind.
public int hashCode()

Die HashCode-Methode sollte fur zwei Instanzen, die sich nach equals gleichen den selben
hashCode-Wert zuruckgeben. Fur zwei Instanzen, die sich unterscheiden sollte ein
anderer HashCode-Wert zuruckgegeben werden. Beachten Sie hierfur am einfachsten die
Konventionen (als Pseudocode) aus dem Foliensatz aus Sitzung 3, Folie 14.
d) NGram-Kontext prufen
Schreiben Sie eine Methode, die den Kontext des NGrams mit einem gegebenen Kontext
vergleicht. Dies wird spater relevant, wenn wir von allen n-Grammen diejenigen
auswahlen wollen, die in der Lage sind gute Tokens vorherzusagen. Die Methode soll
folgender Spezikation genugen:
public boolean checkContext(String[ ] context)
Die Methode soll true zuruckliefern, falls der Kontext des NGrams mit dem ubergebenen
Kontext ubereinstimmt. Die Methode konnte beispielsweise so getestet werden:
St r ing [ ] con = new St r ing [ ] f " this " , "is" , " just " , "an" , " example " g ;
NGram n = new NGram( con ) ;
St r ing [ ] l o c a l c o n t e x t = new St r ing [ ] f " this " , "is" , " just " , "an" g ;
n . checkContext ( l o c a l c o n t e x t ) ; // true
St r ing [ ] l o c a l c o n t e x t = new St r ing [ ] f " this " , "is" , " just " , " poo " g ;
n . checkContext ( l o c a l c o n t e x t ) ; // false

Da ich lediglich Einführungsveranstaltung zu Python und C++ hatte, stellt mich das nun vor eine ziemlich harte Aufgabe.
Erste Java kentnisse sind vorhanden + ein Umgang, welcher es mir erlaubt Pseudocode bzw einen strukturierten Plan umsetzen zu können.
Jedoch verstehe ich bei dem ganzen Text erstmal garnichts.

Hoffe hier einige Tips bekommen zu können, welche mir den Einstieg in diese Aufgabe erleichtern bzw einen kleinen Leitfaden zur vorgehensweise bieten können.

Vielen Dank schonmal.


----------

