| """ |
| Script to preprocess, clean, deduplicate, and format raw text datasets. |
| """ |
|
|
| import argparse |
| import os |
| import sys |
|
|
| sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) |
|
|
| from slm.dataset.cleaner import TextCleaner |
| from slm.dataset.readers import DatasetReader |
| from slm.utils.logger import get_logger |
|
|
| logger = get_logger("slm.scripts.preprocess") |
|
|
|
|
| def main() -> None: |
| parser = argparse.ArgumentParser(description="Preprocess and clean raw text files.") |
| parser.add_argument("--input", type=str, required=True, help="Input file or directory path") |
| parser.add_argument("--output", type=str, required=True, help="Output destination file path") |
| args = parser.parse_args() |
|
|
| logger.info(f"Loading raw data from {args.input}...") |
| if os.path.isdir(args.input): |
| docs = DatasetReader.load_directory(args.input) |
| else: |
| docs = DatasetReader.load_file(args.input) |
|
|
| logger.info(f"Loaded {len(docs)} raw documents. Cleaning and deduplicating...") |
| cleaner = TextCleaner() |
| cleaned_docs = [cleaner.clean_text(d) for d in docs] |
| deduped_docs = cleaner.deduplicate(cleaned_docs) |
|
|
| os.makedirs(os.path.dirname(os.path.abspath(args.output)), exist_ok=True) |
| with open(args.output, "w", encoding="utf-8") as f: |
| for doc in deduped_docs: |
| f.write(doc + "\n") |
|
|
| logger.info(f"Preprocessed corpus saved to {args.output} ({len(deduped_docs)} unique clean documents).") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|