# 型预测
from sentence_transformers import SentenceTransformer
import scipy.spatial
import pandas as pd

embedder = SentenceTransformer('bert-base-chinese')
# corpus = ['女宝宝，刚7岁，这一年，察觉到，我家孩子身上肉很多，而且，食量非常的大，平时都不喜欢吃去玩，请问：小儿肥胖超重该如何治疗。',
#           '男孩子，刚4岁，最近，发现，我家孩子体重要比别的孩子重很多，而且，最近越来越能吃了，还特别的懒，请问：小儿肥胖超重该怎样医治。',
#           '男宝，已经5岁，今年，察觉到，孩子身上越来越肉乎了，同时，吃的饭也比一般孩子多，平时都不喜欢吃去玩，请问：小儿肥胖能吃该如何治疗。']

df = pd.read_excel('../datas/骨科.xlsx', sheet_name='Sheet1')
corpus = df['ask'].to_numpy()

corpus_embeddings = embedder.encode(corpus)

# 待查询的句子
queries = ['从大约2岁起，我发现孩子的左脚大拇指向食指方面倾斜，平时走路作习都正常，没有不舒服的感觉，但是拇指后的关节非常大，相对右侧比较突出。']
query_embeddings = embedder.encode(queries)
closest_n = 20
# 对于每个句子，使用余弦相似度查询最接近的个句子closest n = 2
for query, query_embedding in zip(queries, query_embeddings):
    distances = scipy.spatial.distance.cdist([query_embedding], corpus_embeddings, "cosine")[0]
    # 按照距离逆序
    results = zip(range(len(distances)), distances)
    results = sorted(results, key=lambda x: x[1])
    print("====================================")
    print("Query:", query)
    print("Result:Top 5 most similar sentences in corpus:")
    for idx, distance in results[0:closest_n]:
        print(corpus[idx].strip(), "(Score: %.4f)" % (1 - distance))
