SemanticSlicer هي مكتبة C# لتقسيم البيانات النصية إلى أجزاء أصغر أثناء محاولة تقسيم النص إلى حدود ذات معنى.
جيثب: 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 ) ;
الفواصل المخصصة:
يمكنك تمرير قائمتك الخاصة بالفواصل إذا كنت ترغب في ذلك، على سبيل المثال، إذا كنت ترغب في إضافة دعم لمستندات أخرى.
سيتم إرجاع القطع بالترتيب الذي وجدت به في المستند، وتحتوي على خاصية الفهرس التي يمكنك استخدامها لإعادة ترتيبها مرة أخرى إذا لزم الأمر.
يمكنك تمرير أي بيانات تعريف إضافية تريدها كقاموس، وسيتم إرجاعها مع كل مجموعة من المستندات، لذلك من السهل الاستمرار فيها. يمكنك استخدام البيانات التعريفية لتخزين معرف المستند أو العنوان أو تاريخ آخر تعديل.
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 - راجع ملف الترخيص للحصول على التفاصيل.
إذا كان لديك أي أسئلة أو تعليقات، يرجى فتح مشكلة في هذا المستودع.