anuj2054 commited on
Commit
e6d6d14
·
verified ·
1 Parent(s): 8d80d34

Create tokenizer.py

Browse files
Files changed (1) hide show
  1. tokenizer.py +46 -0
tokenizer.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tokenizer.py
2
+
3
+ from transformers import PreTrainedTokenizer
4
+ from itertools import product
5
+ import json
6
+ import os
7
+
8
+ class CodonTokenizer(PreTrainedTokenizer):
9
+ def __init__(self, **kwargs):
10
+ bases = ['A', 'T', 'G', 'C']
11
+ codons = [''.join(p) for p in product(bases, repeat=3)]
12
+ special_tokens = ['[PAD]', '[BOS]', '[EOS]']
13
+ self.vocab_list = special_tokens + codons
14
+
15
+ self.codon2id = {token: idx for idx, token in enumerate(self.vocab_list)}
16
+ self.id2codon = {idx: token for token, idx in self.codon2id.items()}
17
+
18
+ kwargs['bos_token'] = '[BOS]'
19
+ kwargs['eos_token'] = '[EOS]'
20
+ kwargs['pad_token'] = '[PAD]'
21
+ super().__init__(**kwargs)
22
+
23
+ def _tokenize(self, text):
24
+ return [text[i:i+3] for i in range(0, len(text), 3)]
25
+
26
+ def _convert_token_to_id(self, token):
27
+ return self.codon2id.get(token, self.codon2id['[PAD]'])
28
+
29
+ def _convert_id_to_token(self, idx):
30
+ return self.id2codon.get(idx, '[PAD]')
31
+
32
+ def convert_tokens_to_string(self, tokens):
33
+ return ''.join(tokens)
34
+
35
+ def get_vocab(self):
36
+ return self.codon2id
37
+
38
+ @property
39
+ def vocab_size(self):
40
+ return len(self.codon2id)
41
+
42
+ def save_vocabulary(self, save_directory, filename_prefix=None):
43
+ path = os.path.join(save_directory, (filename_prefix or "") + "vocab.json")
44
+ with open(path, "w") as f:
45
+ json.dump(self.codon2id, f)
46
+ return (path,)