SemanticSlicer es una biblioteca de C# para dividir datos de texto en partes más pequeñas mientras intenta dividir el texto en límites significativos.
GitHub: https://github.com/drittich/SemanticSlicer
Esta biblioteca acepta texto y lo dividirá en fragmentos más pequeños, lo que suele ser útil para crear incrustaciones de LLM AI.
El nombre del paquete es drittich.SemanticSlicer
. Puedes instalar esto desde Nuget a través de la línea de comando:
dotnet add package drittich.SemanticSlicer
o desde la consola del administrador de paquetes:
NuGetInstall-Package drittich.SemanticSlicer
Documento de texto 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 ) ;
Documento de rebajas:
// 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 ) ;
Documento HTML:
var options = new SlicerOptions { Separators = Separators . Html } ;
var slicer = new Slicer ( options ) ;
var text = File . ReadAllText ( " MyDocument.html " ) ;
var documentChunks = slicer . GetDocumentChunks ( text ) ;
Eliminación de etiquetas HTML:
Para cualquier contenido, puede optar por eliminar etiquetas HTML de los fragmentos para minimizar la cantidad de tokens. El texto interno se conserva y, si hay una etiqueta <Title>
, el título se antepondrá al resultado:
// 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 ) ;
Separadores personalizados:
Puede pasar su propia lista de separadores si lo desea, por ejemplo, si desea agregar soporte para otros documentos.
Los fragmentos se devolverán en el orden en que se encontraron en el documento y contienen una propiedad de índice que puede utilizar para volver a ordenarlos si es necesario.
Puede pasar cualquier metadato adicional que desee como diccionario y se devolverá con cada fragmento del documento, por lo que es fácil de conservar. Puede utilizar los metadatos para almacenar la identificación del documento, el título o la fecha de la última modificación.
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 lo desea, puede pasar un encabezado para que se incluya en la parte superior de cada fragmento. Los casos de uso de ejemplo incluyen incluir el título del documento o las etiquetas como parte del contenido del fragmento para ayudar a mantener el contexto.
var slicer = new Slicer ( ) ;
var fileName = " MyDocument.txt " ;
var text = File . ReadAllText ( fileName ) ;
var header = $" FileName: { fileName } " ;
var documentChunks = slicer . GetDocumentChunks ( text , null , header ) ;
Este proyecto tiene la licencia MIT; consulte el archivo de LICENCIA para obtener más detalles.
Si tiene alguna pregunta o comentario, abra un problema en este repositorio.