Einführung in Sentence Splitting mit Stanford CoreNLP für Java

In der natürlichen Sprachverarbeitung (NLP) ist Sentence Splitting ein wichtiger Schritt, um Text in einzelne Sätze aufzuteilen und sie für weitere Analyse zu strukturieren. In diesem Artikel werden wir die beiden Java-Klassen SentenceRecognizer und Pipeline erklären, die es Ihnen ermöglichen, Sentence Splitting mit Stanford CoreNLP in Java durchzuführen.

Die Pipeline-Klasse

Die Pipeline-Klasse ist der Schlüssel zur Einrichtung der NLP-Pipeline mit Stanford CoreNLP. Sie enthält eine Liste von Eigenschaften, die festlegen, welche Schritte der NLP-Analyse durchgeführt werden sollen. In unserem Beispiel haben wir die Eigenschaften auf „tokenize, ssplit, pos, lemma, ner, parse, sentiment, depparse“ gesetzt, um eine umfassende Analyse des Textes durchzuführen. Weitere Details hierzu sind im Einführungsbeitrag zu CoreNLP.

Die Methode getPipeline() in der Pipeline-Klasse ist eine statische Methode, die eine Instanz der StanfordCoreNLP-Klasse zurückgibt. Wenn bereits eine Instanz vorhanden ist, wird sie zurückgegeben. Andernfalls wird eine neue Instanz erstellt, um die Ressourcen zu sparen und die Leistung zu verbessern.

package de.lernjava.nlp;

import java.util.Properties;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;

public class Pipeline {

    private static Properties properties;
    private  static String propertiesName = "tokenize, ssplit, pos, lemma, ner, parse, sentiment, depparse";
    private static StanfordCoreNLP stanfordCoreNLP;

    private Pipeline() {

    }

    static {
        properties = new Properties();
        properties.setProperty("annotators", propertiesName);
    }

    public static StanfordCoreNLP getPipeline() {
        if (stanfordCoreNLP == null) {
            stanfordCoreNLP = new StanfordCoreNLP(properties);
        }
        return stanfordCoreNLP;
    }

}

Die SentenceRecognizer-Klasse

Die SentenceRecognizer-Klasse ist verantwortlich für das Aufteilen des Textes in einzelne Sätze. In unserem Beispiel haben wir einen Text mit mehreren Sätzen definiert: „An airplane is assigned to several flights. This flight is assigned to only one airplane. A pilot can perform several flights. A flight is performed by several pilots.“

Zuerst wird die Stanford CoreNLP-Pipeline mit der Methode Pipeline.getPipeline() initialisiert. Dann wird ein CoreDocument-Objekt erstellt und mit dem Text initialisiert. Anschließend wird die stanfordCoreNLP.annotate(coreDocument)-Methode aufgerufen, um die NLP-Analyse durchzuführen und den Text in Sätze aufzuteilen.

Die coreDocument.sentences()-Methode gibt eine Liste von CoreSentence-Objekten zurück, die die aufgeteilten Sätze repräsentieren. Mit einer einfachen Schleife können wir durch diese Liste iterieren und jeden Satz ausgeben, indem wir sentence.text() aufrufen.

package de.lernjava.nlp;

import edu.stanford.nlp.pipeline.CoreDocument;
import edu.stanford.nlp.pipeline.CoreSentence;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;

import java.util.List;

public class SentenceRecognizer {

    public static void main(String[] args) {

        StanfordCoreNLP stanfordCoreNLP = Pipeline.getPipeline();
        String text = "An airplane is assigned to several flights. This flight is assigned to only one airplane. A pilot can perform several flights. A flight is performed by several pilots.";

        CoreDocument coreDocument = new CoreDocument(text);
        stanfordCoreNLP.annotate(coreDocument);
        List<CoreSentence> sentenceList = coreDocument.sentences();

        for(CoreSentence sentence : sentenceList) {
            System.out.println(sentence.text());
        }
    }

}

Der Output auf der Konsole sieht wie folgt aus:

An airplane is assigned to several flights.
This flight is assigned to only one airplane.
A pilot can perform several flights.
A flight is performed by several pilots.

Zusammenfassung

Durch die Verwendung der SentenceRecognizer– und Pipeline-Klassen können Sie Stanford CoreNLP in Java effektiv nutzen, um Sentence Splitting durchzuführen. Die Pipeline-Klasse ermöglicht die einfache Konfiguration der NLP-Pipeline, während die SentenceRecognizer-Klasse das Aufteilen von Text in einzelne Sätze ermöglicht. Mit diesem Verständnis können Sie Ihre NLP-Analysen verbessern und komplexe Sprachverarbeitungsaufgaben in Java bewältigen. Probieren Sie es selbst aus und entdecken Sie die vielseitigen Möglichkeiten von Stanford CoreNLP für Ihre Java-Anwendungen!

Schreibe einen Kommentar