Python を使ったテキストトークン化

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、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を使って基本的なテキストトークナイゼーションシステムを実装する
  • 異なるトークンタイプとそれに対応する正規表現を定義することで、トークン化プロセスをカスタマイズする
  • 様々な入力テキストを使ってトークン化システムをテストおよびデバッグする

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/AdvancedTopicsGroup -.-> python/generators("Generators") python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/lists -.-> lab-302774{{"Python を使ったテキストトークン化"}} python/function_definition -.-> lab-302774{{"Python を使ったテキストトークン化"}} python/importing_modules -.-> lab-302774{{"Python を使ったテキストトークン化"}} python/classes_objects -.-> lab-302774{{"Python を使ったテキストトークン化"}} python/generators -.-> lab-302774{{"Python を使ったテキストトークン化"}} python/regular_expressions -.-> lab-302774{{"Python を使ったテキストトークン化"}} python/data_collections -.-> lab-302774{{"Python を使ったテキストトークン化"}} end

トークンクラスの定義

このステップでは、テキストトークナイゼーションプロセスにおけるトークンを表す Token クラスをどのように定義するかを学びます。

  1. テキストエディタで /home/labex/project/texttokenizer.py ファイルを開きます。

  2. ファイルの先頭で、collections モジュールから namedtuple 関数をインポートします。

    from collections import namedtuple
  3. Token クラスを、typevalue の2つの属性を持つ名前付きタプルとして定義します。

    Token = namedtuple("Token", ["type", "value"])

generate_tokens 関数の実装

このステップでは、入力テキストを受け取り、トークンのストリームを生成する generate_tokens 関数を実装します。

  1. 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)
  2. generate_tokens 関数はまず、トークンタイプをそれぞれに対応する正規表現にマッピングする辞書 token_specification を定義します。

  3. 次に、| 演算子を使ってすべての正規表現を1つの大きな正規表現に結合します。

  4. そして、この関数は re.finditer 関数を使って入力テキスト内のすべての一致箇所を見つけ、各一致箇所に対してトークンタイプと値を持つ Token オブジェクトを生成します。

トークン化のテスト

このステップでは、サンプルテキストを解析することで generate_tokens 関数をテストします。

  1. texttokenizer.py ファイルの末尾に、以下のコードを追加します。

    if __name__ == "__main__":
        text = "total = 1 + 2 * 3"
        tokens = list(generate_tokens(text))
        print(tokens)
  2. texttokenizer.py ファイルを保存します。

  3. /home/labex/project ディレクトリから texttokenizer.py スクリプトを実行します。

    python texttokenizer.py
  4. 出力は、入力テキスト内のトークンを表す 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でさらに多くの実験を行って練習してください。