Python
 Computer >> コンピューター >  >> プログラミング >> Python

tf.textを使ってPythonで文字列が特定のプロパティを持つかどうかを判定する方法

文字列が特定のプロパティを持つかどうかを調べるには、「wordshape」メソッドに「HAS_TITLE_CASE」「IS_NUMERIC_VALUE」「HAS_SOME_PUNCT_OR_SYMBOL」などの条件を組み合わせて使用します。

関連記事:
TensorFlowとは何か、KerasはTensorFlowと連携してニューラルネットワークをどのように構築するのか

前提知識:Keras Sequential APIとTensorFlow Text

本記事では、KerasのSequential APIを使用します。これは、各レイヤーが正確に1つの入力テンソルと1つの出力テンソルを持つ、単純なレイヤーの積み重ねからなるシーケンシャルモデルを構築する際に役立つAPIです。

少なくとも1つの畳み込み層(Convolutional Layer)を含むニューラルネットワークは「畳み込みニューラルネットワーク」と呼ばれ、このCNNを使って学習モデルを構築することができます。

TensorFlow Textには、TensorFlow 2.0で利用できるテキスト関連のクラスやオペレーションのコレクションが含まれています。TensorFlow Textは、系列モデリングの前処理にも活用できます。

以下のコードはGoogle Colaboratoryで実行しています。Google Colab(Colaboratory)はブラウザ上でPythonコードを実行できる環境で、設定は不要でGPU(グラフィックス処理ユニット)にも無料でアクセスできます。ColaboratoryはJupyter Notebookをベースに構築されています。

トークン化(Tokenization)とは

トークン化とは、文字列をトークンと呼ばれる単位に分割する処理のことです。トークンには、単語・数値・句読点などが該当します。主要なインターフェースとしては「Tokenizer」と「TokenizerWithOffsets」があり、それぞれ「tokenize」および「tokenize_with_offsets」という単一のメソッドを持っています。

トークナイザーには複数の種類があり、その多くはTokenizerクラスを拡張したTokenizerWithOffsetsを実装しています。これにより、元の文字列におけるバイトオフセットを取得できるのが特徴です。この機能により、各トークンが元の文字列のどの部分から生成されたのかを把握できます。

wordshapeメソッドによるプロパティ判定

一部の自然言語理解モデルでは、テキスト文字列が特定の性質を持っているかどうかを確認することがよくあります。「wordshape」は、入力テキスト内のさまざまな関連パターンを照合するための、正規表現ベースの便利なヘルパー関数を多数定義しています。

コード例

print("Whitespace tokenizer is being called")
tokenizer = text.WhitespaceTokenizer()
print("Tokens being generated")
tokens = tokenizer.tokenize(['Everything that is not saved will be lost.', u'Sad☹'.encode('UTF-8')])
print("Checking if it is capitalized")
f1 = text.wordshape(tokens, text.WordShape.HAS_TITLE_CASE)
print("Checking if all the letters are uppercase")
f2 = text.wordshape(tokens, text.WordShape.IS_UPPERCASE)
print("Checking if the tokens contain punctuation")
f3 = text.wordshape(tokens, text.WordShape.HAS_SOME_PUNCT_OR_SYMBOL)
print("Checking if the token is a number")
f4 = text.wordshape(tokens, text.WordShape.IS_NUMERIC_VALUE)
print("Printing the results")
print(f1.to_list())
print(f2.to_list())
print(f3.to_list())
print(f4.to_list())

コード引用元 − https://www.tensorflow.org/tutorials/tensorflow_text/intro

出力結果

Whitespace tokenizer is being called
Tokens being generated
Checking if it is capitalized
Checking if all the letters are uppercase
Checking if the tokens contain punctuation
Checking if the token is a number
Printing the results
[[True, False, False, False, False, False, False, False], [True]]
[[False, False, False, False, False, False, False, False], [False]]
[[False, False, False, False, False, False, False, True], [True]]
[[False, False, False, False, False, False, False, False], [False]]

コードの解説

  • まず「WhitespaceTokenizer」を呼び出し、トークンを生成します。
  • HAS_TITLE_CASEで先頭が大文字になっているか(タイトルケース)をチェックします。
  • IS_UPPERCASEですべての文字が大文字かどうか、HAS_SOME_PUNCT_OR_SYMBOLで句読点や記号を含むかどうかも確認します。
  • さらにIS_NUMERIC_VALUEで、トークンが数値であるかどうかを判定します。
  • これらの計算の後、ブール値(True / False)のリストとして結果が出力されます。

実行結果を見ると、最初の文では最初の単語「Everything」だけがタイトルケースであり、最後のトークン「lost.」がピリオドを含むため記号ありと判定されていることがわかります。また、絵文字を含む「Sad☹」はタイトルケースとして認識されています。

  1. PygalでPythonの折れ線グラフ(ラインプロット)を作成する方法を解説

    はじめに:データ可視化の重要性データの可視化は、データ分析において非常に重要なステップです。複雑な計算処理や内部構造を詳しく調べなくても、グラフを見るだけでデータの傾向や状態を直感的に把握できるようになります。PygalはオープンソースのPythonパッケージで、インタラクティブなグラフやSVG(Scalable Vector Graphics)形式の画像を簡単に作成できます。SVGとは、与えられたデータから動的にアニメーション付きのグラフを生成する技術のことです。SVG形式のグラフ画像は用途に応じて自由にカスタマイズでき、拡大・縮小しても画質が劣化しないため、高品質なままダウンロードできます

  2. PythonのBokehで棒グラフを可視化する方法をわかりやすく解説

    Bokehは、データ可視化を支援するPythonパッケージの一つで、オープンソースプロジェクトとして公開されています。BokehはHTMLとJavaScriptを使ってプロットを描画するため、Webベースのダッシュボードを構築する際に特に有用です。Bokehの仕組みBokehはデータソースをJSONファイルに変換します。このJSONファイルは、JavaScriptライブラリであるBokehJSへの入力として使用されます。BokehJSはTypeScriptで書かれており、モダンなブラウザ上で可視化をレンダリングすることを可能にしています。MatplotlibやSeabornが静的なプロットを生