Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
main.cpp File Reference

Demonstrates various chunking strategies and operations. More...

#include "advanced_structures.hpp"
#include "chunk.hpp"
#include "chunk_compression.hpp"
#include "chunk_strategies.hpp"
#include "chunk_windows.hpp"
#include "config.hpp"
#include "data_structures.hpp"
#include "parallel_chunk.hpp"
#include "sub_chunk_strategies.hpp"
#include "utils.hpp"
#include <iomanip>
#include <iostream>
#include <memory>
#include <numeric>
#include <vector>
+ Include dependency graph for main.cpp:

Go to the source code of this file.

Functions

void demonstrate_adaptive_conditional_subchunking ()
 Demonstrates adaptive conditional sub-chunking.
 
void demonstrate_complex_recursive_subchunking ()
 Demonstrates complex recursive sub-chunking with multiple levels.
 
void demonstrate_multi_strategy_subchunking ()
 Demonstrates hierarchical sub-chunking using multiple strategies.
 
int main (int argc, char *argv[])
 Main function demonstrating various chunking strategies.
 
template<typename T >
void print_chunks (const std::vector< std::vector< T > > &chunks)
 Helper function to print chunks.
 
template<typename T >
void print_sub_chunks (const std::vector< std::vector< std::vector< T > > > &sub_chunks, const std::string &label, int precision=2)
 Helper function to print sub-chunks with detailed formatting.
 

Detailed Description

Demonstrates various chunking strategies and operations.

This file contains examples of how to use the chunking library to process data in different ways, including integer, float, and string chunking.

Definition in file main.cpp.

Function Documentation

◆ demonstrate_adaptive_conditional_subchunking()

void demonstrate_adaptive_conditional_subchunking ( )

Demonstrates adaptive conditional sub-chunking.

This function shows how to use conditional sub-chunking with adaptive thresholds based on chunk properties.

Definition at line 132 of file main.cpp.

132 {
133 std::cout << "\n=== Adaptive Conditional Sub-chunking ===" << std::endl;
134
135 // Example data - now using 1D vector
136 std::vector<double> data = {1.0, 1.1, 1.2, 5.0, 5.1, 5.2, 2.0, 2.1, 2.2, 10.0, 10.1, 10.2};
137
138 auto variance_strategy = std::make_shared<chunk_processing::VarianceStrategy<double>>(5.0);
139 auto condition = [](const std::vector<double>& chunk) {
140 return chunk.size() > 5; // Only sub-chunk large chunks
141 };
142
143 chunk_processing::ConditionalSubChunkStrategy<double> conditional_chunker(variance_strategy,
144 condition, 2);
145 auto conditional_result = conditional_chunker.apply(data);
146
147 print_chunks(conditional_result);
148}
void print_chunks(const std::vector< std::vector< T > > &chunks)
Helper function to print chunks.
Definition main.cpp:50

References chunk_processing::ConditionalSubChunkStrategy< T >::apply(), and print_chunks().

Referenced by main().

◆ demonstrate_complex_recursive_subchunking()

void demonstrate_complex_recursive_subchunking ( )

Demonstrates complex recursive sub-chunking with multiple levels.

This function shows how to apply recursive sub-chunking strategies to data with clear patterns, using variance-based chunking at multiple levels.

Definition at line 91 of file main.cpp.

91 {
92 std::cout << "\n=== Complex Recursive Sub-chunking ===" << std::endl;
93
94 // Example data - now using 1D vector
95 std::vector<double> data = {1.0, 1.1, 1.2, 5.0, 5.1, 5.2, 2.0, 2.1, 2.2, 10.0, 10.1, 10.2};
96
97 auto variance_strategy = std::make_shared<chunk_processing::VarianceStrategy<double>>(3.0);
98 chunk_processing::RecursiveSubChunkStrategy<double> recursive_chunker(variance_strategy, 3, 2);
99 auto recursive_result = recursive_chunker.apply(data);
100
101 print_chunks(recursive_result);
102}

References print_chunks().

Referenced by main().

◆ demonstrate_multi_strategy_subchunking()

void demonstrate_multi_strategy_subchunking ( )

Demonstrates hierarchical sub-chunking using multiple strategies.

This function shows how to apply different chunking strategies in a hierarchical manner, combining variance, similarity, and entropy-based approaches.

Definition at line 110 of file main.cpp.

110 {
111 std::cout << "\n=== Multi-Strategy Sub-chunking ===" << std::endl;
112
113 // Example data - now using 1D vector
114 std::vector<double> data = {1.0, 1.1, 1.2, 5.0, 5.1, 5.2, 2.0, 2.1, 2.2, 10.0, 10.1, 10.2};
115
116 std::vector<std::shared_ptr<chunk_processing::ChunkStrategy<double>>> strategies = {
117 std::make_shared<chunk_processing::VarianceStrategy<double>>(5.0),
118 std::make_shared<chunk_processing::EntropyStrategy<double>>(1.0)};
119
120 chunk_processing::HierarchicalSubChunkStrategy<double> hierarchical_chunker(strategies, 2);
121 auto hierarchical_result = hierarchical_chunker.apply(data);
122
123 print_chunks(hierarchical_result);
124}

References chunk_processing::HierarchicalSubChunkStrategy< T >::apply(), and print_chunks().

Referenced by main().

◆ main()

int main ( int  argc,
char *  argv[] 
)

Main function demonstrating various chunking strategies.

Returns
0 on successful execution

Definition at line 154 of file main.cpp.

154 {
158
159 std::cout << "\n=== Demonstrating Advanced Chunking Structures ===\n";
160
161 // Example: SemanticChunker usage
162 std::cout << "\n=== SemanticChunker Example ===" << std::endl;
163 SemanticChunker<std::string> text_chunker;
164 std::string text = "This is the first sentence. This is the second one. And here's a third!";
165 auto text_chunks = text_chunker.chunk(text);
166 std::cout << "Text chunks created: " << text_chunks.size() << "\n";
167
168 // Custom NLP model example
169 class CustomNLPModel {
170 public:
171 double calculateSimilarity(const std::string& s1, const std::string& s2) {
172 // Simple example: compare lengths as a similarity metric
173 return std::abs(1.0 - static_cast<double>(std::abs(static_cast<int>(s1.length()) -
174 static_cast<int>(s2.length()))) /
175 std::max(s1.length(), s2.length()));
176 }
177 };
178
180 auto custom_chunks = custom_chunker.chunk(text);
181 std::cout << "Custom model chunks created: " << custom_chunks.size() << "\n\n";
182
183 return 0;
184}
Template class for semantic-based content chunking.
std::vector< ContentType > chunk(const ContentType &content)
Chunk content based on semantic boundaries.
void demonstrate_multi_strategy_subchunking()
Demonstrates hierarchical sub-chunking using multiple strategies.
Definition main.cpp:110
void demonstrate_adaptive_conditional_subchunking()
Demonstrates adaptive conditional sub-chunking.
Definition main.cpp:132
void demonstrate_complex_recursive_subchunking()
Demonstrates complex recursive sub-chunking with multiple levels.
Definition main.cpp:91

References advanced_structures::SemanticChunker< ContentType, ModelType >::chunk(), demonstrate_adaptive_conditional_subchunking(), demonstrate_complex_recursive_subchunking(), and demonstrate_multi_strategy_subchunking().

◆ print_chunks()

template<typename T >
void print_chunks ( const std::vector< std::vector< T > > &  chunks)

Helper function to print chunks.

Template Parameters
TThe type of elements in the chunks
Parameters
chunksThe vector of chunks to print

Definition at line 50 of file main.cpp.

50 {
51 std::cout << "Chunks: [" << std::endl;
52 for (size_t i = 0; i < chunks.size(); ++i) {
53 std::cout << " " << i << ": [";
54 for (const auto& value : chunks[i]) {
55 std::cout << std::fixed << std::setprecision(2) << value << " ";
56 }
57 std::cout << "]" << std::endl;
58 }
59 std::cout << "]" << std::endl;
60}

Referenced by demonstrate_adaptive_conditional_subchunking(), demonstrate_complex_recursive_subchunking(), and demonstrate_multi_strategy_subchunking().

◆ print_sub_chunks()

template<typename T >
void print_sub_chunks ( const std::vector< std::vector< std::vector< T > > > &  sub_chunks,
const std::string &  label,
int  precision = 2 
)

Helper function to print sub-chunks with detailed formatting.

Template Parameters
TThe type of elements in the chunks
Parameters
sub_chunksThe 3D vector containing the sub-chunks to print
labelThe label to display for this set of sub-chunks
precisionThe number of decimal places to show for floating-point numbers

Definition at line 70 of file main.cpp.

71 {
72 std::cout << "\n" << label << ":\n";
73 for (size_t i = 0; i < sub_chunks.size(); ++i) {
74 std::cout << "Level " << i + 1 << ":\n";
75 for (size_t j = 0; j < sub_chunks[i].size(); ++j) {
76 std::cout << " Sub-chunk " << j + 1 << ": ";
77 for (const auto& val : sub_chunks[i][j]) {
78 std::cout << std::fixed << std::setprecision(precision) << val << " ";
79 }
80 std::cout << "\n";
81 }
82 }
83}