SemanticSlicer est une bibliothèque C# permettant de découper des données textuelles en morceaux plus petits tout en essayant de diviser le texte selon des limites significatives.
GitHub : https://github.com/drittich/SemanticSlicer
Cette bibliothèque accepte le texte et le divisera en morceaux plus petits, généralement utiles lors de la création d'intégrations LLM AI.
Le nom du package est drittich.SemanticSlicer
. Vous pouvez l'installer depuis Nuget via la ligne de commande :
dotnet add package drittich.SemanticSlicer
ou depuis la console du gestionnaire de packages :
NuGetInstall-Package drittich.SemanticSlicer
Document texte simple :
// 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 ) ;
Document de démarque :
// 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 ) ;
Document HTML :
var options = new SlicerOptions { Separators = Separators . Html } ;
var slicer = new Slicer ( options ) ;
var text = File . ReadAllText ( " MyDocument.html " ) ;
var documentChunks = slicer . GetDocumentChunks ( text ) ;
Suppression des balises HTML :
Pour tout contenu, vous pouvez choisir de supprimer les balises HTML des morceaux afin de minimiser le nombre de jetons. Le texte intérieur est conservé, et s'il y a une balise <Title>
le titre sera ajouté au résultat :
// 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 ) ;
Séparateurs personnalisés :
Vous pouvez transmettre votre propre liste de séparateurs si vous le souhaitez, par exemple si vous souhaitez ajouter un support pour d'autres documents.
Les morceaux seront renvoyés dans l'ordre dans lequel ils ont été trouvés dans le document et contiendront une propriété Index que vous pourrez utiliser pour les remettre dans l'ordre si nécessaire.
Vous pouvez transmettre toutes les métadonnées supplémentaires que vous souhaitez sous forme de dictionnaire, et elles seront renvoyées avec chaque morceau de document, il est donc facile de les conserver. Vous pouvez utiliser les métadonnées pour stocker l'identifiant du document, le titre ou la date de la dernière modification.
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.
Si vous le souhaitez, vous pouvez passer un en-tête à inclure en haut de chaque morceau. Des exemples de cas d'utilisation consistent à inclure le titre ou les balises du document dans le contenu du bloc pour aider à maintenir le contexte.
var slicer = new Slicer ( ) ;
var fileName = " MyDocument.txt " ;
var text = File . ReadAllText ( fileName ) ;
var header = $" FileName: { fileName } " ;
var documentChunks = slicer . GetDocumentChunks ( text , null , header ) ;
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
Si vous avez des questions ou des commentaires, veuillez ouvrir un problème sur ce référentiel.