はじめに
このプロジェクトでは、Python を使ってテキストトークナイゼーションシステムを実装する方法を学びます。テキストトークナイゼーションは自然言語処理における基本的なタスクであり、与えられたテキストをトークンと呼ばれる小さな単位に分解します。これらのトークンは、テキスト内の単語、数字、句読点、またはその他の意味のある要素を表すことができます。テキストをトークン化する能力は、コンパイラの字句解析、感情分析、テキスト分類など、多くのアプリケーションにとって不可欠です。
👀 プレビュー
## text = 'total = 1 + 2 * 3'
tokens = [Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]
🎯 タスク
このプロジェクトでは、以下を学びます。
- テキスト内のトークンを表す
Tokenクラスを定義する方法 - 入力テキストを受け取り、トークンのストリームを生成する
generate_tokens関数を実装する方法 - サンプルテキストを使ってトークン化プロセスをテストする方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- テキストトークナイゼーションの概念と、自然言語処理におけるその重要性を理解する
- Python を使って基本的なテキストトークナイゼーションシステムを実装する
- 異なるトークンタイプとそれに対応する正規表現を定義することで、トークン化プロセスをカスタマイズする
- 様々な入力テキストを使ってトークン化システムをテストおよびデバッグする
トークンクラスの定義
このステップでは、テキストトークナイゼーションプロセスにおけるトークンを表す Token クラスをどのように定義するかを学びます。
テキストエディタで
/home/labex/project/texttokenizer.pyファイルを開きます。ファイルの先頭で、
collectionsモジュールからnamedtuple関数をインポートします。from collections import namedtupleTokenクラスを、typeとvalueの 2 つの属性を持つ名前付きタプルとして定義します。Token = namedtuple("Token", ["type", "value"])
generate_tokens 関数の実装
このステップでは、入力テキストを受け取り、トークンのストリームを生成する generate_tokens 関数を実装します。
texttokenizer.pyファイルにて、generate_tokens関数を定義します。def generate_tokens(text): ## Define token types and corresponding regular expressions token_specification = { "NAME": r"[a-zA-Z_][a-zA-Z_0-9]*", "NUM": r"\d+", "ADD": r"\+", "SUB": r"-", "MUL": r"\*", "DIV": r"/", "EQ": r"=", "WS": r"\s+", } ## Combine regular expressions into one large regular expression regex = "|".join("(?P<%s>%s)" % pair for pair in token_specification.items()) scanner = re.finditer(regex, text) for m in scanner: type = m.lastgroup value = m.group() yield Token(type, value)generate_tokens関数はまず、トークンタイプをそれぞれに対応する正規表現にマッピングする辞書token_specificationを定義します。次に、
|演算子を使ってすべての正規表現を 1 つの大きな正規表現に結合します。そして、この関数は
re.finditer関数を使って入力テキスト内のすべての一致箇所を見つけ、各一致箇所に対してトークンタイプと値を持つTokenオブジェクトを生成します。
トークン化のテスト
このステップでは、サンプルテキストを解析することで generate_tokens 関数をテストします。
texttokenizer.pyファイルの末尾に、以下のコードを追加します。if __name__ == "__main__": text = "total = 1 + 2 * 3" tokens = list(generate_tokens(text)) print(tokens)texttokenizer.pyファイルを保存します。/home/labex/projectディレクトリからtexttokenizer.pyスクリプトを実行します。python texttokenizer.py出力は、入力テキスト内のトークンを表す
Tokenオブジェクトのリストでなければなりません。[Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]
おめでとうございます!あなたは正常に generate_tokens 関数を実装し、サンプルテキストでテストしました。次のステップでは、generate_tokens 関数を使ってより大きなテキストをトークン化する方法を学びます。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。






