kenken999's picture
test
84ccc62
raw
history blame
2.95 kB
import pandas as pd
import re
from sqlalchemy import create_engine, inspect, Table, MetaData, Column, String, text
import psycopg2
# チャット履歴ファイルを読み込む関数(最初の3行をスキップ)
def load_chat_history(file_path):
return pd.read_csv(file_path, skiprows=3)
# 個人情報をマスクする関数
def mask_personal_info(text):
# 電話番号のマスク
text = re.sub(r'\b\d{2,4}-\d{2,4}-\d{4}\b', '[電話番号]', text)
# メールアドレスのマスク
text = re.sub(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', '[メールアドレス]', text)
# 名前のマスク(例として"えみいわし"をマスク)
names = ['えみいわし']
for name in names:
text = re.sub(r'\b' + name + r'\b', '[名前]', text)
return text
# データフレームの特定の列の個人情報をマスクする関数
def mask_specific_columns(df, columns):
for column in columns:
df[column] = df[column].astype(str).apply(mask_personal_info)
return df
# データベースに接続する関数
def connect_to_db():
conn = psycopg2.connect(
dbname="neondb",
user="miyataken999",
password="yz1wPf4KrWTm",
host="ep-odd-mode-93794521.us-east-2.aws.neon.tech",
port=5432,
sslmode="require"
)
return conn
# ファイルパスの設定
input_file_path = '/home/user/app/polls/databases/test.csv' # エクスポートされたチャット履歴ファイルのパス
# チャット履歴を読み込み、特定の列の個人情報をマスク
chat_history_df = load_chat_history(input_file_path)
columns_to_mask = ['送信者タイプ', '送信者名', '送信日', '送信時刻', '内容']
masked_chat_history_df = mask_specific_columns(chat_history_df, columns_to_mask)
# データベースの接続設定
engine = create_engine('postgresql+psycopg2://miyataken999:yz1wPf4KrWTm@ep-odd-mode-93794521.us-east-2.aws.neon.tech:5432/neondb')
# テーブルが存在しない場合に作成
if not inspect(engine).has_table("fasis_chat_history"):
metadata = MetaData()
Table('fasis_chat_history', metadata,
*(Column(name, String) for name in masked_chat_history_df.columns))
metadata.create_all(engine)
# マスクされたデータをPostgreSQLにインポート
masked_chat_history_df.to_sql('fasis_chat_history', engine, if_exists='replace', index=False)
print("データのインポートが完了しました。")
# データベースに接続してクエリを実行する関数
def execute_query(query, engine):
with engine.connect() as connection:
result = connection.execute(text(query))
return result.fetchall()
# クエリの例: マスクされたデータを取得
query = "SELECT * FROM fasis_chat_history LIMIT 10;"
results = execute_query(query, engine)
# クエリ結果を表示
for row in results:
print(row)