Mazenbs commited on
Commit
6b06b7c
·
verified ·
1 Parent(s): 36b52f5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -14
app.py CHANGED
@@ -1,9 +1,10 @@
1
  from fastapi import FastAPI, HTTPException
2
  from pydantic import BaseModel, HttpUrl, Field
3
- from typing import List, Dict, Optional, Tuple
4
  import requests
5
  from helpers.text_blocks import extract_text_from_url
6
  from helpers.output_clipper import clip_by_ranges
 
7
 
8
  app = FastAPI(
9
  title="Text Extractor API",
@@ -26,6 +27,11 @@ class CountResponse(BaseModel):
26
  total_texts: int
27
  url: str
28
 
 
 
 
 
 
29
  def validate_ranges(ranges: List[List[int]]) -> List[Tuple[int, int]]:
30
  """
31
  التحقق من صحة النطاقات وتحويلها للتنسيق المطلوب
@@ -72,10 +78,11 @@ def validate_ranges(ranges: List[List[int]]) -> List[Tuple[int, int]]:
72
 
73
  return validated_ranges
74
 
75
- @app.post("/extract", response_model=List[TextResponse])
76
  async def extract_text_endpoint(request: URLRequest):
77
  """
78
  استخراج النصوص من رابط صفحة ويب مع إمكانية تحديد النطاقات
 
79
 
80
  Examples:
81
  - استخراج الكل: {"url": "https://example.com"}
@@ -85,17 +92,22 @@ async def extract_text_endpoint(request: URLRequest):
85
  # استخراج جميع النصوص أولاً باستخدام المستخرج الأصلي
86
  all_texts = extract_text_from_url(str(request.url), request.timeout)
87
 
88
- # إذا لم يتم تحديد نطاقات، إرجاع جميع النصوص
89
  if not request.ranges:
90
- return all_texts
91
-
92
- # التحقق من صحة النطاقات
93
- validated_ranges = validate_ranges(request.ranges)
 
 
94
 
95
- # تطبيق فلترة النطاقات باستخدام output_clipper
96
- filtered_texts = clip_by_ranges(all_texts, validated_ranges)
97
 
98
- return filtered_texts
 
 
 
99
 
100
  except requests.RequestException as e:
101
  raise HTTPException(
@@ -138,9 +150,9 @@ async def get_text_count_endpoint(request: URLRequest):
138
  @app.get("/")
139
  async def root():
140
  return {
141
- "message": "Text Extractor API v2.0 is running! 🔥",
142
  "endpoints": {
143
- "extract_text": "/extract-text (POST)",
144
  "text_count": "/text-count (POST)",
145
  "docs": "/docs",
146
  "health": "/health"
@@ -148,16 +160,36 @@ async def root():
148
  "features": [
149
  "استخراج جميع النصوص من صفحات الويب",
150
  "استخراج نطاقات محددة",
 
 
151
  "عد النصوص الكلي",
152
  "فلترة متقدمة للمخرجات",
153
  "معالجة النصوص العربية والإنجليزية"
154
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  "example_requests": {
156
  "extract_all": {
157
- "url": "https://example.com"
158
  },
159
  "extract_ranges": {
160
- "url": "https://example.com",
161
  "ranges": [[0, 10], [50, 100]]
162
  },
163
  "get_count": {
@@ -175,7 +207,15 @@ async def health_check():
175
  "modules": [
176
  "text_extractor",
177
  "output_clipper",
 
178
  "fastapi"
 
 
 
 
 
 
 
179
  ]
180
  }
181
 
 
1
  from fastapi import FastAPI, HTTPException
2
  from pydantic import BaseModel, HttpUrl, Field
3
+ from typing import List, Dict, Optional, Tuple, Any
4
  import requests
5
  from helpers.text_blocks import extract_text_from_url
6
  from helpers.output_clipper import clip_by_ranges
7
+ from parser.assembler import parse_legal_document
8
 
9
  app = FastAPI(
10
  title="Text Extractor API",
 
27
  total_texts: int
28
  url: str
29
 
30
+ # new response model for parsed legal documents
31
+ class LegalDocumentResponse(BaseModel):
32
+ raw_texts: List[TextResponse]
33
+ parsed_document: Dict[str, Any]
34
+
35
  def validate_ranges(ranges: List[List[int]]) -> List[Tuple[int, int]]:
36
  """
37
  التحقق من صحة النطاقات وتحويلها للتنسيق المطلوب
 
78
 
79
  return validated_ranges
80
 
81
+ @app.post("/extract", response_model=LegalDocumentResponse)
82
  async def extract_text_endpoint(request: URLRequest):
83
  """
84
  استخراج النصوص من رابط صفحة ويب مع إمكانية تحديد النطاقات
85
+ ثم تحليلها كمستند قانوني
86
 
87
  Examples:
88
  - استخراج الكل: {"url": "https://example.com"}
 
92
  # استخراج جميع النصوص أولاً باستخدام المستخرج الأصلي
93
  all_texts = extract_text_from_url(str(request.url), request.timeout)
94
 
95
+ # إذا لم يتم تحديد نطاقات، استخدام جميع النصوص
96
  if not request.ranges:
97
+ filtered_texts = all_texts
98
+ else:
99
+ # التحقق من صحة النطاقات
100
+ validated_ranges = validate_ranges(request.ranges)
101
+ # تطبيق فلترة النطاقات باستخدام output_clipper
102
+ filtered_texts = clip_by_ranges(all_texts, validated_ranges)
103
 
104
+ # هنا يتم إرسال filtered_texts إلى المحلل القانوني
105
+ parsed_document = parse_legal_document(filtered_texts)
106
 
107
+ return LegalDocumentResponse(
108
+ raw_texts=filtered_texts,
109
+ parsed_document=parsed_document
110
+ )
111
 
112
  except requests.RequestException as e:
113
  raise HTTPException(
 
150
  @app.get("/")
151
  async def root():
152
  return {
153
+ "message": "Text Extractor API with Legal Parser v2.0 is running! 🔥⚖️",
154
  "endpoints": {
155
+ "extract": "/extract (POST) - استخراج وتحليل النصوص القانونية",
156
  "text_count": "/text-count (POST)",
157
  "docs": "/docs",
158
  "health": "/health"
 
160
  "features": [
161
  "استخراج جميع النصوص من صفحات الويب",
162
  "استخراج نطاقات محددة",
163
+ "تحليل المستندات القانونية تلقائياً",
164
+ "تقسيم النصوص إلى (عنوان، مقدمة، أقسام، مواد)",
165
  "عد النصوص الكلي",
166
  "فلترة متقدمة للمخرجات",
167
  "معالجة النصوص العربية والإنجليزية"
168
  ],
169
+ "response_structure": {
170
+ "raw_texts": "النصوص المستخرجة الخام",
171
+ "parsed_document": {
172
+ "title": "العنوان الرئيسي",
173
+ "preamble": "مقدمة القانون",
174
+ "sections": [
175
+ {
176
+ "title": "الباب/الفصل",
177
+ "articles": [
178
+ {
179
+ "title": "مادة رقم X",
180
+ "content": "محتوى المادة"
181
+ }
182
+ ]
183
+ }
184
+ ]
185
+ }
186
+ },
187
  "example_requests": {
188
  "extract_all": {
189
+ "url": "https://legal-site.com/constitution"
190
  },
191
  "extract_ranges": {
192
+ "url": "https://legal-site.com/law",
193
  "ranges": [[0, 10], [50, 100]]
194
  },
195
  "get_count": {
 
207
  "modules": [
208
  "text_extractor",
209
  "output_clipper",
210
+ "parser.assembler (legal document parser)",
211
  "fastapi"
212
+ ],
213
+ "legal_features": [
214
+ "automatic title extraction",
215
+ "preamble detection",
216
+ "section parsing (الباب/الفصل)",
217
+ "article extraction (مادة)",
218
+ "structured legal document output"
219
  ]
220
  }
221