我正在尝试编写解析大文本文件的代码。但是,为了获得所述文本文件,我通过pdfminer运行原始PDF文件。虽然这有效,但它也会返回包含许多随机空格的文本文件(见下文)
SM ITH , JO HN , PHD
1234 S N O RT H AV E
Python中是否有任何简单的方法只删除某些空格,因此单词不会分开?对于上面的示例,我希望它看起来像
SMITH, JOHN, PHD
1234 S NORTH AVE
感谢。
答案 0 :(得分:3)
你最想做的事情很可能是做不完美的事情,并且很难做到足以让你满意。我将在下面解释。
但是你很有可能不应该首先做这件事。 pdfminer
具有高度可配置性,只需指定较小的-M
值即可为您提供所需的文本。你需要做一些试验和错误,但如果这样做,那就比在事后处理事情要容易得多。
如果你想这样做,你需要提出一个规则,确定哪些空格是“随机额外空格”,哪些是真正的空格,然后才能在Python中编码。我不知道有这样的规则。
在您的示例中,您可以通过将多个空格转换为单个空格并将单个空格转换为空格来处理大多数。应该明白如何做到这一点。即使您无法想到一个聪明的解决方案,三重替换也可以正常工作:
s = re.sub(r'\s\s+', r'<space>', s)
s = re.sub(r'\s', r'', s)
s = re.sub(r'<space>', r' ', s)
但是,这条规则并不完全正确,因为在JO HN , PHD
中,逗号后面的空格不是一个随机的额外空格,但它不会显示为两个或多个空格。对于“1234 S”中的空间也一样。并且,很可能,在许多其他情况下,对于您的真实数据也是如此。
另一个稍微接近的规则是你只删除字母之间的单个空格。同样,如果可行的话,它很容易编码。例如:
s = re.sub(r'(\w)\s(\w)', r'\1\2', s)
s = re.sub(r'\ s +',r'',s)
但现在在SMITH
和JOHN
之后的逗号前面留空格。
也许你需要输入一些关于英文标点符号的信息 - 剥去标点符号周围的空格,然后在逗号或句号后面的空格中,在引号等处加回来。
或者......好吧,除了你之外,没有人知道你的数据是什么样子并想出来的。
如果你不能提出一个好的规则,唯一的选择是建立一些复杂的启发式方法,围绕在字典中查找可能的单词并猜测哪一个更有可能 - 哪些仍然不能使一切正确(例如,你怎么知道“B OO KM AR K”是“BOOK MARK”还是“BOOKMARK”?),但这是你能做的最好的。
答案 1 :(得分:0)
你要做的是不可能的,例如,“桌面顶部”应该是“桌面顶部”还是“桌面”?