using Kreuzberg; class WordCountPostProcessor : IPostProcessor { public string Name => "word-count"; public int Priority => 10; public ExtractionResult Process(ExtractionResult result) { var wordCount = result.Content.Split( new[] { ' ', '\n', '\r', '\t' }, StringSplitOptions.RemoveEmptyEntries ).Length; if (result.Metadata.Additional == null) { result.Metadata.Additional = new Dictionary(); } result.Metadata.Additional["word_count"] = System.Text.Json.Nodes.JsonValue.Create(wordCount); return result; } } class SentimentPostProcessor : IPostProcessor { public string Name => "sentiment-analyzer"; public int Priority => 5; public ExtractionResult Process(ExtractionResult result) { var sentiment = AnalyzeSentiment(result.Content); if (result.Metadata.Additional == null) { result.Metadata.Additional = new Dictionary(); } result.Metadata.Additional["sentiment"] = System.Text.Json.Nodes.JsonValue.Create(sentiment); return result; } private string AnalyzeSentiment(string text) { return text.Length > 0 ? "neutral" : "unknown"; } } class Program { static void Main() { var wordCountProcessor = new WordCountPostProcessor(); var sentimentProcessor = new SentimentPostProcessor(); KreuzbergLib.RegisterPostProcessor(wordCountProcessor); KreuzbergLib.RegisterPostProcessor(sentimentProcessor); try { var result = KreuzbergLib.ExtractFileSync("document.pdf"); if (result.Metadata.Additional != null) { if (result.Metadata.Additional.TryGetValue("word_count", out var wordCount)) { Console.WriteLine($"Word count: {wordCount}"); } if (result.Metadata.Additional.TryGetValue("sentiment", out var sentiment)) { Console.WriteLine($"Sentiment: {sentiment}"); } } } catch (KreuzbergException ex) { Console.WriteLine($"Error: {ex.Message}"); } } }