我们正在一个项目中使用 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/