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

TensorFlowとPythonでUnicode文字列を分割し、バイトオフセットを取得する方法

Unicode文字列の分割には「unicode_split」メソッドを、バイトオフセットの指定(取得)には「unicode_decode_with_offsets」メソッドを使用します。これらのメソッドはいずれも、TensorFlowモジュールの「strings」クラスに含まれています。

関連記事

TensorFlowとは何か?KerasがTensorFlowと連携してニューラルネットワークを構築する仕組みについてもぜひご覧ください。

はじめに

まず、PythonでUnicode文字列を表現し、Unicode互換の操作を使ってそれらを処理する方法を理解しましょう。標準的な文字列操作に相当するUnicode版のAPIを活用することで、スクリプト検出に基づいてUnicode文字列をトークン単位に分割できます。

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

コード例

print("Split unicode strings")
tf.strings.unicode_split(thanks, 'UTF-8').numpy()
codepoints, offsets = tf.strings.unicode_decode_with_offsets(u"🎈🎉🎊", 'UTF-8')
print("Printing byte offset for characters")
for (codepoint, offset) in zip(codepoints.numpy(), offsets.numpy()):
    print("At byte offset {}: codepoint {}".format(offset, codepoint))

コード出典:https://www.tensorflow.org/tutorials/load_data/unicode

実行結果

Split unicode strings
Printing byte offset for characters
At byte offset 0: codepoint 127880
At byte offset 4: codepoint 127881
At byte offset 8: codepoint 127882

コードの解説

  • tf.strings.unicode_split:この操作は、Unicode文字列を個々の文字からなる部分文字列に分割します。
  • 生成された文字テンソルは、tf.strings.unicode_decodeによって元の文字列と対応付ける必要があります。
  • そのためには、各文字がどこから始まるかを示すオフセット情報が必要になります。
  • tf.strings.unicode_decode_with_offsets:このメソッドはunicode_decodeメソッドとほぼ同じ動作をしますが、異なる点として、各文字の開始オフセットを格納した第2のテンソルを返します。

上記の出力例では、絵文字「🎈🎉🎊」の各文字がそれぞれ4バイトずつ消費していることがわかります。つまり、0バイト目、4バイト目、8バイト目に各コードポイント(127880、127881、127882)が配置されているのです。このようにバイトオフセットを把握しておくことで、マルチバイト文字を含むテキストデータの正確な処理や位置特定が可能になります。

  1. Pythonで大文字と数字を組み合わせたランダム文字列を生成する方法

    Pythonでは、random.choice() を使うことで候補リストの中からランダムに1文字を取得できます。これを指定した回数だけ繰り返してリストに格納し、最後に join() で連結すれば、ランダムな文字列が完成します。ここでの「候補」となるのは、大文字のアルファベット(string.ascii_uppercase)と数字(string.digits)です。以下に関数化した例を示します。関数を使って生成する基本形import string import random def get_random_string(length): random_list = [] for

  2. Pythonで複数の区切り文字を使って文字列を分割する方法

    re.split()メソッドによる複数区切り文字での分割Pythonでは、標準ライブラリのreモジュールが提供するre.split(区切り文字, 文字列)メソッドを使うことで、複数の区切り文字を指定して文字列を簡単に分割できます。このメソッドには、区切り文字を表す正規表現パターンと、分割したい文字列を渡します。基本的な使い方次の例では、セミコロン(;)、カンマ(,)、アスタリスク(*)、改行(\n)という4種類の区切り文字を、1つの正規表現でまとめて処理しています。a = Beautiful, is; better*than\nugly import re print(re.split(; |