from typing import List import argparse import re from src.utils.wsd import read_from_raganato, expand_raganato_path def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() parser.add_argument( "--raganato-paths", nargs="+", ) parser.add_argument("--output-path") return parser.parse_args() def compute_vocabulary(raganato_paths: List[str], output_path: str): vocabulary_store = set() mws_splitter = re.compile("[_ ]") for rag_path in raganato_paths: for _, _, wsd_sentence in read_from_raganato(*expand_raganato_path(rag_path)): for wsd_instance in wsd_sentence: if wsd_instance.labels is None: continue word_parts = mws_splitter.split(wsd_instance.annotated_token.text) vocabulary_store.update(word_parts) if len(word_parts) > 1: vocabulary_store.add("_".join(word_parts)) with open(output_path, "w") as f: for word in vocabulary_store: if len(word.strip()) > 0: f.write(f"{word}\n") def main(): args = parse_args() compute_vocabulary(args.raganato_paths, args.output_path) if __name__ == "__main__": main()