我有以下来自json文件的输出
{
"Threshold": 0.6,
"Services": [
{
"Name": "Service1",
"Query": [
"query1",
"query2",
"query3"
],
"Products": [
{
"Name": "product1",
"Query": [
"query4",
"query5"
],
"Threshold": 0.75
},
{
"Name": "product2",
"Query": [
"query6",
"query7",
"query8"
],
"Threshold": 0.75
},
{
"Name": "product3",
"Query": [
"query9",
"query10"
],
"Threshold": 0.75
},
{
"Name": "product4",
"Query": [
"query11",
"query12"
],
"Threshold": 0.75
},
{
"Name": "product5",
"Query": [
"query13",
"query14"
],
"Threshold": 0.75
}
]
},
{
"Name": "Service2",
"Query": [
"query1",
"query2",
"query3"
],
"Products": [
{
"Name": "product1",
"Query": [
"query4",
"query5"
],
"Threshold": 0.75
},
{
"Name": "product2",
"Query": [
"query6",
"query7",
"query8"
],
"Threshold": 0.75
},
{
"Name": "product3",
"Query": [
"query9",
"query10"
],
"Threshold": 0.75
},
{
"Name": "product4",
"Query": [
"query11",
"query12"
],
"Threshold": 0.75
},
{
"Name": "product5",
"Query": [
"query13",
"query14"
],
"Threshold": 0.75
}
]
}
]
}该文件的结构如下:有两个服务,每个服务都有五个类似的产品。每个服务都有一个查询列表,其中包含一些描述该服务的关键字。
同样的道理也适用于产品。
每个产品都作为包含描述单个产品的关键字的查询列表。
我想循环进入服务并选择service1。然后,我想对文本运行算法中的查询,以确定文本中是否存在一个或所有查询。如果存在一个或多个查询,我想进入产品并开始遍历product1到product5。如果不是,它应该跳过并转到service2
我想对service2和各自的产品做同样的事情。
我只能在运行以下代码时运行它:
for service in configfile["Services"]:
if service["Name"] == "Service1":代码必须在不对"Service1“或"Service2”名称进行硬编码的情况下运行。
本质上,我想获取service1和service2并访问查询。我将从Sentence transformers运行代码。
# Query sentences:
queries = ['query1', 'query2', 'query3']
top_k = min(5, len(corpus))
for query in queries:
query_embedding = embedder.encode(query, convert_to_tensor=True)
# We use cosine-similarity and torch.topk to find the highest 5 scores
cos_scores = util.pytorch_cos_sim(query_embedding, corpus_embeddings)[0]
top_results = torch.topk(cos_scores, k=top_k)
print("\n\n======================\n\n")
print("Query:", query)
print("\nTop 5 most similar sentences in corpus:")
for score, idx in zip(top_results[0], top_results[1]):
print(corpus[idx], "(Score: {:.4f})".format(score))对于每个查询,我都会从这个算法中得到一些分数。然后,我对查询进行排序,并采用具有最大值的查询。如果此值高于阈值,我希望继续使用services1中从product1到product5的查询中的相同算法。取最大值,如果该值高于某个阈值,我会将其作为“正”添加到字典中。如果没有,我会将其添加为“负面”。
如果值低于阈值,我想跳过对产品的迭代,转到Service2,为查询再次运行算法,并重复该过程。
发布于 2021-11-17 13:44:13
不清楚您想要对您的产品做什么,但是由于Services和Products是列表,您可以简单地遍历它们:
for serv in json_data.get("Services", []):
if serv.get("Query", None):
for prod in serv.get("Products", []):
# do your stuff with prod
print(serv.get("Name", None), prod.get("Name", None))输出:
Service1 product1
Service1 product2
Service1 product3
Service1 product4
Service1 product5
Service2 product1
Service2 product2
Service2 product3
Service2 product4
Service2 product5https://stackoverflow.com/questions/70004321
复制相似问题