7 K2 {' d& P$ E% A@app.post(& b! ]4 Q- ?6 V) M+ L5 s
"/calculate/preprocessing/", 8 T F7 B' S2 H" \) O- g tags=["计算模块数据接口"] 2 K P* ~! q: `2 N1 O6 [2 F8 [2 W) : B( f6 S* u! J% t# c, v6 c5 dasync def run_text_preprocessing_task(text_preprocessing_params: TextPreprocessingParams,8 [+ ~ g1 W$ p& S
background_task: BackgroundTasks,$ Y( d. v) T9 I) ]% v% ^3 D
response: Response, : p' L Y' F; Z) Z( b user_uuid: str = Cookie(None)): 5 ^# O" ~5 _2 p n% l% y! | if not user_uuid: k4 f7 H/ {$ v; x: w# k+ H user_uuid = create_user_uuid_and_set_cookie(response) ; D4 ?3 `+ J5 M; c& P$ n0 x& C! y1 P" m4 c5 K
global topic_model_training_tasks ) V; b2 q. Z( B- |7 Q/ Y o task = TopicModelTrainingTask(text_preprocessing_params) + }6 `0 S! K# j/ k topic_model_training_tasks[user_uuid] = task8 X0 @9 Q1 ^- t5 v1 }% Y! [( R
1 z3 ^- C4 w2 T6 Y* d& S
background_task.add_task(task.preprocessing)6 d9 O/ i+ u0 w0 _* c
return {"message": "已添加文本预处理后台任务"}* J) J1 M+ O, D0 w a
3 t/ l, u1 b/ o$ e) Z, J. U/ K5 t6 O% X+ K: \
@app.post(& |* t N3 W8 R' e% x, B
"/calculate/nmftraining/",. k3 o7 z8 q8 V. _
tags=["计算模块数据接口"]3 g- p1 F3 U' w
) 4 s2 M4 c0 q1 ~0 [, Uasync def run_nmf_training_and_tsne_task(nmf_training_params: NMFTrainingParams,/ T6 @0 H" Z8 M2 R' ` l9 W% C9 Y, f
background_task: BackgroundTasks,$ m/ E* r: T2 F, W. m4 y* S8 L
response: Response, : {& y, S2 z, W( w S user_uuid: str = Cookie(None)): " n3 Q# O+ b8 ~7 n if not user_uuid: ; n% Q5 {$ \& R9 j$ P& Z user_uuid = create_user_uuid_and_set_cookie(response)( ~; ~6 ~) m2 _' M5 `
8 C( {* {0 x) A7 Q# C6 n global topic_model_training_tasks1 V% c% G% P. J3 d' k0 c! z
/ K) }* m+ K$ ?- p. Z! ~/ j; D. ` if user_uuid and user_uuid in topic_model_training_tasks: + M9 Q' ^6 y, l/ A task = topic_model_training_tasks[user_uuid]7 i; V. p" N* R
if task.text_preprocessing_progress.status_code == 2:" s1 Z. ?2 e8 O% h$ v
background_task.add_task(task.nmf_training, nmf_training_params) ) }9 u+ e1 Y6 B2 `' N+ {& w0 F return {"message": "已添加NMF主题模型训练后台任务"} % Y! i# t! ]2 o3 g9 `0 }& n else:# o2 O8 a+ P# [& a
raise HTTPException(status_code=404, detail="请先进行文本预处理任务!")" m7 b4 Q- y. ~! A
else: 2 ?! M# I5 a$ j: N1 |, I raise HTTPException(status_code=404, detail="未找到相应的训练对象!")' Q4 b$ O2 Q+ j# _, A W" u& w1 u
$ W' e) v( Z5 l: t
( I3 [7 ^# M5 A1 Z@app.get( 6 t" L" N0 y s7 {% s8 J "/calculate/nmftraining/keywordsearch/",/ i: l+ q0 O0 {2 O" `2 ^' \) k4 T) s
response_model=KeywordSearchResult,9 @5 g- Z3 |, N5 t2 s) @
tags=["用户交互"]: ^* |( L# Y5 |6 J6 Y) l& @9 `
)* [! J" m/ Z* d0 n1 ^" i8 w7 Q/ V
async def search_keyword(search_text: str, $ p$ h( [# B; |9 c# Q" G response: Response,) f! [2 V" w% U0 @- t
user_uuid: str = Cookie(None)):( l/ n7 W6 ]" V$ O% k" e( Z
if not user_uuid:8 ?: n3 a! X9 S5 n$ r7 v$ z
user_uuid = create_user_uuid_and_set_cookie(response) 0 b$ G0 @# Z( b" }8 ?1 ~* t# a6 @
global topic_model_training_tasks v' y- p0 z+ o: |$ n$ G
; B3 Q F/ T- }, f
if user_uuid and user_uuid in topic_model_training_tasks: 9 m9 v$ y, ^$ Q task = topic_model_training_tasks[user_uuid]8 p/ s! N" @! [8 ~! o% H) s
if task.text_preprocessing_progress.status_code == 2:' r. j2 m6 {9 ]1 d( H) \
search_text = search_text.lower() 8 b5 n0 y) x1 z& B0 T; [/ F T bag_words = task.text_preprocessing.bagWords% `$ f- c# ?7 g! X! l9 ]
keyword_search_result = KeywordSearchResult()4 r# N Z3 i7 a1 h* T" S
for wi, word in enumerate(bag_words): . t- q( V. j& X8 `! |! l J; h8 E! T) j if search_text in word:: T) z, g# D8 A8 u1 ?% p, H0 w' X
keyword_search_result.word_id_list.append(wi)9 k) j% c+ k) O5 u; c
keyword_search_result.word_list.append(word)- [4 A/ ]8 U( W
return keyword_search_result , }8 l: b% ?9 q8 T W else: ; w8 m" D2 @# N) x0 `% r* \ raise HTTPException(status_code=404, detail="请先进行文本预处理任务!") # d. k7 |3 x% J) ~, n/ |" Q else: # _' n$ U0 e# m: z8 E8 [' f. ? raise HTTPException(status_code=404, detail="未找到相应的训练对象!")) S/ c4 L8 }' G$ {2 ?& R; c; c- U
* S) r7 p( c' p2 H8 m+ T# Z
" P& |, _' A) l* l@app.post( , T3 G: g& q9 ]9 ~ "/calculate/nmftraining/topickeywordoptimization/",* v7 `9 H" Q0 x( S! ]
tags=["用户交互"]+ h Z3 |- y& I* M3 |. G
) - { {# r2 _* o" X8 ~async def run_topic_keyword_optimization_task(tko_params: TopicKeywordOptimizationParams,8 Z3 x1 t! p! k
background_task: BackgroundTasks, * P. F0 K/ ~: Q! J ] response: Response,) H2 J) u& b! }6 z3 u2 t$ n9 K
user_uuid: str = Cookie(None)):) N% g- `. a& `
if not user_uuid:$ T0 O7 w$ ~4 k5 P3 k2 e. {
user_uuid = create_user_uuid_and_set_cookie(response)( Z* q. F' y0 x5 Q5 F
4 i6 E9 h: H- E" G
global topic_model_training_tasks 1 ^/ s o% T5 U: _( e) _ 0 K4 G R6 @* I' n6 Y% ^: V+ ` if user_uuid and user_uuid in topic_model_training_tasks:& n/ }* d" n( G8 V" t
task = topic_model_training_tasks[user_uuid]5 J& |, n4 c, \ @
if task.nmf_training_progress.status_code == 2:2 W W2 Z e k0 V/ O+ ]2 d
background_task.add_task(task.topic_keyword_optimization, tko_params)+ A/ K% |5 F: |! Q: }
return {"message": "已添加主题关键词优化后台任务"} & X& q9 u8 u" s9 y& I5 B else:% r' v( t" X7 R" c( L
raise HTTPException(status_code=404, detail="请先等待NMF训练结束!") 0 g. L/ A4 r; R$ [ else:- b7 ]; }( \7 {, @/ T8 F& ? d
raise HTTPException(status_code=404, detail="未找到相应的训练对象!") A6 s& h. }5 |. ~. l
) H- n" l6 s" L
, h# [% S9 [. @2 ^5 Y, \4 B+ i6 k, ~
@app.post() k! J* u6 K( A3 N1 X1 M: ]; k
"/calculate/nmftraining/topicsplit/",4 o1 N9 k3 S+ }1 h
tags=["用户交互"] ! k; U1 h" Y# X! E' I, Z! ]+ Z)* f( ^ }$ d7 F' F
async def run_topic_split_task(ts_params: TopicSplitParams,$ ~# n3 Y# T" P. m1 ]3 o: M
background_task: BackgroundTasks,, S. ^5 t" o( o1 `: r
response: Response, , H& I8 s) N x0 V user_uuid: str = Cookie(None)): ! n& o6 z" `2 z( |8 f if not user_uuid: - `0 Q5 p8 a) Z) b( L# b$ k user_uuid = create_user_uuid_and_set_cookie(response) ! Q H( @* L1 V9 M& B' K, Y: o! n8 b+ q* r3 `$ h2 L/ w
global topic_model_training_tasks0 O+ [' x, d% C2 l
( X1 ?' T% y1 p- n# d' h2 V if user_uuid and user_uuid in topic_model_training_tasks: ! {- r! | V' W" t2 N9 q% {& l task = topic_model_training_tasks[user_uuid]7 X4 n/ K7 I# \
if task.nmf_training_progress.status_code == 2: - I& M! h0 [3 F! S! y4 f$ M0 ^ background_task.add_task(task.topic_split, ts_params)4 S6 g8 U# q" H( s1 k j! t' ^
return {"message": "已添加主题拆分后台任务"}# K$ o: V* |% f
else: + m. N- l% [% f raise HTTPException(status_code=404, detail="请先等待NMF训练结束!"), Z/ X! G. N+ t" X% O, o* x: W
else: 4 |5 ^2 \7 [8 {9 d9 M raise HTTPException(status_code=404, detail="未找到相应的训练对象!") ' S8 E! u% e: h9 }/ {! L* W: t8 N9 l B5 A0 u
! b% J9 H" Z( }6 u; i
@app.post($ N7 q6 r0 I l u5 J2 y: X; x, N
"/calculate/nmftraining/topicmerge/",( w# K. ]# [& O$ U4 ]% o3 ]
tags=["用户交互"]8 K, ^0 ?! j# \; h, n" n1 n- Q
)! j+ p+ C: I0 h# t+ k2 q
async def run_topic_merge_task(tm_params: TopicMergeParams, 6 {" h( l1 x- v3 {0 Y3 W background_task: BackgroundTasks,2 C8 W9 X! L3 ~. L& }) q
response: Response,: I3 w$ P" X# _9 h3 |
user_uuid: str = Cookie(None)): . l; M; h* W. M if not user_uuid: 4 A. {' n+ M& [0 f user_uuid = create_user_uuid_and_set_cookie(response)5 v" a! ~" e; F# l5 Y- p8 D! o
" r5 {+ W( v3 r- C2 f0 w% d* \! o
global topic_model_training_tasks : y J, N! u- x ' S3 ?3 n5 Q+ N if user_uuid and user_uuid in topic_model_training_tasks: F! G2 C. y7 J; L2 I
task = topic_model_training_tasks[user_uuid] 9 l& X; t, ~/ u& r/ j3 z if task.nmf_training_progress.status_code == 2:. M: _2 Y. J9 W- }6 H6 g
background_task.add_task(task.topic_merge, tm_params) A1 {$ N# P" ^7 T; ] return {"message": "已添加主题合并后台任务"}3 {1 ?& Z2 K! w0 j+ F
else: ' e% B1 t" K" {+ } raise HTTPException(status_code=404, detail="请先等待NMF训练结束!") * N3 d' ^% ?5 h else:2 D2 k) M0 K8 |1 w! B; T
raise HTTPException(status_code=404, detail="未找到相应的训练对象!") . H X: I4 {$ g" P4 A' Z: g, j 3 \; j% U8 }6 o7 M5 a: z/ C, ^( }7 G" r% @; V
@app.post($ L4 K; G( m* j- s
"/calculate/nmftraining/keywordinducedtopiccreate/", ! t8 x1 ]) c- l: O% q& B tags=["用户交互"]6 d2 y7 \: R1 t
) " T7 a" G- ]3 H6 a$ o% ^async def run_keyword_induced_topic_create_task(kitc_params: KeywordInducedTopicCreateParams,4 v/ Z0 d* [ _. m# v
background_task: BackgroundTasks, ; u9 i% L+ n( X3 P response: Response, 2 k2 t+ x$ ?0 N8 Y y user_uuid: str = Cookie(None)):7 }' m3 @) y# t/ D. M
if not user_uuid: $ j% q% ~/ T) N1 z* _7 ] user_uuid = create_user_uuid_and_set_cookie(response)6 V! `# Y5 `7 q1 H2 ]' C
) g; C- P- d. n- m
global topic_model_training_tasks 7 u! z* O3 \( ~ E) O- I& x3 h; c6 b) N: m& {% a2 w
if user_uuid and user_uuid in topic_model_training_tasks: ' V3 p! i2 {8 k" B9 P5 N, V0 ] task = topic_model_training_tasks[user_uuid]& X: a9 b1 Y1 H9 i& M
if task.nmf_training_progress.status_code == 2:3 U9 A' G* g4 Z2 o5 W% V
background_task.add_task(task.keyword_induced_topic_create, kitc_params)3 d0 V- T+ K2 H" U8 [
return {"message": "已添加关键词诱导主题创建后台任务"}* Q( L0 S% P- K& g% T
else: 6 m* ^' ]8 ~4 ]- h; {/ A4 n raise HTTPException(status_code=404, detail="请先等待NMF训练结束!"), ~/ w9 n7 d8 |8 R2 H" v4 X+ @
else: 0 S5 Q0 Q# n+ q) ~+ r, `$ y raise HTTPException(status_code=404, detail="未找到相应的训练对象!")0 w( b X" \! ~) Y1 D
. a0 `' D7 W3 |+ m
* L( K; m9 { ^! m9 u
@app.post( $ O9 q1 ?% t1 Z4 N "/calculate/nmftraining/documentinducedtopiccreate/",0 b- R% p$ G7 o8 R c7 V
tags=["用户交互"]1 A9 |! l, K1 T% b: x
) + w, \9 Y$ {( O- Q' |9 B+ I, sasync def run_document_induced_topic_create_task(ditc_params: DocumentInducedTopicCreateParams, $ a* r: s+ ?5 O background_task: BackgroundTasks, - Z/ \7 x: h' J* M" ^+ V8 w6 Z response: Response,# t# B+ M- j) W# j# Q7 M
user_uuid: str = Cookie(None)): - a, H; R! [& f) L( w if not user_uuid:! `. @- W9 B, Y9 M: X( d& g
user_uuid = create_user_uuid_and_set_cookie(response), ^) E% j8 P2 L* ]
: v- |, v6 O+ K( ^+ A global topic_model_training_tasks# j3 Q8 H' n: B) g2 X# K# H3 w
6 O z' y/ f) A Z- g
if user_uuid and user_uuid in topic_model_training_tasks:( t: o8 W; y: x3 E; z9 p$ f
task = topic_model_training_tasks[user_uuid]5 S+ Q x+ D4 W' L
if task.nmf_training_progress.status_code == 2:2 R0 ?6 D F8 C6 C
background_task.add_task(task.document_induced_topic_create, ditc_params)) p1 }$ F" k# U. d
return {"message": "已添加文档诱导主题创建后台任务"}7 g% F2 s, N, E8 @: H! c+ K- l& i b
else: 7 J4 e! Q3 c6 ]. R7 K4 A# @ raise HTTPException(status_code=404, detail="请先等待NMF训练结束!")0 l, h8 h9 S% L' x8 S3 F
else:) s. x8 i- T0 O: f; q/ a
raise HTTPException(status_code=404, detail="未找到相应的训练对象!")" A8 Z8 V! F8 k8 U& T! d% F
0 ^, \+ u2 N- m' \' {
- Z2 }+ R. t. i3 d% W& N9 D@app.get( # ]1 M1 [/ W1 y/ k8 Y "/calculate/nmftraining/newdoctopicdistributionpredict/",9 {, {+ e( B7 X7 A$ f" I
tags=["主题预测"] 1 V) [ x$ [0 N* I% T)7 w; A: }4 z" C0 |' ~
async def run_new_document_topic_distribution_predict_task(! [# `% a- e- [
new_doc_text: str, . J$ p7 [' a. ?5 O# S8 w background_task: BackgroundTasks, N& h( b; e2 ?% Z9 S3 j* [ response: Response, + C' o: \. e4 R, u user_uuid: str = Cookie(None)):) {: _% v' Y* ^& K( U% Y, T
if not user_uuid:( h6 b: M8 O' l3 A9 J7 E/ c3 ?5 J6 E
user_uuid = create_user_uuid_and_set_cookie(response) D. ~+ t& D, T5 t6 q
1 |8 e) S1 J2 X0 O6 I7 E' Y global topic_model_training_tasks . R. i9 N7 ~, R; ?2 B: }/ ` 7 T" L d/ ? b+ V if user_uuid and user_uuid in topic_model_training_tasks: ( y$ }+ n% o* H- S2 T* k( O task = topic_model_training_tasks[user_uuid] $ J" j: V! V: y1 p4 W L- _" h if task.nmf_training_progress.status_code == 2: 5 j, }6 n$ ^& M! _. ]3 {* ~7 C, l background_task.add_task( ; f9 o7 G1 {1 X( O8 _& T task.new_doc_topic_distribution_predict, & Z% y' i2 |2 ?, l new_doc_text, X2 f9 Q. V2 }4 k6 P) a+ I( g
) * P: V5 Q6 [- F B- G' c( T+ k return {"message": "已添加新文档主题分布预测后台任务"}* |" n0 X& r" `% u, ]; g0 X
else:( g ?/ K: j, l& v2 `. x1 E5 r
raise HTTPException(status_code=404, detail="请先等待NMF训练结束!")% r, j8 w9 U% J5 c" @$ Y
else:1 h7 I l! o: X2 A) \
raise HTTPException(status_code=404, detail="未找到相应的训练对象!") - Y6 x" ]5 [ k& N0 @' b / H# q6 v0 H& u+ p( F5 s" J" [ 6 w) ^5 \. {" I5 i( K. B4 G@app.get(- A# ^6 c' A- k/ [
"/calculate/preprocessing/progress/", - P! J4 L/ ?9 B0 s; n6 P1 x tags=["计算模块数据接口"],% L# J, o" w, i4 w, y" I
response_model=TextPreprocessingProgress % o$ } S! j6 Z# U1 @! K)$ X& K$ T( f# d' _, R% q$ u4 W
def get_text_preprocessing_task_progress(user_uuid: str = Cookie(None)): * }$ I* Q. r$ A \+ b global topic_model_training_tasks ( f# d* p8 ^) N! t' e2 A/ ^0 c. P . Y4 B- O( \7 m( P, y9 c if (not user_uuid) or (user_uuid not in topic_model_training_tasks):4 M% u8 R$ ^$ {3 J0 m+ v0 m$ M5 q9 W
raise HTTPException(status_code=404, detail="未找到相应的训练对象!")7 v; x" J. Y. K9 P0 p7 Q' u
return topic_model_training_tasks[user_uuid].text_preprocessing_progress + f$ h" [; G( l7 v0 _2 @/ u% s x3 ` S) s
2 q8 M) c3 q `: ~@app.get(, X3 M- z# i- E! q' w; z6 F
"/calculate/nmftraining/progress/",' `7 v& S* [ N: P6 |6 D; g
tags=["计算模块数据接口"],$ _2 ] u2 A: I# \; [/ U
response_model=NMFTrainingProgress$ c: ]( l' \+ U+ t6 u& A
)+ |: \. v' z! M# W2 v& D; o. ~
def get_nmf_training_task_progress(user_uuid: str = Cookie(None)): 4 \" l. j' [- F; L, h8 A global topic_model_training_tasks; f: Y. |4 ] Z/ }9 F) h
% A9 |( F& `6 P5 @$ W0 l/ s- S if (not user_uuid) or (user_uuid not in topic_model_training_tasks): ! Y2 I" m \7 Z: q {! u, i raise HTTPException(status_code=404, detail="未找到相应的训练对象!")7 f4 L& I- o, c4 E3 W0 J* `& o
9 d4 T+ K9 t3 ^" u( d task = topic_model_training_tasks[user_uuid] ; ?% f. P( W! Z [ F if task.text_preprocessing_progress.status_code == 2: 4 o1 m9 c9 A8 m7 r/ _ return task.nmf_training_progress1 \ }( @/ |, c: [( O
else: ) E5 m. k. `4 q9 u raise HTTPException(status_code=404, detail="请先进行文本预处理任务!") * [+ j) w6 o" y/ h, x 0 C9 k- ~7 |% M7 E; i, W( j& y+ |+ B
@app.get(. T2 c# |& t, K8 b! f
"/calculate/umap/progress/", 0 ~" s" A$ h& B( l/ S) }, } tags=["计算模块数据接口"], B, s* A+ ~$ w6 O+ T- s( z1 M) o, q
response_model=UMAPProgress $ s; I9 l8 ?" ?1 _) ' }1 v: f6 c1 R$ V% D& ~# ~def get_umap_task_progress(user_uuid: str = Cookie(None)):9 k2 b+ }: {8 c% S
global topic_model_training_tasks / Y) D% N0 i7 F6 q; u / _3 X7 a5 i5 S% v6 G& T if (not user_uuid) or (user_uuid not in topic_model_training_tasks): 7 r8 J7 ]0 |7 Z9 }+ W2 Q raise HTTPException(status_code=404, detail="未找到相应的训练对象!")& p3 q) L/ u! L' B) b
& k, m- b0 Q" P; n3 s task = topic_model_training_tasks[user_uuid]6 I! x4 y( K/ O( W# B) e% {
if task.nmf_training_progress.status_code == 2: . L9 Q3 h$ |& c return task.umap_progress. t; d9 }( G: q! {: J) a
else:- M |6 M* c* G" k# h0 t, R
raise HTTPException(status_code=404, detail="请先等待NMF训练结束!")0 Q# u- d# p+ Y/ m9 j( c
/ E, P; o5 l$ Q, V. f) H4 T
/ q% D9 g1 |7 @: D4 N
@app.get( & i! V: C- e: C) p. I8 m2 Q1 B, ` "/calculate/nmftraining/predict/progress/", $ U. r9 M# ~9 B q tags=["计算模块数据接口"],8 S9 y- v2 I( m! a# j
response_model=NewDocTopicDistributionPredictProgress 2 q2 G3 l7 V2 Q! M' d& @)- r/ v) R$ b: u$ `. J V+ {
def get_new_doc_topic_distribution_predict_task_progress(user_uuid: str = Cookie(None)): ( z. V1 w; q: Y; N6 J6 l: h global topic_model_training_tasks / x5 G) @1 c6 o& c, f Z" J$ L; f 5 a0 {# M, ]2 N6 e9 B# _( d if (not user_uuid) or (user_uuid not in topic_model_training_tasks):; g) F7 x& O) `8 P- m, @) H/ y
raise HTTPException(status_code=404, detail="未找到相应的训练对象!") * X% s9 l* O$ U/ E0 _ E 5 e/ g9 J; S+ ^: y* f6 q, e8 g$ c task = topic_model_training_tasks[user_uuid]* Q6 Y+ _( q2 r1 u7 q0 D3 N% S7 e
if task.nmf_training_progress.status_code == 2:3 ?6 \7 ^* M$ i$ @+ M
return task.topic_distribution_predict_progress , N5 D* {4 W5 B: R1 z2 @: O else: $ |$ L5 O3 `; [2 ~5 l6 F" S) Z raise HTTPException(status_code=404, detail="请先等待NMF训练结束!")5 E( `) a1 T# s. Q7 _+ p
$ v1 Z+ `8 E, N; h% Y3 F L " r( {9 P2 t( P@app.get( # r+ z9 V% \) }1 W [2 I "/calculate/details/document/",. Y9 s+ s+ ^% J$ d
tags=["计算模块数据接口"], * ]( w E( S/ V$ x) z+ J% [% k response_model=DocumentDetails ) A0 q: P8 e" Y# b# | C5 \+ t2 i) + R+ f6 S8 `/ F. _def get_document_details(doc_id: int, user_uuid: str = Cookie(None)): & P- X' ~3 d/ g) J2 U& Q# X$ N8 w global topic_model_training_tasks% l \4 m( x2 R5 w x/ M
5 Q9 a8 S. I) E: n: o* J
if (not user_uuid) or (user_uuid not in topic_model_training_tasks): 5 }) i$ _; g( F! M' ?% f raise HTTPException(status_code=404, detail="未找到相应的训练对象!"); ^( u, {3 x9 p3 H% X3 X% z
' v% }* m& H. R task = topic_model_training_tasks[user_uuid] / ^$ m& G; [8 u; e if task.nmf_training_progress.status_code == 2:2 H/ z7 D5 @& f/ s' [7 [7 `$ I, i" l
return task.get_document_details(doc_id) F. J2 ^+ ?$ f
else:1 S2 Y; }2 l+ @8 @# v: V
raise HTTPException(status_code=404, detail="请先等待NMF训练结束!")+ C. w V. I' v8 `7 @: i
6 h4 m, A/ w, @, | 3 [8 g) [: d* \: O1 a& g@app.get(4 O9 K$ X2 @8 P) u( S2 h
"/calculate/details/topic/",& C# V; W" U" H) m( B
tags=["计算模块数据接口"],( Y2 ^* l% \7 b5 p# `% w7 ]1 ]
response_model=TopicDetails 8 k' h' |4 F8 g)7 I! C6 }: F! o/ ?' ^' o9 K0 n/ [1 h
def get_topic_details(topic_id: int, user_uuid: str = Cookie(None)):5 D! S: ^0 C& A
global topic_model_training_tasks ' b6 ~- v: V( [1 f% Z( q- `, i, c5 o - P/ `- N5 M) Q1 s if (not user_uuid) or (user_uuid not in topic_model_training_tasks): 1 b; s" U2 b @9 h: l raise HTTPException(status_code=404, detail="未找到相应的训练对象!"), E/ H+ [9 S' D# z" |
2 f# I% Q7 ^: W5 l
task = topic_model_training_tasks[user_uuid] + k0 h1 n6 I8 x' u: L& p4 n9 W if task.nmf_training_progress.status_code == 2:4 I2 v0 v& V0 r, P
return task.get_topic_details(topic_id)6 C4 p# f, U* N5 t2 t; M3 Q
else:% n: E. I5 E% l$ g% ]
raise HTTPException(status_code=404, detail="请先等待NMF训练结束!") ! x: S& n5 b) `. S" F, O5 u; T- h& l( C: l) f+ J% t# c$ v5 Y: s
' q# s( K' {# E9 ~/ q4 [( A3 r/ Z* |
@app.get(& P( D) z( Z3 D* s# X# r
"/calculate/userinteraction/info/keyword/", & \% X3 N3 g0 t' `4 V tags=["计算模块数据接口"],; n% _8 \9 i/ v; g& Q
response_model=TopicKeywordInfo0 P7 l, [' S R3 X
)& p9 R8 b0 h, ~3 L: V
def get_topic_keyword_info(topic_id: int, user_uuid: str = Cookie(None)): + @( o8 D1 F6 j2 Q A1 ] global topic_model_training_tasks5 e6 V2 Z+ V2 n# V5 c8 I) l2 k
; t7 `; ^" K4 U$ u* } if (not user_uuid) or (user_uuid not in topic_model_training_tasks):( _! A3 B$ c; S* b
raise HTTPException(status_code=404, detail="未找到相应的训练对象!") , g+ D+ w, u) Y$ ^4 B$ I 4 F0 J9 J- K- ~" H) } Q0 @ task = topic_model_training_tasks[user_uuid] - g) x6 Q0 d% ?$ U. ]6 z" B3 s if task.nmf_training_progress.status_code == 2: ) k6 ~5 G P/ ] return task.get_topic_keyword_info(topic_id)( q- _6 D0 _; U7 m$ d4 @3 I4 H8 Z
else: 9 f# F! z, L* ~; w, K/ K raise HTTPException(status_code=404, detail="请先等待NMF训练结束!") 0 Z1 O* m0 `5 V3 K7 Y Y& G O6 C: a$ k$ Z" L5 M1 C; W. J
. E; ]! ]# J' T" X/ V6 A@app.get(' _+ {# v/ i% k, I5 p
"/calculate/userinteraction/info/topicmergekeyword/", - L. o/ e6 Z% o6 q; g tags=["计算模块数据接口"],9 h" e: e* Q4 V
response_model=TopicMergeKeywordInfo$ M( m) u& I, l- J5 z% h) f3 e+ j% [; e
) 5 Y' [2 `( M" x9 n2 b) edef get_topic_merge_keyword_info(topic1_id: int, topic2_id: int, user_uuid: str = Cookie(None)):8 X1 l8 t2 y% K; U8 l3 i% H
global topic_model_training_tasks ' ]" Y; D* L# _& F 0 e' o, X- ]# G4 D2 Z. `! n7 {1 Q if (not user_uuid) or (user_uuid not in topic_model_training_tasks):# O: o, @# x- z
raise HTTPException(status_code=404, detail="未找到相应的训练对象!") - g" s. n6 T$ m$ F $ ]! m$ Y# K6 c4 ?# ~/ y task = topic_model_training_tasks[user_uuid] % d( c$ u: o. w% S9 f Q if task.nmf_training_progress.status_code == 2:# b8 s* ~3 e. ~9 G& _. |& b
return task.get_topic_merge_keyword_info(topic1_id, topic2_id), n, |8 O) q! N8 a: S( f
else: $ e5 n6 s6 W: [ raise HTTPException(status_code=404, detail="请先等待NMF训练结束!") ; Z3 @4 E1 [9 s1 O, X! Y; r6 f$ C# q5 \ [8 Y0 e: G% T
0 `) p+ w! O3 m% `/ k% r+ F2 `; O
1 / W1 t o+ C, S! L2 _3 A2 `1 x7 |. S$ z3 y7 j5 Z8 g
3' T4 [2 ^6 u) T3 ^* q
4$ I, k2 X( Y$ [& O* l/ R' h
5 2 ?. v8 T# g J# K4 B6* d* H* P+ @' h( M! e" `
7 & I. H- L3 @: N* C/ i g' O8 B* J8 # c% I) W5 U8 o, s. r$ \9 3 ?! L- O: `9 X; i& k# \5 \10 1 B9 Z% C8 [- ~7 v( [11 " X1 n) D4 G. `" ]5 B3 ?12 % Z4 l9 n# v( r# w: K6 ~13 ( b% \- d' o+ a8 J5 Z14 ! N- i8 i" S- h1 _ i0 i15 & H; v" N. p8 u6 Q! R; v169 z5 h% ^/ N) y5 ^2 I* l' k
171 ]/ N+ x) C) q* Q
18 6 m3 E1 y. c3 y% R, p; W19* T: b F- Y) c- U" ]8 w& X! A. r
20+ y) D+ z7 B G' [
21 : I, p. b3 S; c8 c22 , l4 U* q/ b4 Z- M- r( q236 Y) B% ^( Z: {7 N+ L
24 # z5 w; B) s+ K7 t! t- z+ T! {25 - i1 ^# g! v2 J) [) X1 P! _26 & ~( d4 N$ t- f7 F( u; \27 - ~2 b! x9 d4 ]2 g R1 B1 ?28 - _1 _! @! r9 ^. ?( E$ i29- t6 x, l- o% y- k5 S9 ]
30. [% I7 m5 \3 h7 I" ~8 K+ z
31- y2 H& c! C, [$ @9 o- \* e
32; c7 a, o8 E9 h8 O; n
33 G* S8 B- h/ C# H% I1 W34 * l" `5 M* g0 A% B+ x* b35& B- i+ v+ O& u% K* W
36! W8 b. R1 G4 `; A6 t/ X! g' O# d: S
37 7 o& I1 Y+ F/ v+ \; C- K38 4 g9 O9 X% k/ S3 k# N6 B39 . U) D W0 ?0 K) a' u( M40 - {! v# I9 \9 x1 ^9 h& S, E/ k: ^41 - e' D: g8 t8 q425 J7 x( q* _1 q8 f/ L. V( m
43 $ B1 s1 ^+ q3 ]/ s445 h% y; v) d/ d `8 |6 h0 g* z$ a# }, d
45 6 V, S9 P7 B' ^% t9 z5 o% j9 q46$ H" c3 Y( f* n x/ y. f: [( u
479 N* R; ?2 @% N B- Q
48" F* {- G$ F/ b) a! N
49$ ?3 H: v; P; Q3 Z; O& |
50 ) h4 |4 s- _% @. B; d: ^ c/ t; O5 u518 k1 t, | P, S6 ]! W3 ~
52 L7 l: b; x4 r2 }# V+ [& I$ v) z( q
53 1 j' W! @% b6 p3 M k/ [, O54) O0 Z/ n/ n6 ]7 x- l% @0 W
55# ~3 b) [ V& t; l( J
56 9 a. h* ~ b/ ~5 x. o576 _1 w0 z2 |& n5 d; b4 H7 u8 F
58 * a0 B" M% J' W59 q7 ~4 I7 k6 `% x4 U60 / ^" Z; d, S# u1 Q& r/ x9 b0 f61 ( M& g8 {( E! E4 L62 + l i y6 O! J7 F# |633 Q1 D0 q8 {2 U2 x
64 ' W4 g! S$ D& @! U65 $ L2 c+ w/ t; o. A, S664 ] W: ]9 |+ {# `/ m
67& l/ E" k9 U" V' j
68 4 g8 p: o! a4 W3 g5 U* U, c69' o& K$ v0 u6 i+ e9 |1 Y7 L/ B
70) ?* s6 ` }' f. R/ t
71' K4 c: y5 T# T: u$ U
728 L8 A) O/ l4 b7 A) J4 Z; D7 d0 X8 R
73 " C+ I1 |& q7 O- G$ f, F0 m742 k& C( t9 H0 ?5 F
75! j7 K1 X( [) y8 c+ y6 Q7 r4 l
76( e% u9 S9 {: g5 V. {6 C
77+ r# s8 _& A% i- ~ l
786 d( ~" r+ u$ F4 i3 }) n
79( u% a, ~' Q$ l0 z
804 ~! f' J+ _1 R+ R) y
81' `, \( t! |+ O/ f) \! ^9 P
82) M* x1 K- J4 m: j* l5 `# ]
83 + B: d2 e3 i) j, [( ~# |+ H) K( S/ i/ L847 m8 e& H- @+ x, b& Y- `1 r
85 U, W) f9 Z2 t; Z1 @
862 ~: o: s" G4 L
879 F# E8 [1 Z, F( Z1 N, R! N
882 |5 Q$ r5 R5 v: G" K
89 ( f3 @4 j4 G7 e d! ~" K' Z90) d0 _) `7 d7 N& C, V
91$ A8 x; N# A& F: Z- o
92/ i) K1 X3 V& H: k
93 0 H6 l$ A ?& ~# w94 : O9 v1 m/ z& T5 y8 G956 S0 D5 k0 c# k3 V
96- W r& `. y/ e# M+ [0 r
970 x6 b/ @ a. B/ Z
98 - Q8 w0 p* i; p7 g- Y( w0 c99! s( u' N# W0 @- V* o. Z1 [
100" W$ ]+ p, }( B b* ~; J/ k
101" w. g6 S/ d. D, a; Q
102 7 q6 \- M1 C1 e+ d9 M2 g103 3 C7 ~' P* h8 h- O4 m3 T# x104& q7 S6 o7 O O
105 * l1 f# }8 I9 _7 m' }106 ( N9 ]1 p R9 G; d% N107 * s; V7 I; F% W6 W4 A3 z1086 S4 j: ^0 I5 n/ j
109 * z1 b8 n2 T, M& P( M& }110( s9 r1 v4 e6 |7 G- S3 h6 O& ~
111 / d* e Q" ~+ w3 i112 ]1 f' e1 L# r0 d$ G# S5 d9 p/ Z113 4 z7 w& q: S- p: x: t+ F114 5 T" ]' Q8 ^$ j) T% ~: d O115& V$ G/ {1 K- [' ^; ~% x3 D
116. ~5 G" M4 G) I# v$ o& W
1179 x; z5 `1 A ?0 z: @' a1 d/ j
118) i4 O8 D5 W8 f: `, D3 m8 S
119 . j3 V# h/ w j) i3 c120 " X8 q( [7 d. u9 J4 Q* S121 ' f. b( r- N6 o/ ~( @122 % A! i9 A# E3 F8 U123 0 }4 r+ ?7 ` z( n8 W1244 I4 r& @. k4 c. W. t! E% u
125 2 |& u0 _& M! ~* W126& h# V& R8 Q4 J* j9 x: b
127 + a# p2 i3 F4 Z3 J128 3 i" Q2 I' o+ K& ~/ h9 X; A129& V8 A; K5 T; w6 x
1301 O' M/ W7 K; W3 R; i" q
131 , b2 c7 l- }. x132 " p1 G% P7 X3 r5 P133 1 h0 s% r$ ^0 y* T% a2 W5 b134 7 K8 ]! x3 P) b& t0 V8 V1359 [ p# C- I. B J( y$ y4 d
1360 O9 U: e" }1 X& I, y" m% S
137 0 P3 f. G# M: i X& Y, G138 / p% l# E- A r; Z$ z$ m& A2 p139 $ a4 x9 ]7 w' H! T4 L140 ) M- S7 C/ U- m" I" l141 , P1 m+ T. d) {7 n142 7 o6 l1 a" e, _# h1439 Q( |$ q$ k$ G8 C8 V1 K$ h
144 - `1 t; @0 e* k4 F* A, A1453 e. e% z1 |) _8 o# l8 z
146 z0 s, q7 p+ L f
147& T3 N) X) @; i8 ~
148 * A! i! C. k/ m149 - W% h2 S( x. N& ?- b. Y+ U) q3 G s150 9 _ q4 F- f4 {) Q- f151 9 D+ G7 G3 \/ k2 h0 o" u, X5 h152; ?! U* r: ~; g9 L
153 . b9 U3 ?. D3 ^6 m9 S154 6 Y( X' s/ s4 G) g) L1551 Q3 t; \9 b- A5 v2 t
156 / s3 i% P: m7 \. ?+ Y8 c- l157( T* g, X1 ?' [) M- e, m
158; i/ Y. C3 I* G% j
159 ( \$ T: @3 R) e. {160$ z Q* Z( s. M9 Y V; p& n0 O
1614 `: ^) s, O4 x& p0 q
162 7 Y( s. d3 A& N/ Z! x, C0 r$ }163 9 A8 }" `7 V1 ~7 a164 " t { W. U+ A# c c165" |3 u; x# V% `! c3 E2 ]5 R
166 & r, ~9 ^# r% ]167 3 ~/ k0 e% i4 }' g$ {6 b* G3 T168 b- s5 u" L( k; F* ~169+ y9 l4 S7 J- V0 [3 q2 ]
170 + P: B8 m% _" T3 ?' N1716 l8 J- Y: H. n
1721 G6 p$ }2 f: Y* R/ ^5 `& N
173 5 S8 P' a( V8 _- B1 I174 % {0 a$ \9 l2 ~ m& n: u o! u' g; n175 - Y5 ^1 {# s" V, c3 ?: Q* S176# R9 W; z/ H' |; u% L! `: o
177; ]5 N! }8 ?: w7 J& H+ O4 q
178- ^/ y% B& X9 ?9 U9 X
179 |4 I! W8 t- j) }9 S
180 ) ]1 ]. v/ C. u8 X; b181 + H+ r. i% I- [: F, `182 1 e; z, \0 T0 W5 f! H183$ T" t6 l* ~! `# j
184# {5 I/ S Z4 h' \$ ?; D5 B7 f
185, R- B6 O! O* C/ W! t& d; x' v' r& |
186) r5 a: o& i: H# u6 V
187 : q2 e) k K3 s* j188" h* P8 c6 E. O: Q1 v$ L0 M
189; w. b! V/ {) ~- a! l7 l
190 & c+ W# A; N6 g+ S1 T191% ^) ]# E' X) k* B1 L
192. ~# A) U3 i8 T
193. u3 Q& l1 J. b( f5 W" J( w
194 & i9 Q0 e2 B% J& _0 N9 P" M1950 a5 x4 A: ]1 @4 Z
1961 @. v) [1 [$ F
197* ~1 \5 n$ m" b% N
198' h5 {1 l# g- N% o3 W- ]
199. c" o# C3 P* s+ E1 m
2004 Z# P+ J; K+ \7 {8 r( J: y
2017 U1 W* M* ]! _4 e' S/ t; ]
202 9 e3 E* J& `% u' X9 k+ ~& s$ K203- C2 u$ b3 w$ Y' j8 D
204 9 @% z4 W, i' n2 e" Y: v4 X205 # O1 k3 U& ^3 K9 U) h1 p206! ^8 j$ C2 S3 B+ Q' n
2076 v9 u+ y3 ]2 X
208 1 g+ m4 e1 d5 L6 ^# A* w2099 i, A1 R$ _# [
2100 U' D" d- `* n4 |
2113 t/ t. s% a+ f$ s5 y8 F* L' r/ i
212 * A B0 [; H/ Q213 9 {- a! @. D/ ?: l" D& c& D2141 p0 b# c/ I7 m% p6 ^& r; Y& I
2151 t4 u8 G# ?2 T; {* Z& A
216 {) A) g- n' B% l9 t1 n- v$ d, G217 3 V( I; u1 q) X; e( J" N9 f% [2189 G, s) c% y% G; p, B9 e
219 2 b0 R" h" w6 ?3 m% D! _2 A2203 i+ m3 g) h- b% X7 _. |
221: S2 `) x! ?- d/ W" f7 ]) L
222 . D; \! N7 z) v1 g! k223 3 J; e. m; g2 }/ G: F! E+ M% G224 + c( Z* `2 C3 V. L( z3 h225 3 p4 m }; j# W0 R7 j4 j226 % a" C& F: r4 y) O6 P: r" m% l4 I227 ) m4 K' e+ c- O6 Y228( {5 b2 Y# I& a2 x
229 # C% M& |* l1 [7 @# C230! E; f. J1 _0 [( T$ W# @/ I6 E
231& _! g4 x2 x- o: x! S: p/ t% N2 K
232 2 s% t% T6 p/ }7 J3 N" B2337 h: T5 W$ X- C; D
234 * }' d+ e/ @/ S- U; m# O235 1 j0 d9 u6 I- {, {) m( m8 A* L: y236 8 Q/ M* F+ b/ B9 h/ a7 t237 : t: e; v* |. R( N/ @) V" w, | Q238 4 C, w& a: i5 Y3 O: W0 H239 6 n4 t- W' x' `240 3 \0 e4 H# c' n- N; t241: r! b# G) R9 \& N$ G3 j% W
242 7 y( a" f. e: U5 x+ v5 y6 Z2436 Z( V. {) `! u- B3 P: |
244 # `4 [9 u, j2 M7 O$ x- J9 M. {245" h. {( L9 A3 M0 s
246% \4 Z# }$ R7 d- _
247 ( f& f' q, c9 f! s. _) j- g2482 ~2 B: Q g" o7 j, K' }0 k) b7 C
249 2 T5 A7 D; Y3 V4 p250 # P; j m9 i' P& W7 l5 T251 , X' i6 q4 s5 J( A252, @9 O4 I' y! ?& _5 o# W
2531 {. t2 s1 T& E8 y, j, _/ `
2546 j" y! M; m" h |* J2 m6 [
255) B4 H/ G8 R2 p8 T/ u
2563 y' f {. r: Q: @2 g8 K2 q( \9 c
257 4 D7 K7 A, L/ D$ k258# y: K( T9 o& f/ i
259 3 B4 i7 T6 \, S( v9 H/ W7 v4 o260' u+ f) L0 `# ~' f2 t! O
261 / k0 a; r u" [! K262 * h" L+ M4 J, Y6 w9 I263+ Q% w! @/ K% |9 S% |/ ?$ s7 y& ~+ }( U
2647 F" Q: s8 i6 [4 S/ j. z s9 b
265* p" F: ]6 X0 N% i8 f; _1 z
266 , a0 z" M# L) S( \8 h1 E" }267( m9 Z9 @- p+ K' N: |1 T
268 0 h" l: R( B, c" C) u8 a' G2691 `/ O7 o Y$ B6 B
270! p: t) {/ b, H/ X* I2 K
2713 d1 d5 _: a8 M, @
272 % ?; O, n! S0 L' I7 F2734 d' D1 S, D1 r. M
274 , C: K: h2 I$ g- m275 ]$ N( Q( U6 a2 y% M276- w3 a* V! A% ?$ h! n; B
277 5 k) H" _: {, J+ k; d O278 . x' X( p( a) M4 W7 e. f7 ~2797 l9 N, O8 R' A: K+ J! C$ \1 {
2803 _& H' M6 L3 C- K
281 / P4 Q u" }' F! n+ f/ {282* A9 s5 d6 r) g9 F
2830 l. L6 J' {% N& z
284- P, w1 h- H9 P8 j) ~1 M/ N
285& b4 }" B7 d0 T" ^: R% o( C
286 # m b: z$ G: K8 K7 r287 ; I% X/ D- N* [2883 V" x+ e, u6 f7 N9 ^
289 9 L" U5 z9 ~5 T S/ x/ `" t# |; A$ C2907 G+ a! J# `& E
291 i2 d- C, X r* ^( _
292 / h( `- F8 ]/ @8 M3 B+ h293* A- y' Y1 v p- f9 h- Z7 X" b" n! l
294 ( D7 R, W1 S1 L8 r2959 q$ B) M% H2 R' F
2961 J; w1 d8 R$ R" F0 f& `, C& w
2974 e8 X- S4 r+ _# P9 E! P& l
298 9 \$ Q2 B1 W2 m6 g4 j299 . {4 [( r9 z6 W, \( W2 F300 1 o- g J% Z* i4 y4 J301 6 N! X$ _) |' j, C( V302 + v. O9 \ F6 B3 P* t303 ; s. z# b# z% x* F. x- E9 ~304 + B! b7 ~2 u$ l0 d2 ~305 $ j; M5 J( x7 t306! w* K8 k$ s% r* \3 P" O6 A
307 & {, [: y- y+ d308: O+ x0 @* z% G$ n/ s+ u3 k1 C
309 + `0 z5 [9 q! v c- P, A5 J: [310 ! K8 }1 ?) Q, `$ G% |$ a# }$ |2 i0 b3113 C+ g& k- x7 ]& Y4 f& [3 B' J
312 ' Y$ |6 _3 }5 X" J6 g( I+ M! G% _313% w. Q. v/ d3 q! g# |" w7 U
3149 X% s# e5 }0 o+ k
315+ O6 A1 p# `. \. e V3 x
3165 R- J; @9 P$ U
317 & b$ g; ]7 A2 M8 R4 P/ ?318 " } u$ V/ ^4 b9 G319 - l3 M& P0 t7 C% [320 Q- p, Z+ g& o. T' y- e' @
321 3 A9 D; v3 z8 t* _0 Y/ k& y322 ) i" t0 x' ]. D* g$ r4 r/ u. H323! G4 N5 ]# Y6 W7 L+ ~
324& y9 p' [2 \" }
3259 G9 x1 `8 \+ E6 {$ p6 p
326# x9 Q1 a% h0 |! m5 f
327 3 }. D! E) r3 D/ y0 U328 ) I! I6 W; ]4 C- H329: A* u" D2 D# a: A! V
330; ]4 g$ M$ Q4 i. i
331& ~ m5 u9 O M6 _9 a& s
332 # l- q; |) h" {4 @333 ) [0 G {3 H. `7 K3342 X! T* `% }% o7 ~. N' e7 X# S$ _3 I9 ~& w1 l
335- ]$ W. E) w% K$ B: }+ m) d, V. ]5 n
336 * f5 l. q9 p3 B* h6 h- p337 ( W% `( n! Q1 ?# N S338 % `7 T7 m; p6 ?9 D339 8 h2 @ @0 y, D1 B340* y- y% T0 H) S2 w5 D9 Y
341 ) ?- G/ ]7 z" g4 G4 |& T342 " \- r& s( j3 X' I. t343 ; d8 i. U" z. _6 n344 : U! @) ]: H4 b# z6 B$ P5 Y345 : i& m/ U4 z2 S9 ~" ~346 % K& O% J$ K8 e i5 O347* @/ o, E/ H9 b. t6 x
348/ k! H2 F- ?, g9 ?" Q9 F" p
349 2 e3 n* U9 h6 u0 U$ l* S( p350 4 x$ i7 g D+ }351; K. Y2 }! ~5 `1 Q/ i
352 4 y( N1 j) J+ d0 x: P353 - C z$ J' }) r& e5 R' Q354 7 v5 U2 }6 S* N9 F355) E6 p, c2 E$ b. z& q+ h
3567 y3 O- ^, w/ X- p- J5 Q% m
357 9 V: N4 ?% L& g1 d( \358+ g B% }" D C& B$ G0 O$ w
359' Z! H; i" B. ]2 P6 X
360$ a7 C6 S) i7 v2 E7 l2 R( R6 W
361 # {" K, n* x. h. d/ q* j362 0 y7 ?: Q2 G; b& z0 |3632 h7 \ o% Z( a" I. ?
364" ]: B L+ G3 n& L0 m7 B
365 0 }8 V; @( x ?) y366 # D1 f& D" o; z! l' U367 $ B& ]! l1 _$ P$ |$ Q6 s368 ; r( C" k" P. [: |( F369 . W2 {, q% R' s& c1 a370 2 H n7 o0 j2 N( d- ~, b371 ' Q6 N* e# L: d1 k0 l' @1 F- R2 @3723 ~" S( L3 Q( M, ~( ?
373 9 [, c: X$ U) p/ d8 d374 , K; P, I" t' Y7 j! j375 6 Z9 _* K- j5 }# u9 E$ s376 / b" U) D; }+ U377 * k' R- V, [3 l* ?$ U% B3 B" `378+ V9 p7 m+ q( V/ G+ u4 A* h. w
379 0 ~, j0 h0 u4 [' [% h6 L380% ~) V" D# Q: T. I. C0 z" V% ~8 D
381 & F( l+ U1 f1 t O. o$ t3823 K1 b4 h. t" @
383 / N7 K' [0 E5 k8 p3845 I3 x5 m9 C* x4 f% h2 ?5 ^
385 ( G- B; B8 v p386+ T; `. C# Y& x* M6 t' {
3870 a8 Y+ J% H0 W
3880 ^/ j) g( w- q9 v' P
389 ; k B) [ L# A2 a2 k+ ?390# \* k: V) h+ U: n8 p0 k
391, u {4 J. W! v! C- B* q
392$ m% p- ^5 u& U# O3 I
393 9 M/ Y& Q7 [6 _, P! y394" G! f$ D6 N( T- t( D. w/ W
395. v6 P# K' h/ B) X4 s
396' y! D1 \ T5 w0 e- c, G" \8 U' V! f
3975 O& h& _7 Z( j" C$ |+ X
398 4 t" D% N+ S4 G; M" s399: M- y/ Y/ U. I; `
400$ \3 s% v% m) q" Y! C' i4 U
401; [+ L% b I8 e1 k
402 0 b3 M6 S5 U" E) u. k9 P ~4038 v) K) D8 d* P! u: e# D" q
4042 g4 K3 L2 t; ~$ }7 @4 { m. u
405 ! A, d2 K7 x {406 1 E4 M9 l+ K; ?0 E1 B/ W6 V3 C407+ ?% h" b9 G- h( ]% l7 P2 E
408 ! c$ ?0 g5 \' m, l, E$ Y409, M) i1 l( [5 V$ m1 E5 P9 l
410& \# n% i* W: H9 ^/ D1 _
4113 P" }; ~/ z: A, s1 g
412 $ O7 f. t- Z a# a9 e413 7 r* c2 h5 w m4 _/ E& o g$ h414 , W. O0 B! N% o& M: A) l# ]415+ `9 N0 u: G7 G! j+ E$ [
416 & s* l+ ?# v: X& g417 W ?1 z' o$ [) ]: R. B$ f418 , r% v1 G1 x, G419 . m8 u Q& T' \9 J$ u$ ]4204 y+ U P' r" z' k- I" M. O
421 1 {! d& e$ ]- \422# r- x4 x+ p: d) _+ \3 i$ p+ J
423. N8 A8 Z4 j. Y) H' c" n! I
424 ) T, `# R. ]8 i+ L5 v7 o8 ~425 7 Q$ L7 c& F& Q4 l; M426 ] P9 L3 `! s$ k/ c7 A
427 ( }9 i& L, ~9 |* L- \; U" P4287 I( D3 R* ]5 S0 ~) E6 b- C3 W i4 D
429 & e2 N9 J1 p5 |5 g, m4 O9 o4303 d! e. w9 S- p
4319 N5 O+ \- h9 z
432 ! x/ C2 b6 m, Z8 S6 ?4 A4333 Y9 m" W n) M1 Y2 k2 @ w/ E
434 8 M, c$ `# N& s/ B3 ?6 B435/ D0 \ o$ O9 M2 |' d+ k
436 . k9 i7 }/ O. r6 [: W1 F6 I437. O( l1 e( @3 B6 [' K- A& R F
438 * G2 B8 X0 a8 s; i8 R439 4 d* }+ G0 i! _3 `) n$ R440 ( C! N& |0 y) V# I441 X% l7 I) F: G# N! l. v0 g
442 5 X% a- P- n: @$ Y& l4 E443) l& C9 i4 i9 J
444/ w' P6 F5 x( i& V: d3 u- E9 Y
445 Y7 `( o" X( y
446. x" S' f7 p, b& E6 l
447 5 N( e# F; \. c" N# i. ]4489 N% R' W3 ]( i8 q- t
449 1 c, I) J/ C' L% r$ Y7 V6 `4506 e* u+ Z I, x! N- @; v
451 ) z# e9 y1 {0 L* l; h3 v/ s( V452 ( ~3 c4 g0 x7 J1 ~ w; I5 C/ J453 : q8 H/ @& K3 U; e' |* h5 j3 b454 # a" x, ~2 G; | N7 ?6 {7 ` b9 @, H455" z7 M, }3 P% L! v h, Z
4569 v- j0 s$ i( I9 ^ s. b3 N2 |3 q
457* P$ \! b. z3 L: r
458; y2 s/ d+ A) i( _4 @
459 ; P8 e+ W% x6 p5 \5 A4607 @/ h9 G K/ e
461 ]- }5 o0 e) j R" _- N. i- v: |* l4628 E$ E0 Y2 l5 f w+ k, v
463 ) ~5 ?7 a/ D0 I, \4 e+ X464 $ g2 s. I! T3 P% M465 / P: s" s' u8 g, y7 L+ l4661 F9 O: e# i9 |3 ]3 t
467 3 s- |6 w* T, a) ` ?% v( G9 u468$ |6 c8 i2 Q# b8 `
469% A r7 n4 R2 R% N e: A
470 b. x7 x7 s7 N6 p2 N
471. T: ^* h- v, m
472 4 W, L4 ^8 j! ?8 ?& p473 $ D j4 Z; n6 c8 `( Q474 / m7 S. u% r( f1 l475 , ?% W: ]- O k& [, K476 + Y% _' u& y' b {$ S0 ^ 8 Z& _+ m8 I# K% Z2 f& V8 _8 ^) t: r
0 ^" ~5 h" m" y7 O# |
% W9 ` ^" e! [3 w ) r) y8 | L" f4 K% e8 i [/ |+ Y: ~
- V* U6 p/ U2 Q3 z9 Q* M5 T
* C6 T9 o6 ^) {6 X" ^
! v& N9 j; I4 i, |6 X1 f6 w* m
; d' b$ Y& o# s/ }1 m
0 `; \/ X7 J9 z7 A* h5 z4 \+ v
% L' R q2 B! _4 C
# U7 O9 Y2 M' V. }) x# v X
0 [: O) R3 {! t4 ?) Q8 ` l8 q
' _+ D+ Y2 b* a0 f% G& V * K9 C+ }" e* t5 t" Y ! p) j2 Z3 `! e3 }9 P9 y) T$ O ( U: k$ W& v! g0 k! N& V9 J) V 1 l5 E" v0 Y" g, q& D & W! \; r$ R( a3 i2 h0 \7 ?* a( i. I/ @% k+ a( P! i3 c; Y4 I
) l# P$ @5 n# R( `* P, G# Q( m 2 X0 ?% M/ ~& e i0 H& U ) [; `' O7 \" u7 q' c; x————————————————0 `6 C; t' O8 L9 A/ D
版权声明:本文为CSDN博主「biyezuopin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 3 w+ y* Z' ~2 C. ^, e/ T3 w2 u原文链接:https://blog.csdn.net/sheziqiong/article/details/126814021' {! a: s. B _/ U# W! ~$ ]