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 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
질문이나 피드백이 있는 경우 이 저장소에서 문제를 열어주세요.