Используя панд, как мы можем сделать разные группы текста (исходя из вывода PDF) и дать им определенный идентификатор группы? - PullRequest
0 голосов
/ 06 февраля 2019

Я использовал некоторую логику для итерации моего tsv-файла таким образом, что каждой текстовой группе будет присвоен номер группы.Этот код вы можете найти в ответах, я изменил вопрос, который у меня был ранее, с помощью @Jeril я смог получить этот код.

import pandas as pd
import numpy as np

main_df = pd.read_csv('sampleOutput.tsv', delimiter='\t')
main_df = main_df.dropna(subset=['text'], axis=0)

final_df = pd.DataFrame()
for page_no in main_df['page_num'].unique():
    df = main_df[main_df['page_num'] == page_no].copy(deep=True)
    df['top'] = df['top'].astype(int)
    df['bool'] = (df['top'] - df['top'].shift(-1)) < -50
    df.loc[df['bool'] == True, 'group'] = range(
        1, (df['bool'] == True).sum() + 1)
    df['group'] = df['group'].replace({0: np.nan}).bfill()
    df['group'] = df['group'].fillna((df['bool'] == True).sum() + 1)
    final_df = pd.concat([final_df, df])

print(final_df) 

Так что это моя таблица, которую яЯ должен получить выходные данные, логика, которую я использовал, принимает пороговое значение (300,50), каждая текстовая группа будет иметь различное groupNo, это я делаю так, чтобы я мог отображать свои выходные данные более разумным способом.Группировка предложений: а) Слова в той же строке группируются, если x расстояние <порог b) Слова в следующей строке группируются с предыдущим, если y расстояние <порог </p>

x = current_left - previous_left (left относится к «left»)столбец)

y = current_line_top - previous_line_top (top относится к «верхнему» столбцу)

INPUT: - enter image description here

ОЖИДАЕМЫЙ ВЫХОД:- Это пример того, как написать весь ввод снова сложно, в основном каждое логическое предложение будет в одной группе, логика постоянна

x = текущая строка в «левом» столбце - предыдущаястрока в «левом» столбце (слева относится к «левому» столбцу)

x

y = current_line_top_column - previous_line_top_column (top относится кстолбец "top")

y

Я не могу реализовать эту логику, если кто-то может помочь!

   page_num block_num   line_num    word_num    left    top width   text    groupNo
       1    27              1          1         405    420 129 Property    1
       1    27              1          2         543    420 31  of          1
       1    27              1          3         578    420 159 Accenture   1
       1    27              4          1         409    581 105 INTERPRET   2
       1    27              4          2         520    581 90  DRAWING     2
       1    27              4          3         616    581 38  PER         2
       1    27              4          4         659    581 113 APPLICABLE  2
       1    27              4          5         779    581 267 STANDARD:   2
       1    27              5          1         411    603 114 Accenture   2
       1    27              5          2         532    603 84  ACCOO1      2
       2    46              1          1         480    800 114 yoyoyo      3
       2    46              1          2         550    800 84  heloo      3

Пожалуйстаспросите, если вопрос не ясен.

1 Ответ

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

Можете ли вы попробовать следующее:

main_df = pd.read_csv('codebeautify.tsv', delimiter='\t')
final_df = pd.DataFrame()
for page_no in main_df['page_num'].unique():
    df = main_df[main_df['page_num'] == page_no].copy(deep=True)
    df['top'] = df['top'].astype(int)
    df['bool'] = ((df['top'] - df['top'].shift(-1)).abs() >
                  50) != ((df['left'] - df['left'].shift(-1)).abs() > 350)
    df.loc[df['bool'] == True, 'group'] = range(
        1, (df['bool'] == True).sum() + 1)
    final_df = pd.concat([final_df, df])
final_df['group'] = final_df['group'].replace({0: np.nan}).bfill()
final_df['group'] = final_df['group'].fillna((final_df['bool'] == True).sum() + 1)

Пример вывода:

    left  top        text   bool  group
0    405  420    Property  False    1.0
1    543  420          of  False    1.0
2    578  420   Accenture   True    1.0
3    409  581   INTERPRET  False    2.0
4    520  581     DRAWING  False    2.0
5    616  581         PER  False    2.0
6    659  581  APPLICABLE  False    2.0
7    779  581    STANDARD   True    2.0
8    411  603   Accenture  False    3.0
9    532  603      ACCOO1   True    3.0
10   480  800      yoyoyo  False    4.0
11   550  800       heloo  False    4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...