投稿

5月, 2025の投稿を表示しています

chatterbotにtag付きの質問・回答データを登録する

chatterbotにtag付きの質問・回答データを登録する (コストがかからない)お手軽なchatbotを作りたくて、pythonとchatterbotを使用してchatbotを作ってます。 chatterbotを起動すると自動的にdb.sqlite3が作成され、そこに以下のようなテーブルが作成されます。 sqlite> .tables statement tag tag_association statement:学習データを管理するテーブル tag:タグを管理するテーブル tag_association:statementとtagを紐づけるテーブル chatterbotの使い方は現在学習中なので、後日きちんとまとめるとして、今回は軽く詰んだ話。 statementとtagを紐づけた学習データを登録したい 最近は、生成AIパワーを活用してプログラムを作っています。 で、先述の通り「statementとtagを紐づけた学習データを登録したい」とChatGPT4oに問いかけた結果返ってきたソースがこちら。 input_statement = Statement(text=question, tags=tags) response_statement = Statement(text=answer, in_response_to=question, tags=tags) #...

pythonのバージョンを無理やり切り替える(2025.04.09投稿記事の転載)

シンボリックリンクでPythonのバージョンを切り替える 急いでプログラムを開始したく、環境構築の時間を短縮するため、一度 pyenv の使用を断念しました。その代わりとして、手動で「シンボリックリンクを貼り替える」方法を選びました。 Python 3.x.xをインストールすると、 /usr/local/bin/ に python3 というシンボリックリンクが作成されます。 インストール済みのPythonは3.13.2でしたが、 chatterbot (および spaCy )が必要とするバージョンが3.12以下だったため、 追加でPython 3.12.9をインストールしました。 手順 1. /usr/local/bin の中身を確認 以下のように、各バージョンのシンボリックリンクが存在します(抜粋)。 pydoc3.12 python3.13 python3 2. 古いリンクを削除 sudo rm /usr/local/bin/python3 3. 新しいリンクを作成 Python 3.12.9を参照するためのシンボリックリンクを作成します。 また、 python はバージョン3.13.2にリンクします。 sudo ln -s /usr/local/bin/python3.12 /usr/local/bin/python3 sudo ln -s /usr/local/bin/p...

pyenvをインストールする(2025.04.09投稿記事の転載)

衝動買いしたMacBook Air M1とPythonの挑戦 当ブログを放置している間に、MacBook Air M1の最終モデルを衝動買いしていました。 新しい環境でPython3.13.2をインストールしたものの、 chatterbot を使う際に spacy のインストールがうまくいかず、どう対処するか悩んだお話です。 Pyenvのインストール 複数バージョンのPythonを併用するには、 Pyenv をインストールするのがおすすめです。コパイロット君に教わりながら、Pyenvのインストール手順を進めました。 手順1: Brewのインストール 以下のコマンドを実行して、Homebrewをインストールします。 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install)" 手順2: Pyenvのインストール Brewを使ってPyenvをインストールします。また、現在インストールされているPythonのバージョンを確認するために以下を設定します。 # Setting PATH for Python 3.13 PATH="/Library/Frameworks/Python.framework/Versions/3.13/bin:${PATH}" export PATH eval "$(/opt/homebrew/bi...

dict型オブジェクトを内包するlistオブジェクトのコピー

dict型オブジェクトを内包するlistオブジェクトのコピー(代入)をしたくて、当初は以下の通り行っていたが、これだと値ではなく、参照渡しがされてしまってい るようで、 work_driverPaths を変更すると driverPaths の方にもその結果が反映されてしまった。 self.work_driverPaths = self.driverPaths そのため、以下の通り copy ライブラリの deepcopy を使用して解決。 self.work_driverPaths = copy.deepcopy(self.driverPaths) コパイロットぴ◯ょん君の回答 list型とdict型を併用した場合に参照渡しが発生する要因 = で代入するときの動作だね。代入した側のオブジェクトとオリジナルのオブジェクトがリンクすることについて気づいたかな? 実際、 = は 浅いコピー(shallow copy) を作るだけなので、両方のオブジェクトが同じ参照を共有してしまうんだ。 deepcopyの機能について 深いコピー : オリジナルのオブジェクトとそのコピーが完全に独立して動作する。 再帰的処理 : 内部のネストされたオブジェクトもすべてコピーする。 安全性 : オリジナルを変更してもコピーには影響がない。

【python】ひとつひとつトピックを立てるまでもない備忘録

Python 基礎 1. 基礎の基礎編 なんか時々訳がわからなくなるので。 list型 の初期化は [] で行う。 dict型 の初期化は {} で行う。 例: alist: list = [] adict: dict = {} 2. list型の重複チェック if ~ in ~ を使うことで重複チェックができる 例: if selected_tag not in self.selectedTags: self.selectedTags.append(self.cmbTags.currentText()) 3. range for文で指定の回数だけループをしたい場合はrange関数を使用する 例: # タグ一覧を取得 for row in range(self.selected_tag_model.rowCount()): index = self.selected_tag_model.index(row, 0) tag = self.selected_tag_model.data(index) tags.append(tag) 4. enumerate ラジオボタンをグループ化して、状態が変化したときに選択されたボタンに応じて処理を行いたい場合、 enumerate を使用することで、ラジオボタンだけではなく、インデックスも同時に取得することができる。 # 出力方法のラジオボタンをグループ化する self.group = QButtonGroup() self.group.addButton(self.rbText) self.group.ad...

CGPointってorz(2020.03.25投稿記事の転載)

イメージ
CGPointの使用例 CGPointの使用例 座標を扱う構造体の CGPoint 。 Swiftでこれを使いたくて変数定義をしました。 var center: CGPoint! result = before result.origin.x = center.x - (before.size.width / CGFloat(2)) result.origin.y = center.y - (before.size.height / CGFloat(2)) こんな感じのコードを書いたら、以下のような実行時エラーが発生しました。 Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value 要は NULL ということらしい。 「え、これって構造体じゃないの?」と思いつつも、変数定義を以下のように変更しました。 var center: CGPoint! = CGPoint(x: 0.0, y: 0.0) 無事解決。 CGPointってポインター型なの?と思ってリファレンスを開いたら以下のような記述がありました。 疑惑はますます深まったと言える。Appleは説明責任を果たしてほしい。

こんなコード書いたらコンパイルがめっちゃ遅くなったよって話(2020.03.25投稿記事の転載)

こんなコード書いたらコンパイル時にCPUが悲鳴をあげたというお話。 個人的に好みではないけど、swift は型推論により変数型を指定しなくても、コンパイラ?側で代入された値によって自動的に判別してくれる。 そこで厄介なのが、代入を行う際に左辺値と右辺値の型を全て統一する必要があること。 要は、左辺値がDouble型なら、右辺値も、計算式の定数および変数も全部含めて全てDouble型に統一しないといけない。 なので、型ごとに型変換する関数があり、それを使って統一していく。 Double( 変数 or 定数 )  とか Int( 変数 or 定数 ) 的な感じ。 で、viewの座標変換するために下のようなコードを書いたら、コンパイル時にファンが唸りはじめ10秒くらい経ってからエラーを吐くようになった。 (エラーの詳細は忘れました(゚ω゚)) rect. origin . x  = x_position  +  ( 64.0   *   CGFloat (col))  + ( 10.0   *   CGFloat (col)) ↓のようなコードにすることで解決 rect. origin . x  = x_position  +   CGFloat ( 64.0   *   CGFloat (col))  +   CGFloat ( 10.0   *   CGFloat (col)) CGFloat型はその名の通りFloatなので定数値を 64.0 と書けばOKかな?って思ってたけど、ダメだった。 Macが気の毒になるくらいコンパイル頑張ってたので、今後気をつけます。 ちなみに 定数値を使う場合、 64 は Int型、64.0 はDouble型として判断されます。 Floatを使いたい場合は、明示的に型を定義する必要があります。 とここまで書いて、Double型(10.0)とCGFloat型の掛け算したからエラーを吐いたと気づく センスも才能もないダメプログラマーです。

お引越し

楽天ブログでやっていた「みやたくワークスの徒然ブログ」からお引越ししてきました。 面倒くさがり屋の私にはちょっとインターフェイスというか使い勝手が合わなかったのでシンプルなブログサービス探しの旅に出ました。 これからしばらくはこちらに投稿を行っていきます。 また、徒然ブログの方で投稿した記事も一部転載していきます。 お引越し元   https://plaza.rakuten.co.jp/takmacios/