tbdavid2019 commited on
Commit
83bc02a
·
verified ·
1 Parent(s): 431ea97

改PDF工具

Browse files
Files changed (1) hide show
  1. app.py +31 -21
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": """你的任务是将提供的输入文本转变为一个生动、有趣、信息丰富的播客对话,风格类似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,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
- with Path(file).open("rb") as f:
388
- reader = PdfReader(f)
389
- text = "\n\n".join([page.extract_text() for page in reader.pages if page.extract_text()])
390
- combined_text += text + "\n\n"
 
 
 
 
 
 
 
 
 
 
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))