java - Google Vision API - OCR - 单独的段落/行问题 (Java)

标签 java pdf google-cloud-platform ocr google-cloud-vision

我们正在一个项目中使用 Vision API,并且遇到了有关 PDF 文件文本识别的问题。 Vision API 将不同的行识别为段落。它们是劣等线。像这样:

1. Header

Company Name
Company Address
Telephone: +90 222 111 22 33
Fax: +90 222 1112233

Vision API 将第一行识别为一个段落。没关系,我们想要它。但它也将其他 4 行识别为 1 段。我们想要逐行地了解它们。我们能做什么?

感谢您的关注!

最佳答案

如果您没有在 Google 返回的文本中看到嵌入的换行符,那么您可以通过 Word 和 Symbol(即字符)对象向下遍历段落结构的内容,并检查是否存在每个符号上的属性,即符号后检测到的中断。您可以区分换行符和其他类型的换行符,并在换行符末尾处分割段落的行。

粗略地说,如果您要在 Clojure 中执行此操作,它看起来像:

(def space-breaks #{(.getNumber TextAnnotation$DetectedBreak$BreakType/SURE_SPACE)
                    (.getNumber TextAnnotation$DetectedBreak$BreakType/SPACE)
                    })

(def line-breaks #{(.getNumber TextAnnotation$DetectedBreak$BreakType/EOL_SURE_SPACE)
                   (.getNumber TextAnnotation$DetectedBreak$BreakType/LINE_BREAK)})


(defn get-paragraph-text [paragraph]
  (let [words (.getWordsList paragraph)
        symbols (mapcat #(getSymbolsList %) words)
        sb (StringBuilder.)]
    (reduce (fn [last-break next-symbol]
              (let [sym (.getText  next-symbol)]
                (cond (line-breaks last-break) (do (.append sb "\n") (.append sb sym))
                      (space-breaks last-break) (do (.append sb " ") (.append sb sym))
                      :else (.append sb sym))
                (when (.hasProperty next-symbol)) 
                  (.getNumber (.getType (.getDetectedBreak (.getProperty next- symbol)))))))
             nil symbols)
    (clojure.string/split (str sb) #"\n")))

这会产生一系列字符串,每行一个。

关于java - Google Vision API - OCR - 单独的段落/行问题 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59467718/

相关文章:

google-cloud-platform - 403 "Request had insufficient authentication scopes"在 gcloud 容器集群获取凭据期间

java - Java中的委托(delegate)方法调用

java - SystemFile.getLocal() 的 jar 文件是什么?

javascript - 仅当选中复选框时才下载 pdf

php - 如何使用 php Excel 生成漂亮的 PDF?

google-app-engine - Google Cloud Platform 上的 TLS 身份验证

google-cloud-platform - gsutil 列出存储桶中已删除的所有文件

java - @Transaction - 如何在同一个事务中提交另一个方法

java - 使用二叉树,我想按连续顺序添加下一个节点,但是我的算法不太有效

pdf - 将pdf转换为svg