import {
trainDecisionTreeTextClassifier,
loadDecisionTreeTextClassifier,
} from "bun_nltk";
// Training data
const trainingData = [
{ label: "urgent", text: "Critical bug in production system" },
{ label: "normal", text: "Update documentation for API" },
{ label: "urgent", text: "Database connection failing" },
{ label: "low", text: "Improve button styling" },
{ label: "normal", text: "Add unit tests for utils" },
{ label: "urgent", text: "Security vulnerability detected" },
];
// Train with custom settings
const classifier = trainDecisionTreeTextClassifier(trainingData, {
maxDepth: 6,
minSamples: 2,
maxFeatures: 3000,
});
// Classify new tickets
const ticket = "Server is not responding to requests";
const priority = classifier.classify(ticket);
console.log(`Priority: ${priority}`); // "urgent"
// Get detailed predictions
const predictions = classifier.predict(ticket);
console.log(predictions);
// Evaluate accuracy
const testData = [
{ label: "urgent", text: "Application crashed" },
{ label: "low", text: "Update footer text" },
];
const metrics = classifier.evaluate(testData);
console.log(`Accuracy: ${(metrics.accuracy * 100).toFixed(1)}%`);
// Save and load model
const modelData = classifier.toJSON();
await Bun.write("decision-tree.json", JSON.stringify(modelData));
const loaded = loadDecisionTreeTextClassifier(
await Bun.file("decision-tree.json").json()
);
console.log(loaded.classify("Fix broken link")); // Uses loaded model