【问题标题】:Putting spaces back into a string of text with unreliable space information将空格放回具有不可靠空格信息的文本字符串中
【发布时间】:2009-02-21 10:15:39
【问题描述】:

我需要从 pdf 中解析一些文本,但 pdf 格式会导致间距极其不可靠。结果是我必须忽略空格,并有连续的非空格字符流。

关于如何解析字符串并通过猜测将空格放回字符串中的任何建议?

我正在使用红宝石。或者我应该说我在想ruby?

编辑:我已经使用 pdf-reader 提取了文本。有些 pdf 文件的格式很好,有些则没有。文本与定位混合的示例:

.7aspe-5.5cts-715.1o0.6f-708.5f-0.4aces-721.4that-716.3are-720.0i-1.8mportant-716.3in-713.9soc-5.5i-1.8alcommunica6.6tion6.3.-711.6Althoug6.3h-708.1m-1.9od6.3els-709.3o6.4f-702.8f5.4ace-707.9proc6.6essing-708.2haveproposed-611.2ways-615.5to-614.7deal-613.2with-613.0these-613.9diff10.4erent-613.7tasks,-611.9it-617.1remainsunclear-448.0how-450.7these-443.2mechanisms-451.7might-446.7be-447.7implemented-447.2in-450.3visualOne-418.9model-418.8of-417.3human-416.4face-421.9processing-417.5proposes-422.7that-419.8informa-tion-584.5is-578.0processed-586.1in-583.1specialised-584.7modules-577.0(Breen-584.4et-582.9al.,-582.32002;Bruce-382.1and-384.0Y92.0oung,-380.21986;-379.2Haxby-379.9et-380.5al.,-

如果我只打印字符串数据(我在每行的末尾添加了返回以防止它 搞砸了这里的布局:

'在人类时间的面部身份和可变方面的不同表示 洛贝蒂莫西J.安德鲁斯*和迈克尔P.尤班克心理学系,沃尔夫森研究所, University of Durham, UKReceived23December2003;revised26March2004;accepted27July2004Availab leonline2004 年 10 月 14 日神经系统底层面部感知必须代表不变 指定身份的面部特征,以及便于改变的面部特征 社交。然而,关于面部信息的方式仍然存在于大脑中 在这项研究中,我们使用了 fMRadaptation(减少 fMRI 活动, 重复呈现相同图像)以了解视觉皮层的不同面部和对象选择性区域如何影响面部感知的特定方面'

数据由回调吐出,所以如果我在返回每个字符串时打印它,它看起来像这样:

'那个

-571.3

神经

-573.7

系统

-577.4

底层

13.9

-577.2

-573.0

perc

13.7

选项

-574.9

必须

-572.1

代表

20.8

发送

-577.0

不变

14.4

g

-538.5

功能

16.5

es

-529.5

-536.6

一个

-531.4

'

经过检查,看起来真实空间是

【问题讨论】:

    标签: ruby string text dictionary


    【解决方案1】:

    嗯...我不得不说猜测从来都不是一个好主意。找出问题的根本原因并解决问题就是答案,其他任何事情都是一团糟。

    如果间距从PDF中不可靠,它是如何不可靠的? PDF 查看器需要能够可靠地分隔文本,以便数据存在于某处,您只需要找到它。

    编辑以下评论: 使用字典解析文件的想法(除了随机插入空格并希望得到最好的结果之外,您实际上是唯一的选择)并在已识别的单词边界处插入空格(处理标点符号时的一个真正问题,复数不会改变我相信,与首先正确解析 PDF 相比,基本词(即复数等)将是一个更大的编程挑战。毕竟,PDF 是明确定义的,而英语则有些毛骨悚然。

    为什么不看看现有解决方案的路线,如 linux 中的 ps2ascii,从你的 Ruby 中调用函数并获取结果。

    【讨论】:

    • 除了拼凑,别无选择。在这种情况下,PDF 的格式包含相当随机点的定位信息,而不仅仅是文本中的空格。我不想写一个 pdf 文本位置格式化解析器,我可以容忍数据中的一些混乱。
    【解决方案2】:

    PDF 不仅将空格存储为空格字符,而且还使用布局命令来设置空格(因此它不会打印空格,而是将“笔”移动到右侧)。也许你应该看看PDF reference(网站底部的大PDF),第9章“文本”应该是你要找的。​​p>

    编辑:阅读您对 Lazarus 回答的评论后,这似乎不是您想要的。我认为您应该尝试从某个地方获取一个单词列表并尝试使用它来拆分您的文本。一个好的策略是使用递归来做到这一点,因为例如:

    “我和你”

    第一个单词可以是“me”或“mean”,但如果你尝试“mean”,“dyou”就没有意义,所以它会是“me”,下一个单词可能是“ a”或“an”或“and”,只有“and”才有意义。

    【讨论】:

      【解决方案3】:

      如果是我,我会返回源 PDF 并尝试提取文本的不同方法,例如 iText(用于 Java)或某种 PDF 到 HTML 到文本转换软件的方法。

      【讨论】:

        猜你喜欢
        • 2017-01-28
        • 1970-01-01
        • 2015-03-13
        • 2014-02-07
        • 2015-07-05
        • 2022-10-13
        • 2023-03-04
        相关资源
        最近更新 更多