SemanticSlicer
v1.4.0
SemanticSlicer 是一个 C# 库,用于将文本数据分割成更小的片段,同时尝试在有意义的边界上打破文本。
GitHub:https://github.com/drittich/SemanticSlicer
该库接受文本并将其分解为更小的块,通常在创建 LLM AI 嵌入时有用。
包名称是drittich.SemanticSlicer
。您可以通过命令行从 Nuget 安装它:
dotnet add package drittich.SemanticSlicer
或从包管理器控制台:
NuGetInstall-Package drittich.SemanticSlicer
简单的文本文档:
// 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 ) ;
降价文档:
// 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 文档:
var options = new SlicerOptions { Separators = Separators . Html } ;
var slicer = new Slicer ( options ) ;
var text = File . ReadAllText ( " MyDocument.html " ) ;
var documentChunks = slicer . GetDocumentChunks ( text ) ;
删除 HTML 标签:
对于任何内容,您都可以选择从块中删除 HTML 标签,以最大限度地减少标记数量。内部文本被保留,如果有<Title>
标签,标题将被添加到结果之前:
// 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 ) ;
自定义分隔符:
如果您愿意,您可以传入自己的分隔符列表,例如,如果您希望添加对其他文档的支持。
块将按照它们在文档中找到的顺序返回,并包含一个 Index 属性,您可以在必要时使用它来将它们按顺序放回原处。
您可以将任何您想要的附加元数据作为字典传递,它将随每个文档块返回,因此很容易保留。您可以使用元数据来存储文档 ID、标题或上次修改日期。
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.
如果您愿意,可以传递一个标头以包含在每个块的顶部。示例用例包括将文档标题或标签作为块内容的一部分,以帮助维护上下文。
var slicer = new Slicer ( ) ;
var fileName = " MyDocument.txt " ;
var text = File . ReadAllText ( fileName ) ;
var header = $" FileName: { fileName } " ;
var documentChunks = slicer . GetDocumentChunks ( text , null , header ) ;
该项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅许可证文件。
如果您有任何问题或反馈,请在此存储库上提出问题。