Node.js Satzanalyse?
Hallo, für ein Projekt müsste ich einen deutschen Satz in seine Satzglieder unterteilen und die einzelnen Wörter auch genauer bestimmen (z.b.: Das Tempus, die Person etc.) Dafür würde ich Node.js / Javascript, Problem ist, dass sämtliche nlp Module die ich benutzen wollte an irgendeiner Stelle nicht richtig funktionieren. Deswegen würde ich mich über eine etwas detaillierte Anleitung freuen wie das ganze umsetzen könnte.
1 Antwort
Einen festen Satz? Oder kann es ein zufälliger Satz sein?
Text-Analyse ist extrem schwer richtig zu programmieren...
Ich habe dazu mal ChatGPT befragt, dies hat folgendes ergeben. Habe es allerdings nicht selbst getestet.
const nltk = require('nltk');
// Beispiel-Satz
const sentence = "Der schnelle braune Fuchs springt über den faulen Hund.";
// Part-of-Speech-Tagging durchführen
const taggedSentence = nltk.posTag(nltk.wordTokenize(sentence));
// Satzstruktur extrahieren
const sentenceTree = nltk.parse(taggedSentence);
// Grammatikalische Informationen extrahieren
const tense = getTense(taggedSentence);
const subject = getSubject(sentenceTree);
const predicate = getPredicate(sentenceTree);
const objects = getObjects(sentenceTree);
// Ergebnis ausgeben
console.log("Satz: " + sentence);
console.log("Tempus: " + tense);
console.log("Subjekt: " + subject);
console.log("Prädikat: " + predicate);
console.log("Objekte: " + objects.join(", "));
// Hilfsfunktionen
// Ermittelt das Tempus des Satzes
function getTense(taggedSentence) {
for (let i = 0; i < taggedSentence.length; i++) {
const tag = taggedSentence[i][1];
if (tag === "VBP" || tag === "VBZ") {
return "Präsens";
} else if (tag === "VBD") {
return "Simple Past";
} else if (tag === "VBN") {
return "Past Participle";
} else if (tag === "VBG") {
return "Present Participle";
}
}
return "";
}
// Ermittelt das Subjekt des Satzes
function getSubject(sentenceTree) {
const subjectNode = sentenceTree.subtrees().find(subtree => subtree.label() === "NP");
if (subjectNode) {
return subjectNode.leaves().join(" ");
}
return "";
}
// Ermittelt das Prädikat des Satzes
function getPredicate(sentenceTree) {
const predicateNode = sentenceTree.subtrees().find(subtree => subtree.label() === "VP");
if (predicateNode) {
return predicateNode.leaves().join(" ");
}
return "";
}
// Ermittelt die Objekte des Satzes
function getObjects(sentenceTree) {
const objects = [];
const objectNodes = sentenceTree.subtrees().filter(subtree => subtree.label() === "NP");
for (let i = 0; i < objectNodes.length; i++) {
objects.push(objectNodes[i].leaves().join(" "));
}
return objects;
}
Woher ich das weiß:Berufserfahrung – Ich bin Entwickler.