Files
pdf-translate-web/__pycache__/services.cpython-310.pyc
T

126 lines
8.8 KiB
Plaintext
Raw Normal View History

2026-04-07 23:08:49 +08:00
o
£ÞÔi'ã@dZddlZddlZddlZddlZddlZddlmZmZddlm Z ddl
m Z ddl m
Z
GdddƒZGd d
d
ƒZGd d d ƒZdS)
u
PDF翻译æœåŠ¡æ¨¡å
éN)ÚdatetimeÚ timedelta)Ú PdfReader)ÚOpenAI)Ú current_appc@sVeZdZdZddZdddZddZd d
Zdd d
ZdddZ ddZ
ddZ dS)ÚTranslationServiceu 翻译æœåŠ¡cCs.||_|d|_t|jd|jdd|_dS)
LLM_CONFIGÚapi_keyÚapi_base)r Úbase_url)ÚconfigÚ
llm_configrÚclient)Úselfr ©rúH/home/xian/.openclaw/workspace-coder/works/pdf-translate-web/services.pyÚ__init__s 
 þzTranslationService.__init__Nc
Cd}d|}|rd|d|}z3|jjjj|jdd|dœd|dœg|jd d
|jd d }|jd
jj}|rB| ¡rB| ¡WS|WSt y_}zt
d|ƒ|WYd}~Sd}~ww)
翻译文本
Args:
text: 待翻译文本
instruction: ç”¨æˆ·è‡ªå®šä¹‰ç¿»è¯‘è¦æ±‚
Returns:
翻译åŽçš„æ–‡æœ¬
u你是一个专业的英译中翻译专家。请éµå¾ªä»¥ä¸‹è§„则:
1. ä¿æŒåŽŸæ–‡çš„æ ¼å¼å’Œæ®µè½ç»“æž„
2. ä¸“ä¸šæœ¯è¯­ä¿æŒå‡†ç¡®æ€§ï¼Œå¿…è¦æ—¶ä¿ç•™è‹±æ–‡åŽŸæ–‡
3. 语言æµç•…自然,符åˆä¸­æ–‡è¡¨è¾¾ä¹ æƒ¯
4. ä¸è¦æ·»åŠ ä»»ä½•è§£é‡Šæˆ–æ³¨é‡Šï¼Œåªè¾“出翻译结果u`请将以下英文翻译æˆä¸­æ–‡ã€‚直接输出中文翻译,ä¸è¦è§£é‡Šã€‚
英文内容:
u:请将以下英文翻译æˆä¸­æ–‡ã€‚
ç”¨æˆ·ç¿»è¯‘è¦æ±‚:u
英文内容:
ÚmodelÚsystem)ÚroleÚcontentÚuserÚ
max_tokensg333333Ó?Útimeout)rÚmessagesrÚ temperaturerru翻译错误: N) rÚchatÚ completionsÚcreater
ÚchoicesÚmessagerÚstripÚ ExceptionÚprint)rÚtextÚ instructionÚ
system_promptÚ user_promptÚresponserÚerrrÚtranslate_texts: ýÿü
þø 
þz!TranslationService.translate_textcCsRt|ƒ}g}t|jƒD]\}}| ¡}| ¡r&| |¡}| |d|dœ¡q |S)uæå–PDF文本é)Úpager$)rÚ enumerateÚpagesÚ extract_textr!Ú _clean_textÚappend)rÚpdf_pathÚreaderr.Úir,r$rrrÚextract_pdf_textMs
þz#TranslationService.extract_pdf_textcCs:ddl}| dd|¡}| dd|¡}| dd|¡}| ¡S) u æ¸…ç†æ–‡æœ¬rNz\n{3,}ú
z {2,}ú z[\x00-\x08\x0b\x0c\x0e-\x1f]Ú)ÚreÚsubr!)rr$r9rrrr0^s
zTranslationService._clean_textéÐcCsn| d¡}g}d}|D] }t|ƒt|ƒ|kr||d7}q |r'| | ¡¡|d}q |r5| | ¡¡|S)u分å—r6r8)ÚsplitÚlenr1r!)rr$Úmax_sizeÚ
paragraphsÚchunksÚcurrentÚpararrrÚ
chunk_textfs

zTranslationService.chunk_textcCs| |¡}t|ƒ}|r|d|dƒg}d}|D]U} | | d|jd¡}
|t|
ƒ7}g} t|
ƒD]+\} }
| |
|¡}|  |¡|r[t| dt|
ƒd|ƒ}|||d| dd ƒq0| | d| dd
 | ¡d œ¡q|  ||¡|r{|d|d ƒ|||d
œS)u
翻译PDF
Args:
pdf_path: 输入PDF路径
output_path: 输出路径
instruction: ç”¨æˆ·ç¿»è¯‘è¦æ±‚
progress_callback: 进度回调函数
Returns:
翻译统计信æ¯
ru开始翻译...r$Ú
chunk_sizer+édu 翻译第r,u页r6)r,ÚoriginalÚ
translatedõ 翻译完æˆ)Ú total_pagesÚ total_chunksÚ output_path)
r5r=rCr
r-r*r1ÚintÚjoinÚ _save_output)rr2rKr%Úprogress_callbackr.rIÚtranslated_pagesrJÚ page_datar@Útranslated_chunksr4ÚchunkrGÚprogressrrrÚ
translate_pdfys:
   

ý  ýz TranslationService.translate_pdfcCspd}|D]}|d|dd7}||dd7}qt|ddd }| |¡Wd
ƒd
S1s1wYd
S) uä¿å­˜ç¿»è¯‘结果u4# 英文PDF中文翻译
> 自动翻译生æˆ
---
õ## 第 r,õ 页
rGú
---
Úutf-8©ÚencodingN©ÚopenÚwrite©rr.rKrr,ÚfrrrrN®s "ÿzTranslationService._save_outputcCsˆd}|D] }|d|dd7}|d|dd7}|d|d d
7}qt|d d d
}| |¡WdƒdS1s=wYdS)u%ä¿å­˜å¯¹æ¯”文件(原文+译文)u# 英文PDF翻译对比
---
rVr,rWu### 原文
```
rFz
```
u ### 译文
rGrXrYrZr[Nr]r`rrrÚsave_comparison¸s "ÿz"TranslationService.save_comparison©N)r;)NN) Ú__name__Ú
__module__Ú __qualname__Ú__doc__rr*r5r0rCrUrNrbrrrrrs
2

5
rc@s<eZdZdZdddZddZddd „Zd
d Zd d
ZdS)Ú CacheServiceu翻译缓存æœåŠ¡écCs*||_||_tj |¡st |¡dSdSrc)Ú cache_dirÚ expire_daysÚosÚpathÚexistsÚmakedirs)rrjrkrrrrÈs
 ÿzCacheService.__init__cCst |¡ ¡S)u计算文件哈希)ÚhashlibÚmd5Ú hexdigest)rÚ file_contentrrrÚ compute_hashÏszCacheService.compute_hashNcCs„tj |j|d¡}tj |¡r@t tj |¡¡}t ¡|t |j
dkr-t  |¡dS|r>|j j
|d ¡}|r>| ¡|SdS)uX
获å–缓存
Returns:
缓存路径或None
ú.md)ÚdaysN)Ú file_hash)rlrmrMrjrnrÚ
fromtimestampÚgetmtimeÚnowrrkÚremoveÚqueryÚ filter_byÚfirstÚ