| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- """
- 论文模型
- """
- from datetime import datetime
- from typing import Optional, List, Dict, Any
- from pydantic import BaseModel, Field
- from sqlalchemy import Column, Integer, String, DateTime, Text, Boolean, Float, JSON
- from sqlalchemy.ext.declarative import declarative_base
- Base = declarative_base()
- class PaperDB(Base):
- """论文数据库模型"""
- __tablename__ = "papers"
-
- id = Column(Integer, primary_key=True, index=True)
- title = Column(String(500), nullable=False, index=True)
- authors = Column(Text) # JSON格式存储作者列表
- abstract = Column(Text)
- keywords = Column(Text) # JSON格式存储关键词
- publication_year = Column(Integer)
- journal = Column(String(200))
- doi = Column(String(100), unique=True, index=True)
- arxiv_id = Column(String(50), unique=True, index=True)
- pdf_url = Column(String(500))
- pdf_path = Column(String(500))
- full_text = Column(Text)
- embeddings = Column(JSON) # 存储向量嵌入
- metadata = Column(JSON) # 存储额外的元数据
- quality_score = Column(Float, default=0.0)
- relevance_score = Column(Float, default=0.0)
- is_processed = Column(Boolean, default=False)
- user_id = Column(Integer, index=True)
- created_at = Column(DateTime, default=datetime.utcnow)
- updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
- class Paper(BaseModel):
- """论文响应模型"""
- id: int
- title: str
- authors: List[str]
- abstract: Optional[str] = None
- keywords: List[str] = []
- publication_year: Optional[int] = None
- journal: Optional[str] = None
- doi: Optional[str] = None
- arxiv_id: Optional[str] = None
- pdf_url: Optional[str] = None
- quality_score: float = 0.0
- relevance_score: float = 0.0
- is_processed: bool = False
- created_at: datetime
-
- class Config:
- from_attributes = True
- class PaperCreate(BaseModel):
- """论文创建模型"""
- title: str = Field(..., min_length=1, max_length=500)
- authors: List[str] = []
- abstract: Optional[str] = None
- keywords: List[str] = []
- publication_year: Optional[int] = None
- journal: Optional[str] = None
- doi: Optional[str] = None
- arxiv_id: Optional[str] = None
- pdf_url: Optional[str] = None
- class PaperUpdate(BaseModel):
- """论文更新模型"""
- title: Optional[str] = None
- authors: Optional[List[str]] = None
- abstract: Optional[str] = None
- keywords: Optional[List[str]] = None
- publication_year: Optional[int] = None
- journal: Optional[str] = None
- quality_score: Optional[float] = None
- relevance_score: Optional[float] = None
- class PaperSearch(BaseModel):
- """论文搜索模型"""
- query: str = Field(..., min_length=1)
- filters: Dict[str, Any] = {}
- sort_by: str = "relevance"
- limit: int = Field(default=20, ge=1, le=100)
- offset: int = Field(default=0, ge=0)
- class PaperAnalysis(BaseModel):
- """论文分析结果"""
- paper_id: int
- summary: str
- key_findings: List[str]
- methodology: str
- limitations: List[str]
- future_work: List[str]
- novelty_score: float
- impact_score: float
- confidence_score: float
|