// 📝 BioPhys 텍스트 파이프라인 (Tokenizer) use std::collections::HashMap; pub struct BioPhysTokenizer { vocab: HashMap, reverse_vocab: HashMap, } impl BioPhysTokenizer { pub fn new() -> Self { let mut tokenizer = Self { vocab: HashMap::new(), reverse_vocab: HashMap::new(), }; // 최소한의 기본 더미 어휘(BPE 모사) tokenizer.add_token(" ", 0); tokenizer.add_token("Hello", 1); tokenizer.add_token("Universe", 2); tokenizer.add_token("BioPhys", 3); tokenizer.add_token("Ecosystem", 4); tokenizer.add_token("Evolution", 5); tokenizer } fn add_token(&mut self, text: &str, id: u32) { self.vocab.insert(text.to_string(), id); self.reverse_vocab.insert(id, text.to_string()); } pub fn encode(&self, text: &str) -> Vec { // 실제로는 BPE나 SentencePiece 로직이 들어감 text.split_whitespace() .map(|word| *self.vocab.get(word).unwrap_or(&999)) .collect() } pub fn decode(&self, tokens: &[u32]) -> String { tokens.iter() .map(|t| self.reverse_vocab.get(t).unwrap_or(&"[UNK]".to_string()).clone()) .collect::>() .join(" ") } }