uepon日々の備忘録 (original) (raw)
ネットを見ていて、以下の情報を見つけました。入力情報などでURLがあった場合にURL.canParse()メソッド
を使用して、その妥当性を判定できます。アクセス前にURLの妥当性を確かめられるのはとても便利です😊
私は、JavaScript
ではなくPython
を使用する事が多いので、同じ処理をPython
でも出来ないかなと思って調べてみました。また、LLM
を使用する中で、API
を使用した際、データの受信途中でJSONデータ
ができなくなることがあるので、それについてもチェック方法を調べてみたいなと思います。
PythonでURL文字列の妥当性を判定する
Python
でもJavaScript
のURLコンストラクターのようにURLの妥当性を判定する方法があります。その方法の一つはurllib.parseモジュール
を使用することです。以下のように、URLをパースして判定します。
妥当性のチェックコード
from urllib.parse import urlparse from typing import Union
def is_valid_url(url: str) -> bool: """ URLが有効な形式かどうかを検証します。
Args:
url (str): 検証するURL文字列
Returns:
bool: URLが有効な場合はTrue、無効な場合はFalse
Examples:
>>> is_valid_url("https://example.com")
True
>>> is_valid_url("invalid-url")
False
"""
try:
result = urlparse(url)
return all([result.scheme, result.netloc])
except ValueError:
return False
print(is_valid_url("https://example.com"))
print(is_valid_url("invalid-url"))
Python
でも無事にURL文字列の形式チェックができるようになりました。
JSON文字列の妥当性のチェック
では、LLM
をAPI
から使用した場合に応答で得たJSON形式のデータ
の妥当性を検証するにはどうしたら良いでしょうか。APIを使用していると稀にデータの欠損などで不完全なデータの受信もありえるので、この確認も事前にできる助かることが多いです。
この場合には標準のjsonモジュール
を使用して確認を行います。json.loads()メソッド
はこれまでも単純な変換に使用していましたが、try
を使うことでチェック用にもできるようです。exception
にjson.JSONDecodeError
を用いるのがポイントですね。
妥当性のチェックコード
import json from typing import Union
def is_valid_json(json_string: str) -> bool: """ JSON文字列が有効なフォーマットかどうかを検証します。
Args:
json_string (str): 検証するJSON形式の文字列
Returns:
bool: JSON文字列が有効な場合はTrue、無効な場合はFalse
Examples:
>>> is_valid_json('{"name": "Alice", "age": 30}')
True
>>> is_valid_json('{name: Alice, age: 30}')
False
"""
try:
json.loads(json_string)
return True
except json.JSONDecodeError:
return False
print(is_valid_json('{"name": "Alice", "age": 30}'))
print(is_valid_json('{name: Alice, age: 30}'))
APIなどでJSON形式のデータを受信する際には一度チェックすると安定すると思います。
YAMLの妥当性のチェック
Docker Compose
、GitHub Actions
、Kubernetes
などでも使用されるYAML形式
のデータも確認できるといいですね。Python
でYAML形式のデータ
の妥当性を確認するにはPyYAML
というモジュールを使用します。
モジュールのインストール
以下でインストールを行います。必要に応じて仮想環境を使用してください。
$ pip install PyYAML
妥当性のチェックコード
import yaml from typing import Union
def is_valid_yaml(yaml_string: str) -> bool: """ YAMLフォーマットの文字列が有効かどうかを検証します。
Args:
yaml_string (str): 検証するYAML形式の文字列
Returns:
bool: YAML文字列が有効な場合はTrue、無効な場合はFalse
Examples:
>>> is_valid_yaml("name: Alice\\nage: 30")
True
>>> is_valid_yaml("name: Alice\\nage:")
False
"""
try:
yaml.safe_load(yaml_string)
return True
except yaml.YAMLError:
return False
print(is_valid_yaml("name: Alice\nage: 30"))
print(is_valid_yaml("name: Alice\nage:"))
こちらもデータの確認が行えました。
おまけ
おまけとしてreモジュール
を使用してメールアドレス
と電話番号
の妥当性のコードも追記しておきます。
おまけ:メールアドレスの妥当性検証
import re from typing import Union
def is_valid_email(email: str) -> bool: """ メールアドレスが有効な形式かどうかを検証します。
Args:
email (str): 検証するメールアドレス文字列
Returns:
bool: メールアドレスが有効な場合はTrue、無効な場合はFalse
Examples:
>>> is_valid_email("example@example.com")
True
>>> is_valid_email("invalid-email")
False
"""
pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
return re.match(pattern, email) is not None
print(is_valid_email("example@example.com"))
print(is_valid_email("invalid-email"))
おまけ:電話番号の妥当性検証
import re from typing import Union
def is_valid_phone_number(phone: str) -> bool: """ 日本の電話番号が有効な形式かどうかを検証します。
Args:
phone (str): 検証する電話番号文字列(xx-xxxx-xxxx形式)
Returns:
bool: 電話番号が有効な場合はTrue、無効な場合はFalse
Examples:
>>> is_valid_phone_number("03-1234-5678")
True
>>> is_valid_phone_number("123-456-7890")
False
"""
pattern = r'^\d{2,4}-\d{2,4}-\d{4}$'
return re.match(pattern, phone) is not None
print(is_valid_phone_number("03-1234-5678"))
print(is_valid_phone_number("123-456-7890"))
おわりに
Python
を使ったデータ検証の基本的な方法を調べてみました。URL
やJSON
、YAML
、さらにはメールアドレス
や電話番号
まで、プログラミングでよく扱うデータの形式チェックが簡単にできます。メールアドレス
や電話番号
は既知のものですけど🙃
これらの方法を活用することで、外部からのデータを扱う際のエラーを未然に防ぎ、より安定したプログラムを作ることができます。特にAPI
を使用する場合、Webアプリケーション
を開発する場合には大きな効果があると思います。
自身のGitHub
のリポジトリをバックアップして新しいリポジトリとしたいことはたまにあるかなと思います。計画性のない私とってはよくあります。漠然とfork
すればいいのかなと思っていました。
機能的にはこれでもいいのですが、fork
の場合には厳密にいうと以下のような点で注意が必要です。
厳密には**複製先(新)のリポジトリには複製元(旧)のリポジトリ**の依存関係が維持されています。ということで、依存関係をなくしてコピーを行うにはどうしたらいいかということを調べてみたところ今回の内容に行き着きました。
毎月開催されているwatsonx.ai Dojoのハンズオンの内容の復習の続きになります。
今回は2部構成の後半ですが、前回とは切り離して行える形です。
イベントページ
今回の内容はプロンプト・エンジニアリング入門ということで、プロンプトに具体例を含めるFew-Shot
をIBMCloud上にデプロイ、Pythonからアクセスしてみるという内容となります。
前回の演習内容
3回目ではプロンプト・エンジニアリング、次回以降はRAG、ファインチューニングと続くようです。そろそろ自分の事前知識を超えてきた内容も増えてきたようなので、個人的な感想としては、操作にあまり慣れていないこともあり雲行きが怪しいです😫😫😫
資料はConnpassページにもありますが、念の為こちらにも掲載しておきます。今回は最後にPythonでのコードの実行に関しては、初回参加時のエントリーで行った準備作業が必要になります。自分もやってみようという方はそちらも参考にしてください。
資料
資料(GitHub)
【動画】
ChromeOS Flex
によって、古いPCを持った多くのユーザーがその恩恵を得られました。ただ、ChromeOS Flex
では**Androidアプリ**を使用することができません。また、インストール用のUSBメモリからもChromeOS Flex
は使用できるのですが、別PCに挿して起動すると初期化されてしまうという難点もあります😥 今回は、Androidアプリ
(Playストア)が使えてかつUSBメモリで持ち運ぶことのできるChromeOS
をインストールしてみます。ChromeOS Flex
ではなくChromeOS
となります。
毎月開催されているwatsonx.ai Dojoのハンズオンの内容を復習してみました。
内容が多いため、2部構成でお届けします。今回は演習1の部分と次回は演習2&演習3という組み合わせになっています。プログラミングなしでも演習1は体験できるのでこちらだけでもどうぞ。
イベントページ
今回はの内容はプロンプト・エンジニアリング入門ということで、プロンプトの作成、入力内容の工夫、プロンプトに具体例を含めるFew-Shot
を試す内容です。
今回の資料のConnpassページにもありますが、念の為こちらにも掲載しておきます。
資料
資料(GitHub)
【動画】