(cfg: DictConfig)
| 67 | |
| 68 | @hydra.main(config_name=None, version_base=None) |
| 69 | def main_hydra(cfg: DictConfig): |
| 70 | def to_plain_list(cfg_item): |
| 71 | if isinstance(cfg_item, ListConfig): |
| 72 | return OmegaConf.to_container(cfg_item, resolve=True) |
| 73 | elif isinstance(cfg_item, DictConfig): |
| 74 | return {k: to_plain_list(v) for k, v in cfg_item.items()} |
| 75 | else: |
| 76 | return cfg_item |
| 77 | kwargs = to_plain_list(cfg) |
| 78 | scp_file = kwargs["scp_file"] |
| 79 | transcript_file = kwargs["transcript_file"] |
| 80 | max_workers = kwargs.get("max_workers", os.cpu_count()) |
| 81 | jsonl_file = kwargs["jsonl_file"] |
| 82 | |
| 83 | with open(scp_file, "r") as f1, open(transcript_file, "r") as f2: |
| 84 | scp_lines = f1.readlines() |
| 85 | transcript_lines = f2.readlines() |
| 86 | |
| 87 | if len(scp_lines) != len(transcript_lines): |
| 88 | print( |
| 89 | f"Warning: Line count mismatch - scp: {len(scp_lines)}, transcript: {len(transcript_lines)}" |
| 90 | ) |
| 91 | |
| 92 | tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B") |
| 93 | processor = LineProcessor(tokenizer) |
| 94 | |
| 95 | data_pairs = list(zip(scp_lines, transcript_lines)) |
| 96 | |
| 97 | processed_count = 0 |
| 98 | failed_count = 0 |
| 99 | error_messages = [] |
| 100 | |
| 101 | with tqdm(total=len(data_pairs), desc="Processing") as pbar: |
| 102 | with ThreadPoolExecutor(max_workers=max_workers) as executor: |
| 103 | with open(jsonl_file, "w") as f_out: |
| 104 | futures = { |
| 105 | executor.submit(processor.process_line, pair): i |
| 106 | for i, pair in enumerate(data_pairs) |
| 107 | } |
| 108 | |
| 109 | for future in as_completed(futures): |
| 110 | result = future.result() |
| 111 | |
| 112 | if result and "success" in result: |
| 113 | with processor.lock: |
| 114 | json.dump(result["success"], f_out, ensure_ascii=False) |
| 115 | f_out.write("\n") |
| 116 | processed_count += 1 |
| 117 | elif result and "error" in result: |
| 118 | failed_count += 1 |
| 119 | error_messages.append(result["error"]) |
| 120 | |
| 121 | pbar.update(1) |
| 122 | pbar.set_postfix( |
| 123 | {"processed": processed_count, "failed": failed_count} |
| 124 | ) |
| 125 | |
| 126 | print(f"\nProcessing completed:") |
no test coverage detected