SemanticSlicer ist eine C#-Bibliothek zum Zerteilen von Textdaten in kleinere Teile und gleichzeitig zum Versuch, den Text an sinnvollen Grenzen aufzuteilen.
GitHub: https://github.com/drittich/SemanticSlicer
Diese Bibliothek akzeptiert Text und zerlegt ihn in kleinere Teile, was typischerweise beim Erstellen von LLM-KI-Einbettungen nützlich ist.
Der Paketname ist drittich.SemanticSlicer
. Sie können dies von Nuget aus über die Befehlszeile installieren:
dotnet add package drittich.SemanticSlicer
oder über die Paket-Manager-Konsole:
NuGetInstall-Package drittich.SemanticSlicer
Einfaches Textdokument:
// The default options uses text separators, a max chunk size of 1,000, and
// cl100k_base encoding to count tokens.
var slicer = new Slicer ( ) ;
var text = File . ReadAllText ( " MyDocument.txt " ) ;
var documentChunks = slicer . GetDocumentChunks ( text ) ;
Markdown-Dokument:
// Let's use Markdown separators and reduce the chunk size
var options = new SlicerOptions { MaxChunkTokenCount = 600 , Separators = Separators . Markdown } ;
var slicer = new Slicer ( options ) ;
var text = File . ReadAllText ( " MyDocument.md " ) ;
var documentChunks = slicer . GetDocumentChunks ( text ) ;
HTML-Dokument:
var options = new SlicerOptions { Separators = Separators . Html } ;
var slicer = new Slicer ( options ) ;
var text = File . ReadAllText ( " MyDocument.html " ) ;
var documentChunks = slicer . GetDocumentChunks ( text ) ;
HTML-Tags entfernen:
Für jeden Inhalt können Sie HTML-Tags aus den Blöcken entfernen, um die Anzahl der Token zu minimieren. Der innere Text bleibt erhalten und wenn ein <Title>
-Tag vorhanden ist, wird der Titel dem Ergebnis vorangestellt:
// Let's remove the HTML tags as they just consume a lot of tokens without adding much value
var options = new SlicerOptions { Separators = Separators . Html , StripHtml = true } ;
var slicer = new Slicer ( options ) ;
var text = File . ReadAllText ( " MyDocument.html " ) ;
var documentChunks = slicer . GetDocumentChunks ( text ) ;
Benutzerdefinierte Trennzeichen:
Sie können bei Bedarf Ihre eigene Liste von Trennzeichen übergeben, z. B. wenn Sie Unterstützung für andere Dokumente hinzufügen möchten.
Chunks werden in der Reihenfolge zurückgegeben, in der sie im Dokument gefunden wurden, und enthalten eine Indexeigenschaft, mit der Sie sie bei Bedarf wieder in die richtige Reihenfolge bringen können.
Sie können beliebige zusätzliche Metadaten als Wörterbuch übergeben. Diese werden mit jedem Dokumentblock zurückgegeben, sodass sie einfach beibehalten werden können. Sie können die Metadaten verwenden, um die Dokument-ID, den Titel oder das Datum der letzten Änderung zu speichern.
var slicer = new Slicer ( ) ;
var text = File . ReadAllText ( " MyDocument.txt " ) ;
var metadata = new Dictionary < string , object ? > ( ) ;
metadata [ " Id " ] = 123 ;
metadata [ " FileName " ] = " MyDocument.txt " ;
var documentChunks = slicer . GetDocumentChunks ( text , metadata ) ;
// All chunks returned will have a Metadata property with the data you passed in.
Wenn Sie möchten, können Sie einen Header übergeben, der oben in jedem Block eingefügt wird. Beispielhafte Anwendungsfälle sind die Einbindung des Dokumenttitels oder der Tags als Teil des Blockinhalts, um den Kontext beizubehalten.
var slicer = new Slicer ( ) ;
var fileName = " MyDocument.txt " ;
var text = File . ReadAllText ( fileName ) ;
var header = $" FileName: { fileName } " ;
var documentChunks = slicer . GetDocumentChunks ( text , null , header ) ;
Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der LIZENZ-Datei.
Wenn Sie Fragen oder Feedback haben, öffnen Sie bitte ein Problem in diesem Repository.