我已经成功实现了推荐引擎,但有一个问题:如果我输入任何不相关的数值,系统仍然会给出输出,应该显示“你输入了错误的值”。
这是正确的输出正确的SMILES输出
如果我输入错误的SMILES或任何不属于训练数据集的内容,则必须显示一条消息,提示请输入正确的SMILES。
我输入了任何随机文本,所以如果我输入错误的SMILES,结果应该显示为
结果: “请输入正确的SMILES”
我已经尝试使用If else语句修改代码,但没有效果。
from rdkit import Chemfrom rdkit.Chem import Drawimport pandas as pdfrom flask import Flask, jsonify, request, abortimport jsonimport sysimport randomimport unicodedatafrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import cosine_similaritydata = pd.read_csv("clean_o2h.csv", sep=",")app = Flask(__name__)@app.route('/', methods=["POST"])def predict_word(): print(request.get_json()) sent = request.get_json()['smiles'] reactants = data["reactants"].tolist() targets = data["targets"].tolist() error = ("plese enter correct smiles") # TFIDF vector representation vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(targets) test = vectorizer.transform([sent])#test = vectorizer.transform(["NC1=CC=C2C(COC(N[C@H]3C4=C(CC3)C=CC=C4)=N2)=C1"]) cosine_similarities = cosine_similarity(test, X).flatten() l = [] # n = ["Result 1","Result 2", "Result 3","Result 4"]# Extract top 5 similarity records similarity = cosine_similarities.argsort()[:-5:-1] #print("Top 5 recommendations...") for sim in similarity: #print(reactants[sim]) result = reactants[sim] l.append(result) print(l) # output = dict(zip(l,n)) res = { i : l[i] for i in range(0, len(l) ) } # return jsonify({"Recommendation": res}) if(sent == targets): return jsonify({"Recommendation": res}) else: return jsonify({"Error": error})if __name__ == '__main__': app.run(port='8080')
请帮助我解决这个问题,其中目标变量是SMILES,反应物变量是推荐结果。
回答:
您可以通过使用RDKit解析分子来检查SMILES
是否有效。这应该能回答您问题的一部分,但我很抱歉,我不太明白您在这里还想实现什么。
from rdkit import Chemerror = 'something is wrong'smiles = request.get_json()['smiles']m = Chem.MolFromSmiles(smiles)if m is None: return jsonify({"Error": error})else: # 您有有效的SMILES pass