|
|
from tokenizers import Tokenizer |
|
|
from tokenizers.models import WordPiece |
|
|
from tokenizers.pre_tokenizers import Whitespace |
|
|
from typing import List |
|
|
|
|
|
class JapaneseTokenizer: |
|
|
def __init__(self, tokenizer_dir: str): |
|
|
""" |
|
|
初始化 JapaneseTokenizer。 |
|
|
|
|
|
:param tokenizer_dir: 包含 vocab.txt 的目录路径。 |
|
|
""" |
|
|
|
|
|
self.tokenizer = Tokenizer(WordPiece.from_file(f"{tokenizer_dir}/vocab.txt", unk_token="[UNK]")) |
|
|
|
|
|
|
|
|
self.tokenizer.pre_tokenizer = Whitespace() |
|
|
|
|
|
def tokenize(self, text: str) -> List[str]: |
|
|
""" |
|
|
将输入文本分词为 token 列表。 |
|
|
|
|
|
:param text: 输入文本。 |
|
|
:return: 分词后的 token 列表。 |
|
|
""" |
|
|
output = self.tokenizer.encode(text) |
|
|
return output.tokens |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
tokenizer = JapaneseTokenizer("./cl-tohoku/bert-base-japanese-v3") |
|
|
|
|
|
text = "日本語のテキストをトークン化します。" |
|
|
tokens = tokenizer.tokenize(text) |
|
|
print("Tokens:", tokens) |