输入:
LineNo word_num left top width text
1 1 322 14 14 My
1 2 304 4 41 Name
1 3 322 5 9 is
1 4 316 14 20 Raghav
2 1 420 129 34 Problem
2 2 420 31 27 just
2 3 420 159 27 got
2 4 431 2 38 complicated
1 1 322 14 14 #40
1 2 304 4 41 @gmail.com
2 1 420 129 34 2019
2 2 420 31 27 January
正如你可以看到有列lineNo的,左侧,顶部和word_num,所以我是想,如果我可以用这些既也许我可以实现我的解决方案得到一些逻辑。
我想要做一些调整输出,实际上这个输出是通过转换为图像的后一个PDF到来,所以它正在迎头赶上整条生产线,因为它的整条生产线即将到来,输出没了感觉,我是什么现在做的思考是组中的意义全方式的文本。对于e.g可以说,这个输出我正在使用此获得:
G = DF [ 'line_num']。NE(DF [ 'line_num']。位移())。cumsum()OUT = '\ n'.join(df.groupby(克)[' 文本 ']。AGG(' ”。加入))打印(下)
输出=
“我的名字是RAGHAV#4015 gmail.com
问题刚刚复杂$ 2019年1月。”
预期输出=
“我的名字是RAGHAV
*40
@ gmail.com
问题刚刚复杂
2019 1月。”
所有在不同的线路,无论它们是否在同一行或没有,但在不同的线路逻辑分组。
在我的理解,也许我们可以通过执行以下步骤实现这一点:如果enter image description here一)字样的同一行进行分组距离x <门槛
b)关于下一行字被与先前如果y距离<阈分组
阈值是宽度(图像)/ 100;距离x是从左侧计算; ÿ距离是从顶部计算。
我们能做到这一点?让我知道如果这个问题不够清晰!谢谢!
增加了图像我试图得到输出,它的数据有点复杂,这个我根据我改变了它!
使用双join
- 与agg
,然后输出Series
:
out = '.....'.join(df.groupby('LineNo')['text'].agg(' '.join))
print (out)
My Name is Raghav.....Roll No. # 242
与str.cat
另一种解决方案:
out = df.groupby('LineNo')['text'].agg(' '.join).str.cat(sep='.....')
编辑:
g = df['LineNo'].ne(df['LineNo'].shift()).cumsum()
out = '.....'.join(df.groupby(g)['text'].agg(' '.join))
print (out)
My Name is Raghav.....Roll No. # 242.....hello the problem just.....got more complicated !!!!
要回答你的第二个问题,也许尝试通过柱像这样的迭代。
phrase = ""
for i in range(0, df.count):
if type(df.iat[i, 'text']) == str:
phrase = phrase + " " + df.iat[i, 'text']
要添加的空间/ ...,我同意jezrael,使用str.cat方法。