-
Notifications
You must be signed in to change notification settings - Fork 0
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;
}