ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 Kotlin/Android 中提取远程文本文档:Xberg URL 提取实战指南

在 Kotlin/Android 中提取远程文本文档:Xberg URL 提取实战指南 后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载本文以 Kotlin (Android) 绑定为视角完整讲解如何通过Xberg.extract()从 HTTP(S) URL 提取远程纯文本文档内容。你将掌握ExtractInput/ExtractionConfig的 JSON 序列化方式、mode: document单文档模式与ssrf安全策略的用法以及如何从返回结果中读取正文内容与remoteUrls统计信息——并借助仓库中的 e2e 测试与 fixture 逐层印证每个细节。场景概览让 App 直接消费远程文档在移动端或后端服务中常会遇到给定一个 URL需要把链接指向的文档正文提取出来的需求可能是抓取一份远程.txt说明、一个纯文本配置、或任意由text/plain提供的文档资源。Xberg 的 Kotlin (Android) 绑定将这一过程收敛为一次Xberg.extract(input, config)调用输入侧用ExtractInput描述我要提取哪个 URI配置侧用ExtractionConfig描述按何种模式与安全策略执行返回结果中同时给出正文内容与远程资源统计适合直接接入协程化的 Android 业务代码。核心代码走读关联文档 url_remote_text_document.md 给出了一个可直接运行的完整示例import io.xberg.* import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper fun main() kotlinx.coroutines.runBlocking { val mapper jacksonObjectMapper().setPropertyNamingStrategy(com.fasterxml.jackson.databind.PropertyNamingStrategies.SNAKE_CASE) val input mapper.readValue({\kind\:\uri\,\uri\:\https://example.com\}, ExtractInput::class.java) val config mapper.readValue({\url\:{\crawl\:{\ssrf\:{}},\mode\:\document\}}, ExtractionConfig::class.java) val result Xberg.extract(input, config) println(result.results.first().content) println(result.summary.remoteUrls) }这段代码的四个关键动作值得逐一拆解构建 Jackson ObjectMapper绑定层生成的 Kotlin 数据类如ExtractInput、ExtractionConfig与底层 Rust 服务之间通过 JSON 交换数据且字段采用 snake_case 命名。因此必须调用setPropertyNamingStrategy(SNAKE_CASE)否则kind/uri等字段的序列化会与原生端失配。构造输入{kind:uri,uri:https://example.com}反序列化为ExtractInput声明本次提取的来源是 URI。构造配置{url:{crawl:{ssrf:{}},mode:document}}反序列化为ExtractionConfig指定 URL 提取以单文档模式执行并携带默认 SSRF 安全策略。执行并读取结果Xberg.extract()返回ExtractResult正文位于results.first().content远程文档统计位于summary.remoteUrls。ExtractInput用 URI 声明提取来源ExtractInput是所有公开提取入口的统一输入结构其定义见 ExtractInput.ktdata class ExtractInput( val kind: ExtractInputKind ExtractInputKind.URI, // bytes 需配 bytesuri 需配 uri val bytes: ByteArray? null, val uri: String? null, // 本地路径、file:// URI 或 HTTP(S) URL val mimeType: String? null, // MIME 类型提示 val filename: String? null, // 用于 MIME 检测与元数据的文件名提示 val config: FileExtractionConfig? null, // 单输入级提取覆盖 )在远程文本文档场景中kind固定为uriuri字段填写完整 HTTP(S) 地址。值得留意的是kind的默认值就是URI因此{uri:https://example.com}这种省略kind的写法同样合法但显式声明kind更利于代码可读性。mimeType与filename在此场景属于可选提示字段——当远端响应头未给出明确Content-Type时它们能帮助 MIME 推断更准确。ExtractionConfigURL 模式的配置骨架主配置结构ExtractionConfig承载了提取流程的全部选项OCR、缓存、质量后处理、分块等见 ExtractionConfig.kt。其中与 URL 提取直接相关的是顶层url子配置文档示例给出的是最精简的可用形态{ url: { crawl: { ssrf: {} }, mode: document } }mode单文档模式与爬取模式mode: document表示仅提取起始 URL 指向的那一个文档不跟随链接扩散。与之相对的mode: crawl则会把目标当作站点入口进行遍历。e2e 测试 UrlTest.kt 展示了 crawl 模式的最小形态配置{url:{crawl:{max_depth:1,max_pages:4,respect_robots_txt:false,ssrf:{}},mode:crawl}}后结果会携带summary.pagesCrawled统计且results中会出现多个条目。如果你的诉求只是拿下一个远程文档的正文mode: document是最贴合、开销最小的选择。crawl 子配置为什么示例必须带上crawl即便使用mode: document示例仍保留了crawl: {ssrf: {}}。原因在于 URL 提取的取数逻辑HTTP 抓取、重定向、文档下载上限等统一收敛在 crawl 配置下。从 CrawlConfig.kt 可以看到该结构覆盖了丰富的行为参数例如requestTimeout单次 HTTP 请求超时默认 30000msmaxRedirects最大重定向次数默认 10retryCount/retryCodes/retryInitialDelayMs/retryMaxDelayMs失败重试与指数退避策略maxBodySize响应体上限未显式设置时存在 100 MiB 的安全兜底上限downloadDocuments是否下载非 HTML 文档PDF、DOCX、图片等默认truedocumentMaxSize文档下载大小上限默认 50 MBuserAgent/userAgents自定义 UA 或轮换列表cookiesEnabled、proxy、customHeaders等会话与代理相关能力。在单文档模式下这些字段多数沿用默认值即可显式提供crawl块的主要目的是把ssrf安全策略带进配置。ssrf默认即安全的出站策略ssrf: {}表示采用默认的 SSRF 策略。根据 CrawlConfig.kt 的文档说明默认策略为拒绝访问私网地址、仅允许 http/https 协议、最多跟随 5 次重定向。这是服务端场景的重要防线——避免恶意 URL 把提取引擎当作代理去打内网地址。e2e 测试套件在companion object中通过System.setProperty(CRAWLBERG_ALLOW_PRIVATE_NETWORK, true)放宽该限制UrlTest.kt因为其 mock 服务器运行在本地你在真实业务中不应照搬这一放宽默认的私网拒绝策略才是生产环境的正确选择。结果解读正文与远程资源统计Xberg.extract()的返回值中本次示例用到两个字段result.results.first().content第一个也是 document 模式下唯一的提取结果的正文字段。对纯文本文档而言content即文档正文本身。result.summary.remoteUrls本次提取过程中实际访问的远程资源数量。e2e 测试断言其等于1UrlTest.kt恰好印证单文档模式只拉取一个远程文档这一行为——如果起始页面还引用了图片、CSS 等资源该计数会相应增加可作为观测提取副作用规模的指标。从 fixture 到 e2e源码级证据链仓库中围绕该场景提供了一条完整的证据链fixture 定义url_remote_text_document.json 声明了本用例的输入、配置与断言mock 服务器对GET /返回200、Content-Type: text/plain; charsetutf-8、正文为Remote document hello from Xberg URL e2e.输入为{kind:uri,uri:$mock_url}配置为{url:{mode:document}}断言不报错、正文包含Remote document hello、summary.remote_urls等于 1。e2e 测试UrlTest.kt 中的testUrlRemoteTextDocument将上述 fixture 落地为可执行代码通过系统属性或环境变量注入 mock 服务器地址后调用Xberg.extract并验证正文与统计。绑定实现Xberg单例对象在 Xberg.kt 中完成 Jackson 定制ByteArray 以无符号字节数组编解码与 Rust serde 的Vecu8对齐与 JNI 分发Android 侧通过System.loadLibrary(xberg_jni)加载原生库。对读者而言这套证据链意味着示例代码的行为是有测试背书的你在集成时可以直接以该测试为模板把 mock 服务器地址替换为自己的目标 URL。集成要点与注意事项命名策略必须匹配忘记SNAKE_CASE是这类集成最常见的坑会导致ExtractInput/ExtractionConfig反序列化出的字段与原生端不一致。JNI 库加载Android 环境需要xberg_jni原生库可用System.loadLibrary并建议在初始化阶段完成而非每次提取时重复加载。协程环境示例使用runBlocking包裹实际业务中应放入Dispatchers.IO或专用调度器避免阻塞主线程大量输入可使用Xberg.extractBatch批量处理同见 UrlTest.kt 的混合批量示例。安全默认值除非确有内网抓取需求否则保持默认 SSRF 策略拒绝私网如需突破请评估暴露面而不是像测试套件那样全局放开。文档大小预算注意maxBodySize默认 100 MiB 兜底与documentMaxSize默认 50 MB两项限制超大文档需显式调大或改为流式输出目录documentOutputDir。小结通过Xberg.extract()提取远程文本文档在 Kotlin (Android) 绑定中只需一个输入对象 一份 URL 配置 一次调用。本文从示例代码出发剖析了ExtractInput的 URI 语义、mode: document与 crawl 配置的关系、默认 SSRF 策略的含义以及结果中content与remoteUrls的读取方式并以仓库中的 fixture 与 e2e 测试作为完整证据链。将该模式推广到 HTML 页面、gzip 编码文档乃至递归文档链接等场景时只需在同一配置骨架中调整 crawl 字段即可平滑演进。赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐在 KotlinAndroid中使用 Xberg 递归提取 URL 文档链接在 KotlinAndroid中使用 Xberg 递归提取 URL 文档链接 递归 URL 提取recursive URL extraction是 Xb后端AI 应用NLPXberg C FFI 实战用 xberg_extract 从远程 URL 提取文本文档Xberg C FFI 实战用 xberg_extract 从远程 URL 提取文本文档 本文以 Xberg 仓库中自动生成的 C 语言 E2E 片段 url后端AI 应用NLPXberg Elixir 远程 URL 文档提取实战使用 extract_async 处理远程文本文档Xberg Elixir 远程 URL 文档提取实战使用 extract_async 处理远程文本文档 导读 本文围绕 Xberg 官方 Elixir 绑定中后端AI 应用NLP上一篇GNU Emacs效率提升节省时间的30个高级技巧下一篇eSpeak NG 文本转语音引擎安装和配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表