1
0

analysis.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. """
  2. 分析模型
  3. """
  4. from datetime import datetime
  5. from typing import Optional, List, Dict, Any
  6. from pydantic import BaseModel, Field
  7. from sqlalchemy import Column, Integer, String, DateTime, Text, Boolean, Float, JSON
  8. from sqlalchemy.ext.declarative import declarative_base
  9. Base = declarative_base()
  10. class AnalysisDB(Base):
  11. """分析数据库模型"""
  12. __tablename__ = "analysis"
  13. id = Column(Integer, primary_key=True, index=True)
  14. title = Column(String(200), nullable=False)
  15. analysis_type = Column(String(50), nullable=False)
  16. paper_ids = Column(JSON) # 分析的论文ID列表
  17. methodology = Column(Text)
  18. findings = Column(JSON) # 分析发现
  19. insights = Column(Text)
  20. limitations = Column(Text)
  21. recommendations = Column(Text)
  22. confidence_score = Column(Float, default=0.0)
  23. novelty_score = Column(Float, default=0.0)
  24. impact_score = Column(Float, default=0.0)
  25. metadata = Column(JSON)
  26. user_id = Column(Integer, index=True)
  27. task_id = Column(Integer, index=True)
  28. created_at = Column(DateTime, default=datetime.utcnow)
  29. updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
  30. class Analysis(BaseModel):
  31. """分析响应模型"""
  32. id: int
  33. title: str
  34. analysis_type: str
  35. methodology: Optional[str] = None
  36. findings: Dict[str, Any] = {}
  37. insights: Optional[str] = None
  38. limitations: Optional[str] = None
  39. recommendations: Optional[str] = None
  40. confidence_score: float = 0.0
  41. novelty_score: float = 0.0
  42. impact_score: float = 0.0
  43. created_at: datetime
  44. class Config:
  45. from_attributes = True
  46. class AnalysisCreate(BaseModel):
  47. """分析创建模型"""
  48. title: str = Field(..., min_length=1, max_length=200)
  49. analysis_type: str = Field(..., regex=r'^(comprehensive|methodology|findings|gap|trend)$')
  50. paper_ids: List[int] = []
  51. methodology: Optional[str] = None
  52. class AnalysisUpdate(BaseModel):
  53. """分析更新模型"""
  54. title: Optional[str] = None
  55. methodology: Optional[str] = None
  56. findings: Optional[Dict[str, Any]] = None
  57. insights: Optional[str] = None
  58. limitations: Optional[str] = None
  59. recommendations: Optional[str] = None
  60. confidence_score: Optional[float] = Field(None, ge=0.0, le=1.0)
  61. novelty_score: Optional[float] = Field(None, ge=0.0, le=1.0)
  62. impact_score: Optional[float] = Field(None, ge=0.0, le=1.0)
  63. class ComprehensiveAnalysis(BaseModel):
  64. """综合分析结果"""
  65. summary: str
  66. key_findings: List[str]
  67. methodological_trends: List[str]
  68. research_gaps: List[str]
  69. future_directions: List[str]
  70. quality_assessment: Dict[str, float]
  71. citation_network: Dict[str, Any]
  72. class MethodologyAnalysis(BaseModel):
  73. """方法论分析结果"""
  74. common_methods: List[str]
  75. method_comparison: Dict[str, Any]
  76. strengths_weaknesses: Dict[str, List[str]]
  77. best_practices: List[str]
  78. class FindingsAnalysis(BaseModel):
  79. """研究发现分析"""
  80. consensus_points: List[str]
  81. controversial_points: List[str]
  82. emerging_patterns: List[str]
  83. evidence_strength: Dict[str, float]
  84. class GapAnalysis(BaseModel):
  85. """研究缺口分析"""
  86. identified_gaps: List[str]
  87. gap_categories: Dict[str, List[str]]
  88. opportunity_areas: List[str]
  89. research_questions: List[str]
  90. class TrendAnalysis(BaseModel):
  91. """趋势分析结果"""
  92. temporal_trends: Dict[str, Any]
  93. topic_evolution: List[str]
  94. emerging_topics: List[str]
  95. citation_trends: Dict[str, Any]