import csv
import re
import rdkit
from rdkit import Chem
from rdkit.Chem import Descriptors
from rdkit.Chem import AllChem
from rdkit.Chem import rdmolfiles
from collections import defaultdict
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM

# Load the csv file into a pandas dataframe
df = pd.read_csv('file.csv')

# Remove duplicates and tautomers
smiles_list = list(set(df['smiles']))
processed_smiles = []
for smile in smiles_list:
    mol = Chem.MolFromSmiles(smile)
    if mol is None:
        continue
    Chem.SanitizeMol(mol)
    smile = Chem.MolToSmiles(mol, isomericSmiles=False)
    processed_smiles.append(smile)

# Clean the input data and make sure all protonation states are appropriate for pH 7
neutral_smiles = []
for smile in processed_smiles:
    mol = Chem.MolFromSmiles(smile)
    charged_mol = Chem.AddHs(mol)
    AllChem.NeutralizeCharges(charged_mol)
    neutral_smile = Chem.MolToSmiles(charged_mol)
    neutral_smiles.append(neutral_smile)

# Create a dictionary mapping the SMILES to their corresponding labels
smiles_dict = defaultdict(int)
for i, row in df.iterrows():
    smiles = row['smiles']
    label = row['label']
    smiles_dict[smiles] = label

# Use the dictionary to create a list of tuples containing the SMILES and labels
smiles_labels = []
for smile in neutral_smiles:
    label = smiles_dict[smile]
    smiles_labels.append((smile, label))

# Split the data into training and testing sets
train_smiles, test_smiles, train_labels, test_labels = train_test_split(neutral_smiles, smiles_labels, test_size=0.2, random_state=42)

# Convert the SMILES strings into numerical arrays
def smiles_to_array(smiles):
    mol = Chem.MolFromSmiles(smile)
    array = np.zeros((1,))
    fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2)
    for i in fp.GetOnBits():
        array[i] = 1
    return array

train_arrays = [smiles_to_array(smile) for smile in train_smiles]
test_arrays = [smiles_to_array(smile) for smile in test_smiles]

# Create a small LSTM to predict the label
model = Sequential()
model.add(LSTM(100, input_shape=(1,)))
model.add(Dense(100, activation='elu')
model.add(Dense('label size', activation='softmax)
model.compile(' your options here")
model.fit(train_array)
นำเข้า csv นำเข้าอีกครั้ง นำเข้า rdkit จาก rdkit นำเข้า Chem จาก rdkit.Chem ตัวอธิบายการนำเข้าจาก rdkit.Chem นำเข้า AllChem จาก rdkit.Chem นำเข้า rdmolfiles จากคอลเลกชัน นำเข้า defaultdict นำเข้าแพนด้าเป็น pd นำเข้า numpy เป็น np จาก sklearn.model_selection นำเข้า train_test_split จาก tensorflow.keras .models นำเข้า Sequential จาก tensorflow.keras.layers นำเข้า Dense, LSTM # โหลดไฟล์ csv ลงใน pandas dataframe df = pd.read_csv('file.csv') # ลบรายการที่ซ้ำกันและ tautomers smiles_list = list(set(df['smiles ']))processed_smiles = [] สำหรับรอยยิ้มใน smiles_list: mol = Chem.MolFromSmiles(smile) ถ้า mol เป็น None: ดำเนินการต่อ Chem.SanitizeMol(mol) smile = Chem.MolToSmiles(mol, isomericSmiles=False)processed_smiles.append(smile ) # ทำความสะอาดข้อมูลอินพุตและตรวจสอบให้แน่ใจว่าสถานะโปรตอนทั้งหมดเหมาะสมสำหรับ pH 7 neutral_smiles = [] สำหรับรอยยิ้มในprocess_smiles: mol = Chem.MolFromSmiles(smile) charge_mol = Chem.AddHs(mol) AllChem.NeutralizeCharges(charged_mol) neutral_smile = Chem.MolToSmiles(charged_mol) neutral_smiles.append(neutral_smile) # สร้างพจนานุกรมที่จับคู่ SMILES กับป้ายกำกับที่เกี่ยวข้อง smiles_dict = defaultdict(int) สำหรับ i, แถวใน df.iterrows(): smiles = row['smiles'] label = แถว['label'] smiles_dict[smiles] = label # ใช้พจนานุกรมเพื่อสร้างรายการสิ่งอันดับที่มี SMILES และป้ายกำกับ smiles_labels = [] สำหรับรอยยิ้มใน neutral_smiles: label = smiles_dict[smile] smiles_labels.append((smile, label )) # แยกข้อมูลออกเป็นชุดการฝึกอบรมและการทดสอบ train_smiles, test_smiles, train_labels, test_labels = train_test_split(neutral_smiles, smiles_labels, test_size=0.2, Random_state=42) # แปลงสตริง SMILES เป็นอาร์เรย์ตัวเลข def smiles_to_array(smiles): mol = Chem .MolFromSmiles(smile) array = np.zeros((1,)) fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2) สำหรับ i ใน fp.GetOnBits(): array[i] = 1 อาร์เรย์ส่งคืน train_arrays = [smiles_to_array(smile) เพื่อรอยยิ้มใน train_smiles] test_arrays = [smiles_to_array(smile) สำหรับรอยยิ้มใน test_smiles] # สร้าง LSTM ขนาดเล็กเพื่อทำนาย label model = Sequential() model.add(LSTM(100, input_shape=(1,))) model.add (หนาแน่น (100, การเปิดใช้งาน = 'elu') model.add (หนาแน่น ('ขนาดฉลาก', การเปิดใช้งาน = 'softmax) model.compile (' ตัวเลือกของคุณที่นี่") model.fit (train_array)
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence