Download CheXbert/src/bert_tokenizer.py from sayehghp/vicca: direct link, hf CLI and curl.
- Browser
- Download file 3.35 kB
-
https://huggingface.co/spaces/sayehghp/vicca/resolve/main/CheXbert/src/bert_tokenizer.py
- Command line
-
hf download hf://spaces/sayehghp/vicca/CheXbert/src/bert_tokenizer.py
-
curl -L -o bert_tokenizer.py https://huggingface.co/spaces/sayehghp/vicca/resolve/main/CheXbert/src/bert_tokenizer.py
3.35 kB
| import pandas as pd | |
| from transformers import BertTokenizer, AutoTokenizer | |
| import json | |
| from tqdm import tqdm | |
| import argparse | |
| def get_impressions_from_csv(path): | |
| df = pd.read_csv(path) | |
| imp = df['Report Impression'] | |
| imp = imp.str.strip() | |
| imp = imp.replace('\n',' ', regex=True) | |
| imp = imp.replace('\s+', ' ', regex=True) | |
| imp = imp.str.strip() | |
| return imp | |
| # def tokenize(impressions, tokenizer): | |
| # new_impressions = [] | |
| # print("\nTokenizing report impressions. All reports are cut off at 512 tokens.") | |
| # for i in tqdm(range(impressions.shape[0])): | |
| # tokenized_imp = tokenizer.tokenize(impressions.iloc[i]) | |
| # if tokenized_imp: #not an empty report | |
| # res = tokenizer.encode_plus(tokenized_imp)['input_ids'] | |
| # if len(res) > 512: #length exceeds maximum size | |
| # #print("report length bigger than 512") | |
| # res = res[:511] + [tokenizer.sep_token_id] | |
| # new_impressions.append(res) | |
| # else: #an empty report | |
| # new_impressions.append([tokenizer.cls_token_id, tokenizer.sep_token_id]) | |
| # return new_impressions | |
| def tokenize(impressions, tokenizer): | |
| new_impressions = [] | |
| # print("\nTokenizing report impressions. All reports are cut off at 512 tokens.") | |
| tokenized_imp = tokenizer.tokenize(impressions) | |
| if tokenized_imp: #not an empty report | |
| res = tokenizer.encode_plus(tokenized_imp)['input_ids'] | |
| if len(res) > 512: #length exceeds maximum size | |
| #print("report length bigger than 512") | |
| res = res[:511] + [tokenizer.sep_token_id] | |
| new_impressions.append(res) | |
| else: #an empty report | |
| new_impressions.append([tokenizer.cls_token_id, tokenizer.sep_token_id]) | |
| return new_impressions | |
| def load_list(path): | |
| with open(path, 'r') as filehandle: | |
| impressions = json.load(filehandle) | |
| return impressions | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(description='Tokenize radiology report impressions and save as a list.') | |
| parser.add_argument('-d', '--data', type=str, nargs='?', required=True, | |
| help='path to csv containing reports. The reports should be \ | |
| under the \"Report Impression\" column') | |
| parser.add_argument('-o', '--output_path', type=str, nargs='?', required=True, | |
| help='path to intended output file') | |
| parser.add_argument('-s', '--sentence', type=str, nargs='?', required=True, | |
| help="A sentence containing an impression which is replaced the '\n', and '\s' with ' '") | |
| args = parser.parse_args() | |
| csv_path = args.data | |
| out_path = args.output_path | |
| impressions = args.sentence | |
| tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') | |
| # impressions = get_impressions_from_csv(csv_path) | |
| new_impressions = tokenize(impressions, tokenizer) | |
| with open(out_path, 'w') as filehandle: | |
| json.dump(new_impressions, filehandle) | |