Как объединить строки строк в одну, используя панды в таблице, или как объединить разные строки столбца в предложении, используя python? - PullRequest
0 голосов
/ 04 февраля 2019

Ввод:

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 , left , top и word_num , поэтому я пытался, смогу ли я получить некоторую логику, используя обе эти возможности, возможно, я смогу достичь своего решения.

Я хотел сделать некоторые изменения в выводе, на самом деле этот вывод идетчерез PDF после его преобразования в изображение, так что он перехватывает всю строку, из-за которой идет вся строка, а вывод не имеет смысла, и сейчас я думаю о том, чтобы сгруппировать текст в полном смысле.Например, скажем, этот вывод я получаю, используя это:

g = df ['line_num']. Ne (df ['line_num']. Shift ()). Cumsum () out = '\ n'.join (df.groupby (g) [' text ']. agg (' '.join)) print (out)

Output =

"Меня зовут raghav # 40 @gmail.com

Проблема только усложнилась $ 2019 Январь "

Ожидаемый результат =

" Меня зовут raghav

* 40

@ gmail.com

Проблема только усложнилась

2019 Январь "

Все они в разных строках, независимо от того, находятся ли они в одной строке или нет, но логически сгруппированы в разные строки.

В моем понимании, возможно, мы сможем добиться этого, выполнив следующие действия: введите описание изображения здесь a) Слова в одной строке сгруппированы, если x расстояние

b) Слова в следующей строке сгруппированы с предыдущим, если у расстояние <порог </p>

Порог - ширина (изображение) / 100;х расстояние рассчитывается от слева ;y расстояние рассчитывается от вершины.

Можем ли мы сделать это?Дайте мне знать, если вопрос недостаточно ясен!Спасибо!

Добавлено изображение, которое я пытаюсь получить, данные в нем немного сложнее, я изменил его, как мне!

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Чтобы ответить на ваш второй вопрос, возможно, попробуйте выполнить итерацию по столбцу следующим образом.

phrase = ""

for i in range(0, df.count):
    if type(df.iat[i, 'text']) == str:
        phrase = phrase + " " + df.iat[i, 'text']

Чтобы добавить пробел / ..., я согласен с jezrael, используйте метод str.cat.

0 голосов
/ 04 февраля 2019

Используйте double 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 !!!!
...