#!/usr/bin/env python3
"""
text_embedding 实际应用场景示例
"""
import asyncio
from lib.text_embedding import SentenceModel
import numpy as np


async def usecase_1_semantic_search():
    """
    应用场景1: 语义搜索
    - 用户输入一个查询
    - 从大量文本中找出最相关的内容
    """
    print("=" * 60)
    print("应用场景1: 语义搜索")
    print("=" * 60)

    model = SentenceModel(dim=128)

    # 文档库（比如知识库、文章库）
    documents = [
        "深度学习是机器学习的一个重要分支",
        "神经网络模拟人脑的结构和功能",
        "自然语言处理用于理解和生成人类语言",
        "计算机视觉让机器能够理解图像",
        "今天天气晴朗，适合出门散步",
        "晚餐吃了美味的意大利面",
    ]

    # 用户查询
    query = "什么是深度学习？"

    print(f"\n用户查询: {query}")
    print(f"\n文档库中有 {len(documents)} 篇文档")
    print("\n搜索结果（按相关度排序）:")

    # 计算查询与每篇文档的相似度
    results = []
    for doc in documents:
        score = await model.similarity(query, doc)
        results.append((doc, score))

    # 排序并展示前3个最相关的
    results.sort(key=lambda x: x[1], reverse=True)

    for i, (doc, score) in enumerate(results[:3], 1):
        print(f"\n  Top {i} (相似度: {score:.3f})")
        print(f"  {doc}")


async def usecase_2_text_clustering():
    """
    应用场景2: 文本聚类
    - 把相似的文本分组
    """
    print("\n" + "=" * 60)
    print("应用场景2: 文本聚类（相似内容分组）")
    print("=" * 60)

    model = SentenceModel(dim=128)

    texts = [
        "机器学习算法很强大",
        "深度神经网络效果很好",
        "今天吃了火锅",
        "晚餐很美味",
        "AI技术发展迅速",
        "明天去爬山",
    ]

    print(f"\n待分组文本: {texts}")

    # 简单聚类：找出相似度 > 0.6 的文本对
    print("\n相似文本对（相似度 > 0.6）:")

    similar_pairs = []
    for i in range(len(texts)):
        for j in range(i + 1, len(texts)):
            score = await model.similarity(texts[i], texts[j])
            if score > 0.6:
                similar_pairs.append((texts[i], texts[j], score))

    for text1, text2, score in similar_pairs:
        print(f"\n  相似度: {score:.3f}")
        print(f"  - {text1}")
        print(f"  - {text2}")


async def usecase_3_duplicate_detection():
    """
    应用场景3: 重复/相似内容检测
    - 识别意思相同但表述不同的文本
    """
    print("\n" + "=" * 60)
    print("应用场景3: 重复内容检测")
    print("=" * 60)

    model = SentenceModel(dim=128)

    # 用户提交的问题列表
    questions = [
        "如何学习Python编程？",
        "怎样才能学好Python？",
        "Python入门教程有哪些？",
        "今天天气怎么样？",
        "北京今天的天气如何？",
    ]

    print(f"\n问题列表:")
    for i, q in enumerate(questions, 1):
        print(f"  {i}. {q}")

    # 检测重复（相似度 > 0.7 视为重复）
    print("\n检测到的重复问题（相似度 > 0.7）:")

    threshold = 0.7
    duplicates = []

    for i in range(len(questions)):
        for j in range(i + 1, len(questions)):
            score = await model.similarity(questions[i], questions[j])
            if score > threshold:
                duplicates.append((i+1, j+1, questions[i], questions[j], score))

    for idx1, idx2, q1, q2, score in duplicates:
        print(f"\n  问题{idx1} 和 问题{idx2} 相似 (相似度: {score:.3f})")
        print(f"  - {q1}")
        print(f"  - {q2}")


async def main():
    """运行所有应用场景示例"""

    # 场景1: 语义搜索
    await usecase_1_semantic_search()

    # 场景2: 文本聚类
    await usecase_2_text_clustering()

    # 场景3: 重复检测
    await usecase_3_duplicate_detection()

    print("\n" + "=" * 60)
    print("所有示例完成！")
    print("=" * 60)


if __name__ == "__main__":
    asyncio.run(main())
