SemanticSlicer adalah pustaka C# untuk memotong data teks menjadi potongan-potongan kecil sambil mencoba memecah teks pada batas-batas yang bermakna.
GitHub: https://github.com/drittich/SemanticSlicer
Pustaka ini menerima teks dan akan memecahnya menjadi bagian-bagian yang lebih kecil, biasanya berguna saat membuat penyematan LLM AI.
Nama paketnya adalah drittich.SemanticSlicer
. Anda dapat menginstalnya dari Nuget melalui baris perintah:
dotnet add package drittich.SemanticSlicer
atau dari Konsol Manajer Paket:
NuGetInstall-Package drittich.SemanticSlicer
Dokumen teks sederhana:
// 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 ) ;
Dokumen penurunan harga:
// 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 ) ;
dokumen HTML:
var options = new SlicerOptions { Separators = Separators . Html } ;
var slicer = new Slicer ( options ) ;
var text = File . ReadAllText ( " MyDocument.html " ) ;
var documentChunks = slicer . GetDocumentChunks ( text ) ;
Menghapus tag HTML:
Untuk konten apa pun, Anda dapat memilih untuk menghapus tag HTML dari potongannya untuk meminimalkan jumlah token. Teks bagian dalam dipertahankan, dan jika ada tag <Title>
judul akan ditambahkan di awal hasil:
// 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 ) ;
Pemisah khusus:
Anda dapat memasukkan daftar pemisah Anda sendiri jika diinginkan, misalnya jika Anda ingin menambahkan dukungan untuk dokumen lain.
Potongan akan dikembalikan sesuai urutan ditemukannya dalam dokumen, dan berisi properti Indeks yang dapat Anda gunakan untuk mengembalikannya ke urutan jika diperlukan.
Anda dapat meneruskan metadata tambahan apa pun yang Anda inginkan sebagai kamus, dan metadata tersebut akan dikembalikan bersama setiap potongan dokumen, sehingga mudah untuk dipertahankan. Anda mungkin menggunakan metadata untuk menyimpan id dokumen, judul, atau tanggal terakhir diubah.
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.
Jika mau, Anda dapat memberikan header untuk dimasukkan di bagian atas setiap potongan. Contoh kasus penggunaan adalah menyertakan judul atau tag dokumen sebagai bagian dari konten potongan untuk membantu menjaga konteks.
var slicer = new Slicer ( ) ;
var fileName = " MyDocument.txt " ;
var text = File . ReadAllText ( fileName ) ;
var header = $" FileName: { fileName } " ;
var documentChunks = slicer . GetDocumentChunks ( text , null , header ) ;
Proyek ini dilisensikan di bawah Lisensi MIT - lihat file LISENSI untuk detailnya.
Jika Anda memiliki pertanyaan atau masukan, silakan buka terbitan di repositori ini.