Sprache-zu-Tagebuch: Transkription & Stimmungsanalyse
Erstellen Sie einen Node.js-Dienst, der Audioaufnahmen mit Whisper transkribiert und Sentiment- sowie Entitätsanalysen durchführt, um Tagebucheinträge automatisch zu taggen.
Auf dieser Seite
---
title: "Sprache-zu-Tagebuch: Erstellen Sie eine KI-gestützte Tagebuch-App mit Node.js"
excerpt: "Erfahren Sie, wie Sie eine Sprache-zu-Tagebuch-Anwendung erstellen, die Audio transkribiert, Stimmungen analysiert und Entitäten erkennt."
---
Tagebuchführung ist ein wirkungsvolles Instrument zur Selbstreflexion und geistigen Klarheit. Aber was wäre, wenn Sie es noch aufschlussreicher und müheloser gestalten könnten? Stellen Sie sich vor, Sie sprechen Ihre Gedanken frei aus und diese werden nicht nur transkribiert, sondern auch hinsichtlich Stimmung und wichtiger Themen analysiert. Dieses Projekt führt Sie durch den Aufbau einer „Sprache-zu-Tagebuch"-Anwendung, die genau das tut.
Wir werden einen Node.js-Dienst erstellen, der Audioaufnahmen entgegennimmt, die Whisper-API von OpenAI für hochpräzise Transkription verwendet und dann Stimmungs- und Entitätsanalysen durchführt, um Ihre Tagebucheinträge automatisch zu kennzeichnen. Dieses Projekt ist ein fantastischer Einstieg in die Welt der KI-gestützten Anwendungen und zeigt das unglaubliche Potenzial der Kombination verschiedener KI-Modelle zur Schaffung von etwas wirklich Nützlichem. Für Entwickler, die sich für die Schnittstelle zwischen KI und Technologie für psychische Gesundheit interessieren, ist dies ein perfektes Portfolio-Projekt.
Voraussetzungen:
- Grundlegendes Verständnis von JavaScript und Node.js.
- Node.js und npm (oder yarn) auf Ihrem Computer installiert.
- Ein OpenAI API-Schlüssel.
- Ein Code-Editor wie VS Code.
Das Problem verstehen
Traditionelle Tagebuchführung, obwohl effektiv, kann sich manchmal wie eine lästige Pflicht anfühlen. Das Eintippen langer Einträge kann zeitaufwändig sein, und es ist oft schwierig, bestimmte Erinnerungen wiederzufinden oder Ihre Stimmung über einen längeren Zeitraum zu verfolgen. Sprachbasierte Tagebuchführung ist eine großartige Alternative, aber Sie bleiben mit Audiodateien zurück, die schwer zu durchsuchen und zu analysieren sind.
Unsere Anwendung löst dies, indem sie eine nahtlose Pipeline erstellt:
- Spracheingabe: Erfassen Sie Ihre Gedanken auf natürliche Weise durch Sprechen.
- KI-Transkription: Konvertieren Sie Sprache mit nahezu menschlicher Genauigkeit in Text.
- KI-Analyse: Extrahieren Sie aussagekräftige Erkenntnisse (Stimmung und Themen) aus dem Text.
- Strukturierte Daten: Speichern Sie Ihre Tagebucheinträge in einem strukturierten, durchsuchbaren Format.
Dieser Ansatz verwandelt unstrukturierte Audiodaten in ein reichhaltiges, organisiertes und aufschlussreiches persönliches Tagebuch.
Voraussetzungen
Bevor wir mit dem Programmieren beginnen, richten wir unsere Entwicklungsumgebung ein.
1. Projekteinrichtung:
Erstellen Sie ein neues Verzeichnis für Ihr Projekt und initialisieren Sie ein Node.js-Projekt:
mkdir sprache-zu-tagebuch
cd sprache-zu-tagebuch
npm init -y
2. Abhängigkeiten installieren:
Wir benötigen einige Pakete, um unseren Server zum Laufen zu bringen:
express: Ein schnelles, unvoreingenommenes, minimalistisches Web-Framework für Node.js.multer: Eine Node.js-Middleware zur Verarbeitung vonmultipart/form-data, die hauptsächlich zum Hochladen von Dateien verwendet wird.openai: Die offizielle Node.js-Bibliothek für die OpenAI-API.sentiment: Ein Node.js-Modul, das die AFINN-Wortliste zur Sentimentanalyse verwendet.wink-nlp: Eine Natural Language Processing-Bibliothek für Node.js, die hervorragend für die Named Entity Recognition geeignet ist.dotenv: Ein Modul ohne Abhängigkeiten, das Umgebungsvariablen aus einer.env-Datei inprocess.envlädt.
Installieren Sie sie alle mit diesem Befehl:
npm install express multer openai sentiment wink-nlp dotenv
3. OpenAI API-Schlüssel:
Wenn Sie noch keinen haben, melden Sie sich für ein OpenAI-Konto an und erstellen Sie einen neuen API-Schlüssel.
Erstellen Sie eine .env-Datei im Stammverzeichnis Ihres Projekts, um Ihren API-Schlüssel sicher zu speichern:
OPENAI_API_KEY=ihr_api_schluessel_hier
Schritt 1: Einrichten des Express-Servers und Dateiuploads
Zunächst erstellen wir einen grundlegenden Express-Server, der Audio-Datei-Uploads verarbeiten kann.
Was wir tun
Wir richten einen Express-Server mit einem einzigen Endpunkt ein, der eine POST-Anfrage mit einer Audio-Datei entgegennimmt. Wir verwenden Multer, um die hochgeladene Datei zu verarbeiten und in einem lokalen Verzeichnis zu speichern.
Implementierung
Erstellen Sie eine Datei mit dem Namen index.js und fügen Sie den folgenden Code hinzu:
// index.js
require('dotenv').config();
const express = require('express');
const multer = require(' multer');
const fs = require('fs');
const app = express();
const port = 3000;
// Multer für Dateiuploads einrichten
const upload = multer({ dest: 'uploads/' });
app.post('/journal', upload.single('audio'), (req, res) => {
if (!req.file) {
return res.status(400).send('No audio file uploaded.');
}
res.json({ message: 'File uploaded successfully', file: req.file });
});
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
Wie es funktioniert
- Wir initialisieren eine Express-Anwendung.
- Wir konfigurieren Multer, um hochgeladene Dateien in einem
uploads/-Verzeichnis zu speichern. - Wir erstellen einen
/journal-Endpunkt, derupload.single('audio')als Middleware verwendet. Dies teilt Multer mit, dass eine einzelne Datei mit dem Feldnamen 'audio' erwartet wird. - Die Informationen der hochgeladenen Datei sind in
req.fileverfügbar.
Testen des Endpunkts
Sie können ein Tool wie Postman oder curl verwenden, um diesen Endpunkt zu testen. Stellen Sie sicher, dass Sie ein uploads-Verzeichnis im Stammverzeichnis Ihres Projekts erstellt haben.
curl -X POST -F "audio=@/path/to/your/audio.mp3" http://localhost:3000/journal
Sie sollten eine JSON-Antwort sehen, die den Datei-Upload bestätigt, und eine neue Datei in Ihrem uploads-Verzeichnis.
Schritt 2: Transkribieren von Audio mit der Whisper-API
Nun, da wir Audio-Dateien hochladen können, senden wir sie an die OpenAI Whisper-API zur Transkription.
Was wir tun
Wir nehmen den Pfad der hochgeladenen Audio-Datei, erstellen einen lesbaren Stream und übergeben ihn an den Transkriptionsendpunkt der OpenAI-API.
Implementierung
Aktualisieren Sie Ihre index.js-Datei mit den folgenden Änderungen:
// index.js (fortgesetzt)
const { OpenAI } = require('openai');
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
// ... (vorheriger Code)
app.post('/journal', upload.single('audio'), async (req, res) => {
if (!req.file) {
return res.status(400).send('No audio file uploaded.');
}
try {
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream(req.file.path),
model: 'whisper-1',
});
// Aufräumen der hochgeladenen Datei
fs.unlinkSync(req.file.path);
res.json({ transcription: transcription.text });
} catch (error) {
console.error('Error with OpenAI API:', error);
res.status(500).send('Failed to transcribe audio.');
}
});
Wie es funktioniert
- Wir initialisieren den OpenAI-Client mit unserem API-Schlüssel.
- Im
/journal-Endpunkt haben wir jetzt eineasync-Funktion, umawaitzu verwenden. - Wir verwenden
openai.audio.transcriptions.create, um die Audio-Datei an Whisper zu senden. fs.createReadStream(req.file.path)erstellt einen lesbaren Stream aus der hochgeladenen Datei, was für große Dateien effizienter ist.- Wir geben das
whisper-1-Modell an, ein leistungsstarkes und genaues Transkriptionsmodell. - Nach Erhalt der Transkription verwenden wir
fs.unlinkSync, um die temporäre Audio-Datei von unserem Server zu löschen.
Wenn Sie jetzt eine Audio-Datei an den /journal-Endpunkt senden, erhalten Sie eine JSON-Antwort mit dem transkribierten Text.
Schritt 3: Analysieren der Stimmung mit Sentimentanalyse
Nun, da wir den Text haben, analysieren wir seinen emotionalen Ton.
Was wir tun
Wir verwenden die sentiment-Bibliothek, um den transkribierten Text zu analysieren und eine Sentiment-Bewertung zu erhalten.
Implementierung
Integrieren wir die sentiment-Bibliothek in unseren Endpunkt:
// index.js (fortgesetzt)
const Sentiment = require('sentiment');
const sentiment = new Sentiment();
// ... (vorheriger Code)
app.post('/journal', upload.single('audio'), async (req, res) => {
// ... (Datei-Upload und Transkriptionslogik)
try {
// ... (Transkriptionscode)
const journalText = transcription.text;
const sentimentResult = sentiment.analyze(journalText);
// ... (Aufräumen)
res.json({
transcription: journalText,
sentiment: sentimentResult,
});
} catch (error) {
// ... (Fehlerbehandlung)
}
});
Wie es funktioniert
- Wir erstellen eine neue Instanz des
Sentiment-Analysators. - Wir übergeben den
journalTextvon Whisper ansentiment.analyze(). - Dies gibt ein Objekt mit einer
score(Gesamtsentiment), einemcomparative-Score (Score pro Wort) und Arrays mit positiven und negativen Wörtern zurück, die im Text gefunden wurden.
Die Antwort enthält nun sowohl die Transkription als auch eine detaillierte Sentimentanalyse. Eine positive Bewertung deutet auf eine positive Stimmung hin, während eine negative Bewertung auf einen negativeren Ton hinweist.
Schritt 4: Automatisches Kennzeichnen mit Named Entity Recognition (NER)
Um unsere Tagebucheinträge noch nützlicher zu machen, identifizieren und kennzeichnen wir automatisch wichtige Entitäten wie Personen, Orte und Organisationen.
Was wir tun
Wir verwenden wink-nlp, um Named Entity Recognition auf unserem transkribierten Text durchzuführen.
Implementierung
Zunächst müssen wir das wink-nlp-Modell laden. Dann können wir den Text verarbeiten, um Entitäten zu finden.
// index.js (fortgesetzt)
const winkNLP = require('wink-nlp');
const model = require('wink-eng-lite-web-model');
const nlp = winkNLP(model);
// ... (vorheriger Code)
app.post('/journal', upload.single('audio'), async (req, res) => {
// ... (Datei-Upload und Transkriptionslogik)
try {
// ... (Transkriptions- und Sentiment-Code)
const journalText = transcription.text;
const sentimentResult = sentiment.analyze(journalText);
const doc = nlp.readDoc(journalText);
const entities = doc.entities().out();
// ... (Aufräumen)
res.json({
transcription: journalText,
sentiment: sentimentResult,
tags: entities
});
} catch (error) {
// ... (Fehlerbehandlung)
}
});
Wie es funktioniert
- Wir laden das vortrainierte englische Sprachmodell für
wink-nlp. nlp.readDoc(journalText)verarbeitet den Text und erstellt ein Dokumentobjekt.doc.entities().out()extrahiert alle erkannten Entitäten und gibt sie als Array zurück. Jede Entität hat einenvalue(den Text) und einentype(z.B.PERSON,LOCATION,DATE).
Alles zusammenfügen
Hier ist der vollständige Code für unsere index.js-Datei, der alle Schritte integriert:
// index.js
require('dotenv').config();
const express = require('express');
const multer = require('multer');
const fs = require('fs');
const { OpenAI } = require('openai');
const Sentiment = require('sentiment');
const winkNLP = require('wink-nlp');
const model = require('wink-eng-lite-web-model');
const app = express();
const port = 3000;
// KI-Tools initialisieren
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const sentiment = new Sentiment();
const nlp = winkNLP(model);
// Multer für Dateiuploads einrichten
const upload = multer({ dest: 'uploads/' });
app.post('/journal', upload.single('audio'), async (req, res) => {
if (!req.file) {
return res.status(400).send('No audio file uploaded.');
}
try {
// 1. Audio mit Whisper transkribieren
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream(req.file.path),
model: 'whisper-1',
});
const journalText = transcription.text;
// 2. Sentiment analysieren
const sentimentResult = sentiment.analyze(journalText);
// 3. Entitäten extrahieren (Tags)
const doc = nlp.readDoc(journalText);
const entities = doc.entities().out();
const tags = entities.map(entity => ({ value: entity.value, type: entity.type }));
res.json({
transcription: journalText,
sentiment: {
score: sentimentResult.score,
comparative: sentimentResult.comparative,
},
tags: tags,
});
} catch (error) {
console.error('Error processing journal entry:', error);
res.status(500).send('Failed to process journal entry.');
} finally {
// Aufräumen der hochgeladenen Datei
fs.unlinkSync(req.file.path);
}
});
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
Nun gibt ein einzelner API-Aufruf mit einer Audio-Datei ein reichhaltiges JSON-Objekt mit der Transkription, Stimmungsanalyse und relevanten Tags zurück!
Best Practices für die Sicherheit
- API-Schlüsselverwaltung: Verwenden Sie immer Umgebungsvariablen für sensible Informationen wie Ihren OpenAI API-Schlüssel. Schreiben Sie ihn niemals fest in Ihren Quellcode.
- Eingabevalidierung: Während Multer den Datei-Upload verarbeitet, stellen Sie sicher, dass Sie Überprüfungen auf Dateigröße und -typ haben, um Missbrauch zu verhindern.
- Fehlerbehandlung: Implementieren Sie eine robuste Fehlerbehandlung, um Probleme mit API-Aufrufen oder Dateiverarbeitung elegant zu bewältigen.
Fazit
Wir haben erfolgreich einen leistungsstarken Sprache-zu-Tagebuch-Dienst erstellt, der die modernsten KI-Fähigkeiten nutzt. Dieses Projekt demonstriert, wie Sie verschiedene KI-Modelle verketten können, um eine wirklich wertvolle Anwendung zu erstellen. Von hier aus könnten Sie dieses Projekt erweitern, indem Sie eine Datenbank hinzufügen, um die Tagebucheinträge zu speichern, eine Benutzeroberfläche erstellen oder sogar Visualisierungen Ihrer Stimmung im Zeitverlauf entwickeln.
Die Welt der KI ist voller aufregender Möglichkeiten, und hoffentlich inspiriert Sie dieses Projekt, Ihre eigenen intelligenten Anwendungen zu bauen.
Ressourcen
- OpenAI API-Dokumentation
- Offizielle Express.js-Website
- Multer auf npm
- sentiment auf npm
- wink-nlp-Dokumentation
Kurzübersicht
| Aspekt | Wichtige Informationen |
|---|---|
| Thema | Entwicklung |
| Relevanz | Patientenaufklärung und -sensibilisierung |
| Maßnahme | Besprechen Sie dies mit Ihrem Arzt |
| Häufigkeit | Nach Empfehlung Ihres Behandlungsteams |
| Evidenz | Basierend auf aktuellen klinischen Richtlinien |
Häufig gestellte Fragen
F: Woher weiß ich, ob dies auf mich zutrifft? A: Besprechen Sie Ihre persönliche und familiäre Krankengeschichte mit Ihrem Arzt, um Ihre individuellen Risikofaktoren zu bewerten und geeignete nächste Schritte zu bestimmen.
F: Was sollte ich meinen Arzt fragen? A: Gute Fragen sind unter anderem: „Was bedeuten meine Ergebnisse?", „Was sind meine Optionen?", „Welche Änderungen des Lebensstils würden helfen?" und „Wann sollte ich einen Folgetermin vereinbaren?"
F: Gibt es Änderungen des Lebensstils, die helfen können? A: Die meisten Erkrankungen profitieren von grundlegenden Maßnahmen: ausgewogene Ernährung, regelmäßige körperliche Aktivität (über 150 Minuten/Woche), качественный Schlaf (7-9 Stunden), Stressbewältigung und Vermeidung von Tabak.
Haftungsausschluss
Dieser Artikel dient nur zu Bildungszwecken und stellt keine medizinische Beratung dar. Konsultieren Sie immer einen qualifizierten Arzt, bevor Sie Entscheidungen über Ihre Gesundheit, Behandlung oder Pflege treffen. Individuelle Umstände variieren, und was für eine Person angemessen ist, ist möglicherweise nicht für eine andere Person geeignet.
Wenn Sie einen medizinischen Notfall erleben, rufen Sie sofort 911 (oder Ihre lokale Notrufnummer) an.