sdpy-kit 0.4.4__tar.gz → 0.4.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/PKG-INFO +6 -6
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/README.md +5 -5
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/__init__.py +1 -1
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/docs/marker_kit.py +35 -9
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/.gitignore +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/__init__.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/base_service.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/chat_service.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/embedding_service.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/exceptions.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/failover.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/image_service.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/model_builder.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/model_client.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/pool.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/profiles.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/rerank_service.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/runner.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/ai/types.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/common_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/config/__init__.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/config/kit_config.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/config/log_config.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/crawl/__init__.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/crawl/article_models.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/crawl/web_article_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/crawl/wx_article_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/__init__.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/base_db_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/crud.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/engine.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/exceptions.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/models/__init__.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/models/base.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/mysql_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/pg_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/query.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/session.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/sqlite_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/db/transaction.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/docs/__init__.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/docs/anydoc_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/docs/docx_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/docs/md2doc_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/docs/mineru_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/file_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/laya_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/license_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/kit/redis_kit.py +0 -0
- {sdpy_kit-0.4.4 → sdpy_kit-0.4.5}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sdpy-kit
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.5
|
|
4
4
|
Summary: SDPY Kit——统一数据库访问层(PG/MySQL/SQLite)与 AI/Redis/文件/文档/向量工具集
|
|
5
5
|
Author-email: Clark <changhongyuan@126.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -77,7 +77,7 @@ SDPY 统一工具集(Kit 体系),供 Python 项目开箱即用:
|
|
|
77
77
|
|
|
78
78
|
- **统一数据库访问层**:PostgreSQL / MySQL / SQLite,三个 Kit API 完全一致,切换数据库只改一行 import;
|
|
79
79
|
- **AI 多模型服务池**:chat / embedding / rerank / image 四类能力,多厂商候选链 + 故障自动转移;
|
|
80
|
-
- **工具集**:Redis / 文件 / 雪花 ID / 文档互转 / Word 模板填充 / MinerU 解析 / Marker 本地解析(md + images
|
|
80
|
+
- **工具集**:Redis / 文件 / 雪花 ID / 文档互转 / Word 模板填充 / MinerU 解析 / Marker 本地解析(md + images/) / Laya 类型化决策 / 微信公众号文章抓取存储 / 通用网页文章抓取存储。
|
|
81
81
|
|
|
82
82
|
> 要求 Python 3.13+
|
|
83
83
|
|
|
@@ -978,8 +978,8 @@ if r.state == "done":
|
|
|
978
978
|
```python
|
|
979
979
|
from kit.docs.marker_kit import MarkerKit
|
|
980
980
|
|
|
981
|
-
# 落盘 md + images
|
|
982
|
-
md_path = MarkerKit.convert_to_dir("report.pdf") # -> report/report.md +
|
|
981
|
+
# 落盘 md + images/(推荐):源文件同目录下建同名子目录
|
|
982
|
+
md_path = MarkerKit.convert_to_dir("report.pdf") # -> report/report.md + report/images/
|
|
983
983
|
md_path = MarkerKit.convert_to_dir("report.pdf", "out/doc") # 指定产物目录
|
|
984
984
|
|
|
985
985
|
# 只取 Markdown 文本(图片不落盘)
|
|
@@ -1000,11 +1000,11 @@ MarkerKit.shutdown() # 释放模型与推理服务(幂等)
|
|
|
1000
1000
|
|------|------|
|
|
1001
1001
|
| `is_supported(file_path) -> bool` | 扩展名白名单(pdf / 图片 / docx / pptx / xlsx / html / epub) |
|
|
1002
1002
|
| `convert_to_md(file_path, *, mode=None, force_ocr=None, disable_ocr=None, page_range=None) -> str` | 解析并返回 Markdown 文本(图片不落盘) |
|
|
1003
|
-
| `convert_to_dir(src_path, output_dir=None, *, mode=None, force_ocr=None, disable_ocr=None, page_range=None, extract_images=True) -> str` | 解析并落盘 md + images
|
|
1003
|
+
| `convert_to_dir(src_path, output_dir=None, *, mode=None, force_ocr=None, disable_ocr=None, page_range=None, extract_images=True) -> str` | 解析并落盘 md + `images/`,返回 md 绝对路径 |
|
|
1004
1004
|
| `convert(src_path, output_dir=None, *, ...) -> MarkerResult` | 安全版:失败封装为 `MarkerResult`,不抛异常 |
|
|
1005
1005
|
| `shutdown() -> None` | 释放模型与共享推理服务(幂等) |
|
|
1006
1006
|
|
|
1007
|
-
> 产物:`<output_dir>/<源文件名>.md` +
|
|
1007
|
+
> 产物:`<output_dir>/<源文件名>.md` + `<output_dir>/images/`(md 内以 `images/<文件名>` 相对引用;无图片不建空目录),**不生成** `_meta.json`。
|
|
1008
1008
|
> 结果类型:`MarkerResult`(`success` / `markdown` / `file_path` / `output_dir` / `md_path` / `image_paths` / `page_count` / `error`);异常:`MarkerError`。
|
|
1009
1009
|
> `mode` 缺省时不写入配置,交由 marker 按设备自动选择;首次使用会下载模型权重(默认走 `MARKER_HF_ENDPOINT` 镜像)。
|
|
1010
1010
|
> 非 NVIDIA 平台完整 VLM 能力(公式 / 扫描页 OCR)需 llama.cpp 的 `llama-server`,否则用 `disable_ocr=True` 跳过。
|
|
@@ -4,7 +4,7 @@ SDPY 统一工具集(Kit 体系),供 Python 项目开箱即用:
|
|
|
4
4
|
|
|
5
5
|
- **统一数据库访问层**:PostgreSQL / MySQL / SQLite,三个 Kit API 完全一致,切换数据库只改一行 import;
|
|
6
6
|
- **AI 多模型服务池**:chat / embedding / rerank / image 四类能力,多厂商候选链 + 故障自动转移;
|
|
7
|
-
- **工具集**:Redis / 文件 / 雪花 ID / 文档互转 / Word 模板填充 / MinerU 解析 / Marker 本地解析(md + images
|
|
7
|
+
- **工具集**:Redis / 文件 / 雪花 ID / 文档互转 / Word 模板填充 / MinerU 解析 / Marker 本地解析(md + images/) / Laya 类型化决策 / 微信公众号文章抓取存储 / 通用网页文章抓取存储。
|
|
8
8
|
|
|
9
9
|
> 要求 Python 3.13+
|
|
10
10
|
|
|
@@ -905,8 +905,8 @@ if r.state == "done":
|
|
|
905
905
|
```python
|
|
906
906
|
from kit.docs.marker_kit import MarkerKit
|
|
907
907
|
|
|
908
|
-
# 落盘 md + images
|
|
909
|
-
md_path = MarkerKit.convert_to_dir("report.pdf") # -> report/report.md +
|
|
908
|
+
# 落盘 md + images/(推荐):源文件同目录下建同名子目录
|
|
909
|
+
md_path = MarkerKit.convert_to_dir("report.pdf") # -> report/report.md + report/images/
|
|
910
910
|
md_path = MarkerKit.convert_to_dir("report.pdf", "out/doc") # 指定产物目录
|
|
911
911
|
|
|
912
912
|
# 只取 Markdown 文本(图片不落盘)
|
|
@@ -927,11 +927,11 @@ MarkerKit.shutdown() # 释放模型与推理服务(幂等)
|
|
|
927
927
|
|------|------|
|
|
928
928
|
| `is_supported(file_path) -> bool` | 扩展名白名单(pdf / 图片 / docx / pptx / xlsx / html / epub) |
|
|
929
929
|
| `convert_to_md(file_path, *, mode=None, force_ocr=None, disable_ocr=None, page_range=None) -> str` | 解析并返回 Markdown 文本(图片不落盘) |
|
|
930
|
-
| `convert_to_dir(src_path, output_dir=None, *, mode=None, force_ocr=None, disable_ocr=None, page_range=None, extract_images=True) -> str` | 解析并落盘 md + images
|
|
930
|
+
| `convert_to_dir(src_path, output_dir=None, *, mode=None, force_ocr=None, disable_ocr=None, page_range=None, extract_images=True) -> str` | 解析并落盘 md + `images/`,返回 md 绝对路径 |
|
|
931
931
|
| `convert(src_path, output_dir=None, *, ...) -> MarkerResult` | 安全版:失败封装为 `MarkerResult`,不抛异常 |
|
|
932
932
|
| `shutdown() -> None` | 释放模型与共享推理服务(幂等) |
|
|
933
933
|
|
|
934
|
-
> 产物:`<output_dir>/<源文件名>.md` +
|
|
934
|
+
> 产物:`<output_dir>/<源文件名>.md` + `<output_dir>/images/`(md 内以 `images/<文件名>` 相对引用;无图片不建空目录),**不生成** `_meta.json`。
|
|
935
935
|
> 结果类型:`MarkerResult`(`success` / `markdown` / `file_path` / `output_dir` / `md_path` / `image_paths` / `page_count` / `error`);异常:`MarkerError`。
|
|
936
936
|
> `mode` 缺省时不写入配置,交由 marker 按设备自动选择;首次使用会下载模型权重(默认走 `MARKER_HF_ENDPOINT` 镜像)。
|
|
937
937
|
> 非 NVIDIA 平台完整 VLM 能力(公式 / 扫描页 OCR)需 llama.cpp 的 `llama-server`,否则用 `disable_ocr=True` 跳过。
|
|
@@ -22,7 +22,7 @@ Author: Clark Chang
|
|
|
22
22
|
|
|
23
23
|
本模块基于 marker-pdf(Marker v2.x,https://github.com/datalab-to/marker),
|
|
24
24
|
在本地解析 PDF / 图片 / Office / HTML / EPUB,输出 GitHub-Flavored Markdown
|
|
25
|
-
|
|
25
|
+
并提取图片,产物形态为「md + images/」一层(kit 文档解析类工具的统一契约)。
|
|
26
26
|
|
|
27
27
|
与 kit.docs.anydoc_kit 的分工:
|
|
28
28
|
- AnyDocKit:轻量文本转换(firecrawl-anydoc),只产出 Markdown 文本;
|
|
@@ -125,7 +125,7 @@ class MarkerResult:
|
|
|
125
125
|
file_path: 源文件绝对路径
|
|
126
126
|
output_dir: 产物目录绝对路径;未落盘时为 None
|
|
127
127
|
md_path: 落盘的 Markdown 文件绝对路径;未落盘时为 None
|
|
128
|
-
image_paths:
|
|
128
|
+
image_paths: 落盘的图片文件绝对路径元组(位于 `<output_dir>/images/`)
|
|
129
129
|
page_count: 文档页数,未知为 None
|
|
130
130
|
error: 失败原因描述(异常类型与信息),成功时为 None
|
|
131
131
|
"""
|
|
@@ -143,8 +143,8 @@ class MarkerResult:
|
|
|
143
143
|
class MarkerKit:
|
|
144
144
|
"""Marker 本地文档解析工具类,将文档转为 Markdown + Images
|
|
145
145
|
|
|
146
|
-
支持 PDF、图片、Office(docx/pptx/xlsx)、HTML、EPUB
|
|
147
|
-
|
|
146
|
+
支持 PDF、图片、Office(docx/pptx/xlsx)、HTML、EPUB,产物形态为
|
|
147
|
+
「md + images/」一层(md 以 `images/<文件名>` 相对路径引用图片)。
|
|
148
148
|
|
|
149
149
|
使用前安装可选依赖::
|
|
150
150
|
|
|
@@ -322,7 +322,25 @@ class MarkerKit:
|
|
|
322
322
|
return Path(output_dir).resolve()
|
|
323
323
|
|
|
324
324
|
@staticmethod
|
|
325
|
+
def _localize_image_refs(markdown: str, mapping: dict[str, str]) -> str:
|
|
326
|
+
"""把 md 中的裸图片文件名引用改写为 `images/` 相对路径
|
|
327
|
+
|
|
328
|
+
Args:
|
|
329
|
+
markdown: marker 输出的 Markdown 原文
|
|
330
|
+
mapping: 原文件名 → 改写后的相对路径(如 `_page_0_Figure_1.jpeg`
|
|
331
|
+
→ `images/_page_0_Figure_1.jpeg`)
|
|
332
|
+
|
|
333
|
+
Returns:
|
|
334
|
+
str: 改写后的 Markdown
|
|
335
|
+
"""
|
|
336
|
+
for original, rel in mapping.items():
|
|
337
|
+
markdown = markdown.replace(f"]({original})", f"]({rel})")
|
|
338
|
+
markdown = markdown.replace(f'src="{original}"', f'src="{rel}"')
|
|
339
|
+
return markdown
|
|
340
|
+
|
|
341
|
+
@classmethod
|
|
325
342
|
def _write_outputs(
|
|
343
|
+
cls,
|
|
326
344
|
src: Path,
|
|
327
345
|
out_dir: Path,
|
|
328
346
|
markdown: str,
|
|
@@ -332,18 +350,25 @@ class MarkerKit:
|
|
|
332
350
|
) -> tuple[str, tuple[str, ...]]:
|
|
333
351
|
"""落盘 Markdown 与图片,返回 (md 路径, 图片路径元组)
|
|
334
352
|
|
|
353
|
+
产物为 `<out_dir>/<源文件名>.md` + `<out_dir>/images/` 图片目录,
|
|
354
|
+
md 内以 `images/<文件名>` 相对引用;无图片时不创建空 `images/`。
|
|
335
355
|
图片名取 basename 防路径穿越;统一转 RGB 后再存(RGBA 存 JPEG 会失败)。
|
|
336
356
|
"""
|
|
337
357
|
out_dir.mkdir(parents=True, exist_ok=True)
|
|
338
|
-
md_path = out_dir / f"{src.stem}.md"
|
|
339
|
-
md_path.write_text(markdown, encoding="utf-8")
|
|
340
|
-
|
|
341
358
|
image_paths: list[str] = []
|
|
342
359
|
if extract_images:
|
|
360
|
+
images_dir = out_dir / "images"
|
|
361
|
+
mapping: dict[str, str] = {}
|
|
343
362
|
for name, image in images.items():
|
|
344
|
-
target =
|
|
363
|
+
target = images_dir / Path(name).name
|
|
364
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
345
365
|
image.convert("RGB").save(target)
|
|
366
|
+
mapping[target.name] = f"images/{target.name}"
|
|
346
367
|
image_paths.append(str(target))
|
|
368
|
+
markdown = cls._localize_image_refs(markdown, mapping)
|
|
369
|
+
|
|
370
|
+
md_path = out_dir / f"{src.stem}.md"
|
|
371
|
+
md_path.write_text(markdown, encoding="utf-8")
|
|
347
372
|
return str(md_path), tuple(image_paths)
|
|
348
373
|
|
|
349
374
|
# ------------------------------------------------------------------
|
|
@@ -410,7 +435,8 @@ class MarkerKit:
|
|
|
410
435
|
) -> str:
|
|
411
436
|
"""解析文档并将 Markdown + 图片落盘到目录
|
|
412
437
|
|
|
413
|
-
产物写入 output_dir:`<源文件名>.md`
|
|
438
|
+
产物写入 output_dir:`<源文件名>.md` 与 `images/` 图片目录(md 内以
|
|
439
|
+
`images/<文件名>` 相对路径引用);无图片时不创建空 `images/`。
|
|
414
440
|
不生成 marker 默认的 `_meta.json`。
|
|
415
441
|
|
|
416
442
|
Args:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|