Spaces:
Running
Running
tbdavid2019
commited on
改PDF工具
Browse files
app.py
CHANGED
@@ -13,8 +13,8 @@ from loguru import logger
|
|
13 |
from openai import OpenAI
|
14 |
from promptic import llm
|
15 |
from pydantic import BaseModel, ValidationError
|
16 |
-
from pypdf import PdfReader
|
17 |
from tenacity import retry, retry_if_exception_type
|
|
|
18 |
|
19 |
import re
|
20 |
import requests
|
@@ -237,36 +237,36 @@ The summary should have around 256 words.
|
|
237 |
|
238 |
################# PODCAST Chinese ##################
|
239 |
"podcast (Chinese)": {
|
240 |
-
"intro": """
|
241 |
|
242 |
-
|
243 |
|
244 |
-
|
245 |
""",
|
246 |
-
"text_instructions": "
|
247 |
-
"scratch_pad": """
|
248 |
|
249 |
-
|
250 |
|
251 |
-
|
252 |
|
253 |
-
|
254 |
|
255 |
-
|
256 |
|
257 |
-
|
258 |
""",
|
259 |
-
"prelude": """
|
260 |
""",
|
261 |
-
"dialog": """
|
262 |
|
263 |
-
|
264 |
|
265 |
-
|
266 |
|
267 |
-
|
268 |
|
269 |
-
|
270 |
""",
|
271 |
},
|
272 |
}
|
@@ -384,10 +384,20 @@ def generate_audio(
|
|
384 |
# If there's no original text, extract it from the uploaded files
|
385 |
if not combined_text:
|
386 |
for file in files:
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
|
392 |
# Configure the LLM based on selected model and api_base
|
393 |
@retry(retry=retry_if_exception_type(ValidationError))
|
|
|
13 |
from openai import OpenAI
|
14 |
from promptic import llm
|
15 |
from pydantic import BaseModel, ValidationError
|
|
|
16 |
from tenacity import retry, retry_if_exception_type
|
17 |
+
import fitz # PyMuPDF
|
18 |
|
19 |
import re
|
20 |
import requests
|
|
|
237 |
|
238 |
################# PODCAST Chinese ##################
|
239 |
"podcast (Chinese)": {
|
240 |
+
"intro": """你的任務是將提供的輸入文本轉變為一個生動、有趣、信息豐富的播客對話,風格類似NPR。輸入文本可能是淩亂的或未結構化的,因為它可能來自PDF或網頁等各種來源。
|
241 |
|
242 |
+
不要擔心格式問題或任何無關的信息;你的目標是提取關鍵點,識別定義和可能在播客中討論的有趣事實。
|
243 |
|
244 |
+
為廣泛的聽衆仔細定義所有使用的術語。
|
245 |
""",
|
246 |
+
"text_instructions": "首先,仔細閱讀輸入文本,識別主要話題、關鍵點和任何有趣的事實或軼事。思考如何以一種有趣且引人入勝的方式呈現這些信息,適合高質量的呈現。",
|
247 |
+
"scratch_pad": """集思廣益,想出一些討論你在輸入文本中識別到的主要話題和關鍵點的創意方式。考慮使用類比、例子、講故事的技巧或假設場景,讓內容對聽衆更具相關性和吸引力。
|
248 |
|
249 |
+
請記住,你的播客應面向普通大衆,因此避免使用過多的行話或假設聽衆對該主題有預先的瞭解。如有必要,考慮簡要解釋任何複雜概念,用簡單的術語進行說明。
|
250 |
|
251 |
+
利用你的想象力填補輸入文本中的任何空白,或提出一些值得探索的發人深省的問題。目標是創造一個信息豐富且有趣的對話,因此可以在方法上大膽創新。
|
252 |
|
253 |
+
明確地定義所有使用的術語,並花時間解釋背景。
|
254 |
|
255 |
+
在這裡寫下你的頭腦風暴想法和播客對話的粗略大綱。務必記錄你想在結尾重複的關鍵見解和收獲。
|
256 |
|
257 |
+
確保讓它有趣且令人興奮。
|
258 |
""",
|
259 |
+
"prelude": """現在你已經進行了頭腦風暴並創建了一個粗略大綱,是時候編寫實際的播客對話了。目標是主持人與嘉賓之間的自然對話流。結合你頭腦風暴中的最佳想法,並確保以簡單易懂的方式解釋任何複雜的主題。
|
260 |
""",
|
261 |
+
"dialog": """在這裡寫下一個非常長、引人入勝且信息豐富的播客對話,基於你在頭腦風暴會議中提出的關鍵點和創意。使用對話語氣,並包含任何必要的上下文或解釋,使內容易於普通聽衆理解。
|
262 |
|
263 |
+
不要為主持人和嘉賓使用虛構的名字,而是讓聽衆體驗一個引人入勝且沉浸式的經歷。不要包括像[主持人]或[嘉賓]這樣的占位符。設計你的輸出以供大聲朗讀——它將被直接轉換為音訊。
|
264 |
|
265 |
+
使對話盡可能長且詳細,同時保持在主題上並維持引人入勝的流暢性。充分利用你的輸出能力,創造盡可能長的播客節目,同時以有趣的方式傳達輸入文本中的關鍵信息。
|
266 |
|
267 |
+
在對話的最後,主持人和嘉賓應自然總結他們討論的主要見解和收獲。這應從對話中自然流出,以隨意、對話的方式重複關鍵點。避免顯得像是顯而易見的總結——目標是在結束前最後一次加強核心思想。
|
268 |
|
269 |
+
播客應約有30,000字。
|
270 |
""",
|
271 |
},
|
272 |
}
|
|
|
384 |
# If there's no original text, extract it from the uploaded files
|
385 |
if not combined_text:
|
386 |
for file in files:
|
387 |
+
# 用 PyMuPDF 打開 PDF 檔案
|
388 |
+
doc = fitz.open(file)
|
389 |
+
text = ""
|
390 |
+
# 遍歷每個頁面,提取每頁文字
|
391 |
+
for page_num in range(doc.page_count):
|
392 |
+
page = doc[page_num]
|
393 |
+
text += page.get_text() # 提取每頁文字
|
394 |
+
combined_text += text + "\n\n"
|
395 |
+
print(combined_text) # 確認是否成功提取到內容
|
396 |
+
# for file in files:
|
397 |
+
# with Path(file).open("rb") as f:
|
398 |
+
# reader = PdfReader(f)
|
399 |
+
# text = "\n\n".join([page.extract_text() for page in reader.pages if page.extract_text()])
|
400 |
+
# combined_text += text + "\n\n"
|
401 |
|
402 |
# Configure the LLM based on selected model and api_base
|
403 |
@retry(retry=retry_if_exception_type(ValidationError))
|