Skip to content

TextAnalyzer

Leon edited this page Oct 27, 2017 · 6 revisions

Der TextAnalyzer zerteilt den Text in Sätze und Wörter. Desweiter berechnet er die durchschnittliche Wortlänge und jeder Satz wird individuell analysiert.

Alle Sätze werden zerteilt und in ein String Array geladen.

String[] sentencesList = splitSentences(text);

Danach wird die durchschnittliche Wortlänge berechnet.

 for (int i = 0; i < sentences.length; i++) {
            this.sentences[i] = new Sentence(sentencesList[i]);
            float avg = sentences[i].getAvgWordLength();
            this.avgWordLength[i] = Float.isFinite(avg) ? avg : 0;
}

Die Methode splitSentences(String text) zerteilt den Text in einzelne Sätze. Dafür wird der BreakIterator genutzt. Jeder Satz wird in die ArrayList senteceList hinzugefügt. Am Ende wird die ArrayList in ein String Array konvertiert und zurückgegeben.

private String[] splitSentences(String text) {
        BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.GERMAN);
        iterator.setText(text);
        ArrayList<String> sentenceList = new ArrayList<>(text.length() / 6); // Avg word length in german is 5.7
        int start = iterator.first();
        for (int end = iterator.next();
             end != BreakIterator.DONE;
             start = end, end = iterator.next()) {

            String sentence = text.substring(start, end).trim();
            // Exclude empty sentences
            if (sentence.length() > 0) {
                Stream.of(sentence.split("\n"))
                        .filter(s -> s.length() > 0 && !s.equals("\r"))
                        .forEach(sentenceList::add);
            }
        }
        sentenceList.trimToSize(); // Remove unused indices

        // Convert ArrayList to array
        String[] sentences = new String[sentenceList.size()];
        sentenceList.toArray(sentences);
        return sentences;
}
Clone this wiki locally