[teamai] Push 87 resource(s) from XingfenD

This commit is contained in:
2026-09-10 16:10:45 +08:00
parent 425c9c078a
commit 65c04def51
1314 changed files with 211681 additions and 0 deletions
@@ -0,0 +1,100 @@
#!/usr/bin/env python3
"""MarkItDown-backed Source -> Markdown helper for Beautiful Article.
This script intentionally depends on MarkItDown and fails clearly when it is not
available. Use source-to-markdown.py as the lightweight fallback.
Usage:
python3 source-to-markdown-markitdown.py <file-or-url> -o source/source.md
Optional dependency:
python3.10 -m pip install "markitdown[pdf,docx]"
"""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
from urllib.parse import urlparse
INSTALL_HINT = 'python3.10 -m pip install "markitdown[pdf,docx]"'
def load_markitdown():
if sys.version_info < (3, 10):
print(
"✗ MarkItDown requires Python 3.10+; current Python is "
f"{sys.version_info.major}.{sys.version_info.minor}.",
file=sys.stderr,
)
print(f" Install with: {INSTALL_HINT}", file=sys.stderr)
raise SystemExit(2)
try:
from markitdown import MarkItDown # type: ignore
except Exception as exc:
print("✗ MarkItDown is not installed in this Python environment.", file=sys.stderr)
print(f" Install with: {INSTALL_HINT}", file=sys.stderr)
print(" Or use scripts/source-to-markdown.py as the fallback.", file=sys.stderr)
print(f" Import error: {exc}", file=sys.stderr)
raise SystemExit(2)
return MarkItDown
def result_text(result) -> str:
for attr in ("text_content", "markdown"):
value = getattr(result, attr, None)
if isinstance(value, str) and value.strip():
return value
if isinstance(result, str):
return result
raise RuntimeError("MarkItDown returned no text_content/markdown output.")
def is_url(src: str) -> bool:
return urlparse(src).scheme in ("http", "https")
def main() -> None:
parser = argparse.ArgumentParser(description="Convert a source file or URL to Markdown via MarkItDown")
parser.add_argument("input", help="PDF / DOCX / PPTX / HTML / TXT / MD file or URL")
parser.add_argument("-o", "--output", help="write Markdown here (default: stdout)")
parser.add_argument(
"--use-plugins",
action="store_true",
help="enable installed MarkItDown plugins; disabled by default",
)
args = parser.parse_args()
src = args.input
if not is_url(src) and not Path(src).exists():
print(f"✗ 文件不存在:{src}", file=sys.stderr)
raise SystemExit(1)
MarkItDown = load_markitdown()
converter = MarkItDown(enable_plugins=args.use_plugins)
try:
markdown = result_text(converter.convert(src)).strip() + "\n"
except Exception as exc:
print(f"✗ MarkItDown 转换失败:{exc}", file=sys.stderr)
print(" 可改用 scripts/source-to-markdown.py 做轻量 fallback。", file=sys.stderr)
raise SystemExit(2)
if args.output:
out = Path(args.output)
out.parent.mkdir(parents=True, exist_ok=True)
out.write_text(markdown, "utf-8")
print(
f"✓ MarkItDown 写入 {out}({len(markdown)} 字符)。"
"请继续清理噪音并补 extraction-notes.md。",
file=sys.stderr,
)
else:
sys.stdout.write(markdown)
if __name__ == "__main__":
main()