/*
 * $Id: DefaultAnalyser.java,v 1.8 2005/04/13 06:37:26 lawern Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: DefaultAnalyser.java,v $
 * Revision 1.8  2005/04/13 06:37:26  lawern
 * Analyser mit Typografiegewichtung
 *
 * Revision 1.7  2003/12/24 10:12:05  bigmac
 * Projektweite Import-Optimierung
 *
 * Revision 1.6  2003/08/27 09:44:15  lawern
 * LangPackId hinzugefügt
 *
 * Revision 1.5  2003/04/25 17:36:28  lawern
 * Überarbeitung der Satzendeerkennung
 *
 * Revision 1.4  2003/04/25 13:45:21  lawern
 * Anpassung an Dynamische Language-Module
 *
 * Revision 1.3  2003/04/23 14:55:33  lawern
 * Ergänzungen für Volltextverarbeitung
 *
 * Revision 1.2  2003/03/20 09:11:35  lawern
 * Konverter und Analyse überarbeitet
 *
 * Revision 1.1  2003/03/07 11:56:56  lawern
 * initiale Version
 *
 */
package vkc.analyse;

import cern.colt.list.DoubleArrayList;

import java.util.ArrayList;
import java.util.HashMap;


/**
 * Klasse zum Analysieren von Texten im VKC-TextStyle-Format.
 */
public final class DefaultAnalyser extends Analyser {
    private BufferedString tmpWord = new BufferedString("");

    public void init_Analyser(ArrayList wordList, DoubleArrayList weights) {
        //Datenstrukturen initialisieren
        words = new HashMap(1000);
        sentences = new ArrayList();
        tokens = new ArrayList(1000);

        //Standart Sentence Builder verwenden
        rebuildSentences(wordList, weights);
    }

    /**
     * Fügt den übergebenen Satz mit seiner Schlagwortliste dem Ergebnis hinzu.
     *
     * @param sentence Satztext
     * @param keyWords Liste der im Satz vorkommenden Schlagwörter in Form von
     *        SummaryEntries
     *
     * @return Verweis auf den Ergebniseintrag, anderenfalls <code>null</code>
     */
    protected SummaryEntry setSentence(String sentence, ArrayList keywords) {
        SummaryEntry newEntry = new SummaryEntry(sentence, keywords);

        sentences.add(newEntry);

        //System.out.println(sentence);
        return newEntry;
    }

    /**
     * Fügt das übergebene Wort mit seinem Gewicht in die Ergebnisliste ein,
     * falls es sich um ein Schlagwort handelt und liefert in diesem Fall den
     * Verweis auf den Eintrag zurück, anderenfalls wird null zurückgeliefert.
     *
     * @param word Wort welches hinzugefügt werden soll
     * @param weigt Gewicht des hinzuzufügenden Wortes
     *
     * @return Verweis auf den Ergebniseintrag, anderenfalls <code>null</code>
     */
    protected SummaryEntry setWord(String word, double relevance) {
        relevance = 1;

        word = word.toLowerCase();

        SummaryEntry tmpWeight;

        //System.out.println(word+":"+weight);
        tmpWord.set(word);
        tmpWeight = (SummaryEntry) words.get(tmpWord);

        //existiert das Wort schon in der words-Liste?
        if (tmpWeight != null) {
            //Ja, dann Wert nur erhöhen.
            tmpWeight.inc(relevance);
        } else {
            //Nein, dann neues Wort anlegen.
            tmpWeight = new SummaryEntry(word, relevance);
            words.put(tmpWord, tmpWeight);
            tmpWord = new BufferedString("");
        }

        //Gewicht des Gesamtdokumentes erhöhen
        documentWeight += relevance;

        //Verweis auf HashMap-Eintrag zurückgeben
        return tmpWeight;
    }

    /**
     * Tested ob das übergebene Wort eine Abkürzung ist.
     */
    boolean isAbbreviation(String word) {
        return false;
    }

    /**
     * Liest die ID des Language Pack.
     */
    public Integer getLangPackId() {
        return new Integer(0);
    }
}
