SemanticSlicer เป็นไลบรารี C# สำหรับแบ่งข้อมูลข้อความออกเป็นส่วนเล็กๆ ในขณะที่พยายามแบ่งข้อความตามขอบเขตที่มีความหมาย
GitHub: https://github.com/drittich/SemanticSlicer
ไลบรารีนี้ยอมรับข้อความและจะแบ่งออกเป็นส่วนเล็กๆ ซึ่งโดยทั่วไปจะมีประโยชน์สำหรับการสร้างการฝัง LLM AI
ชื่อแพ็กเกจคือ drittich.SemanticSlicer
คุณสามารถติดตั้งสิ่งนี้จาก Nuget ผ่านทางบรรทัดคำสั่ง:
dotnet add package drittich.SemanticSlicer
หรือจาก Package Manager Console:
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 ที่คุณสามารถใช้เพื่อจัดเรียงกลับตามลำดับหากจำเป็น
คุณสามารถส่งเมตาดาต้าเพิ่มเติมที่คุณต้องการในรูปแบบพจนานุกรมได้ และจะถูกส่งกลับมาพร้อมกับเอกสารแต่ละชิ้น ดังนั้นจึงง่ายต่อการคงอยู่ คุณอาจใช้ข้อมูลเมตาเพื่อจัดเก็บรหัสเอกสาร ชื่อ หรือวันที่แก้ไขล่าสุด
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 - ดูรายละเอียดในไฟล์ใบอนุญาต
หากคุณมีคำถามหรือข้อเสนอแนะ โปรดเปิดปัญหาในพื้นที่เก็บข้อมูลนี้