DField commited on
Commit
264e85a
·
verified ·
1 Parent(s): 9451751

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -21
app.py CHANGED
@@ -1,6 +1,6 @@
1
  import requests
2
  from bs4 import BeautifulSoup
3
- import fitz #pip install PyMuPDF
4
  import os
5
  import openai
6
  import re
@@ -22,25 +22,26 @@ def extract_text_from_pdf(pdf_path):
22
  text += page.get_text()
23
  return text
24
 
25
- def check_summary_exists(paper_id):
26
  """指定した論文IDの要約が既に存在するか確認し、存在する場合はその内容を返す。"""
27
- summary_path = f"summaries/{paper_id}.txt"
28
  if os.path.exists(summary_path):
29
  with open(summary_path, 'r', encoding='utf-8') as file:
30
  return file.read()
31
- return None
 
32
 
33
  def save_summary(paper_id, summary):
34
  """指定した論文IDの要約をファイルに保存する。"""
35
  os.makedirs('summaries', exist_ok=True)
36
- summary_path = f"summaries/{paper_id}.txt"
37
  with open(summary_path, 'w', encoding='utf-8') as file:
38
  file.write(summary)
39
 
40
  def summarize_paper(paper_id):
41
  """論文IDを基に論文の内容を日本語で要約する。"""
42
- existing_summary = check_summary_exists(paper_id)
43
- if existing_summary:
44
  return existing_summary, 0 # トークン使用量を0として返す
45
 
46
  paper_url = f"https://arxiv.org/pdf/{paper_id}.pdf"
@@ -52,25 +53,12 @@ def summarize_paper(paper_id):
52
  save_summary(paper_id, summary) # 新しい要約を保存
53
  return summary, tokens_used
54
 
55
- def fetch_paper_links(url):
56
- """指定したURLから特定の形式に完全にマッチするリンクを取得し、重複を排除する(順序保持)"""
57
- response = requests.get(url)
58
- soup = BeautifulSoup(response.text, 'html.parser')
59
- # パターンの開始(^)と終了($)を指定して、完全一致を検出
60
- pattern = re.compile(r'^/papers/\d+\.\d+$')
61
- links = []
62
- for a in soup.find_all('a', href=True):
63
- href = a['href']
64
- if pattern.match(href) and href not in links:
65
- links.append(href)
66
- return links
67
-
68
  def summarize_text_with_chat(text, max_length=10000):
69
  """テキストをOpenAIのChat APIを使用して要約する。"""
70
  openai.api_key = os.getenv('OPEN_AI_API_KEYS')
71
  trimmed_text = text[:max_length]
72
  response = openai.chat.completions.create(
73
- model="gpt-3.5-turbo-0125",
74
  messages=[
75
  {"role": "system", "content": "次の文書を要約してください。必ず'## タイトル', '## 要約', '## 専門用語解説'を記載してください。"},
76
  {"role": "user", "content": trimmed_text}
@@ -82,6 +70,19 @@ def summarize_text_with_chat(text, max_length=10000):
82
  total_token = response.usage.total_tokens
83
  return summary_text, total_token
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  def gradio_interface():
86
  papers_url = 'https://huggingface.co/papers' # デフォルトURL
87
  paper_links = fetch_paper_links(papers_url)
 
1
  import requests
2
  from bs4 import BeautifulSoup
3
+ import fitz # PyMuPDF
4
  import os
5
  import openai
6
  import re
 
22
  text += page.get_text()
23
  return text
24
 
25
+ def check_and_read_summary(paper_id):
26
  """指定した論文IDの要約が既に存在するか確認し、存在する場合はその内容を返す。"""
27
+ summary_path = os.path.join("summaries", f"{paper_id}.txt")
28
  if os.path.exists(summary_path):
29
  with open(summary_path, 'r', encoding='utf-8') as file:
30
  return file.read()
31
+ else:
32
+ return None
33
 
34
  def save_summary(paper_id, summary):
35
  """指定した論文IDの要約をファイルに保存する。"""
36
  os.makedirs('summaries', exist_ok=True)
37
+ summary_path = os.path.join("summaries", f"{paper_id}.txt")
38
  with open(summary_path, 'w', encoding='utf-8') as file:
39
  file.write(summary)
40
 
41
  def summarize_paper(paper_id):
42
  """論文IDを基に論文の内容を日本語で要約する。"""
43
+ existing_summary = check_and_read_summary(paper_id)
44
+ if existing_summary is not None:
45
  return existing_summary, 0 # トークン使用量を0として返す
46
 
47
  paper_url = f"https://arxiv.org/pdf/{paper_id}.pdf"
 
53
  save_summary(paper_id, summary) # 新しい要約を保存
54
  return summary, tokens_used
55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  def summarize_text_with_chat(text, max_length=10000):
57
  """テキストをOpenAIのChat APIを使用して要約する。"""
58
  openai.api_key = os.getenv('OPEN_AI_API_KEYS')
59
  trimmed_text = text[:max_length]
60
  response = openai.chat.completions.create(
61
+ model="gpt-4-0125-preview",
62
  messages=[
63
  {"role": "system", "content": "次の文書を要約してください。必ず'## タイトル', '## 要約', '## 専門用語解説'を記載してください。"},
64
  {"role": "user", "content": trimmed_text}
 
70
  total_token = response.usage.total_tokens
71
  return summary_text, total_token
72
 
73
+ def fetch_paper_links(url):
74
+ """指定したURLから特定の形式に完全にマッチするリンクを取得し、重複を排除する(順序保持)"""
75
+ response = requests.get(url)
76
+ soup = BeautifulSoup(response.text, 'html.parser')
77
+ # パターンの開始(^)と終了($)を指定して、完全一致を検出
78
+ pattern = re.compile(r'^/papers/\d+\.\d+$')
79
+ links = []
80
+ for a in soup.find_all('a', href=True):
81
+ href = a['href']
82
+ if pattern.match(href) and href not in links:
83
+ links.append(href)
84
+ return links
85
+
86
  def gradio_interface():
87
  papers_url = 'https://huggingface.co/papers' # デフォルトURL
88
  paper_links = fetch_paper_links(papers_url)