Витягніть детальну таблицю, не дозволяйте сортуванню порушувати відповідність між рядками та вихідним текстом
Однакова кількість деталей у двох рядках не означає, що вони дублюються; відсортована таблиця більш охайна, але це не означає, що її можна вирівняти з вихідним текстом рядок за рядком. Те, що найлегше втрачається під час вилучення деталей, це часто відповідність між кожним рядком і джерелом. Ця стаття пояснює, як його зберегти.
Те, що суми в двох рядках однакові, не означає, що вони дублюються. Те, що таблицю відсортовано, не означає, що вона все ще відповідає вихідному тексту рядок за рядком. Під час вилучення деталей часто втрачається не саме поле, а відповідність між кожним рядком і джерелом.
Ця стаття підходить для людей, яким потрібно витягти деталі з таких документів, як контракти, пропозиції, фінансові таблиці тощо. Вона також підходить для розробників, які створюють процеси подальшої обробки. Після прочитання ви дізнаєтесь, як зберегти вихідну інформацію для кожної деталі, як вирішувати проблеми, спричинені однаковою кількістю, міжсторінковими заголовками та сортуванням, і яке вирівнювання слід використовувати під час перевірки після перекладу.
Як зберегти відповідність між рядками та джерелами під час вилучення деталей? Висновок одним реченням
Збережіть стабільний ідентифікатор джерела для кожної деталі. Сортування призначене лише для відображення та не перезаписує оригінальний номер рядка.
| ваша ситуація | Рекомендовані практики | причина |
|---|---|---|
| Обидва рядки мають однакову суму | Спочатку перевірте вихідну сторінку та номер вихідного рядка та не поспішайте видаляти дублікати. | Однакова сума не означає повторення даних |
| Потрібно відобразити, відсортувавши за кількістю | Створіть подання дисплея та збережіть вихідний номер рядка без змін | Відсортовані серійні номери не слід повертати до джерела |
| У таблиці з’являються повторювані заголовки або проміжні підсумки | Виключити відповідно до інтерпретованих правил і зберегти виключені рядки та причини | Полегшіть рецензентам виявлення випадкового видалення |
| Багатомовні деталі потрібно узгодити | Вирівнюйте за ідентифікатором джерела, а не лише за перекладеною назвою продукту | Можуть повторюватися як назва товару, так і сума |
Спочатку збережіть ідентифікатор стабільного рядка
Зберігайте вихідну сторінку, номер таблиці та вихідний номер рядка для кожної деталі або стабільний ідентифікатор, що складається з цієї інформації. Назва продукту та кількість можуть повторюватись і не підходять як окремі ідентифікатори.
Коли низхідній системі потрібно відсортувати за кількістю, ви можете створити відображення, але не запишіть помилково відсортовані серійні номери назад до вихідного джерела.
Декілька способів його можна використовувати як ідентифікатор рядка
| Шлях | Чи підходить він як ідентифікатор? | причина |
|---|---|---|
| Вихідна сторінка + номер таблиці + номер вихідного рядка | Підходить | Може стабільно розташувати рядок в оригінальному тексті |
| Назва продукту | Не підходить для використання окремо | можливий дублікат |
| Сума | Не підходить для використання окремо | можливий дублікат |
| Відображення серійного номера після сортування | Не підходить як джерело | Зміниться після сортування |
Зверніть увагу на унікальність схеми JSON
Сам масив JSON зберігає порядок, але uniqueItems у схемі не є скороченням для «поле унікальне». Два об’єкти все ще можуть вважатися різними елементами, доки інші поля відрізняються. Унікальність на рівні поля потрібно перевіряти окремо.
Набір деталей з однаковою сумою та різними джерелами
from collections import Counter
rows = [{"source_id": "p1-t1-r1", "item": "Bolt", "amount": "10.00"},
{"source_id": "p1-t1-r2", "item": "Nut", "amount": "10.00"}]
def check_ids(items):
counts = Counter(row["source_id"] for row in items)
return [key for key, count in counts.items() if count > 1]
assert check_ids(rows) == []
assert len(rows) == 2
assert check_ids(rows + [dict(rows[0])]) == ["p1-t1-r1"]
display = sorted(rows, key=lambda row: row["item"], reverse=True)
assert [r["source_id"] for r in rows] == ["p1-t1-r1", "p1-t1-r2"]
assert {r["source_id"] for r in display} == {r["source_id"] for r in rows}
Це перевірка ідентичності синтетичних даних, а не засіб розпізнавання таблиць. Код навмисно не дедуплікує ті самі суми, а також не розглядає порядок відображення як вихідний порядок.
Правила генерації ідентифікаторів джерела правди повинні враховувати версії файлів. Інакше вміст на тій самій сторінці та рядку в обох версіях може бути прийнято за один і той самий доказ.
Якщо кількість рядків неправильна, спочатку знайдіть відсутнє посилання.
| Феномен | слід перевірити | не слід приймати відразу |
|---|---|---|
| Повторна сума | Незалежно від того, чи це інший проект, чи інша вихідна лінія | Видаліть дублікати за сумою |
| Дубльований ідентифікатор джерела | Чи є повторний імпорт або помилка зіставлення? | Випадково додайте новий ідентифікатор |
| Кількість рядів зменшено | Об’єднайте клітинки, порожні рядки та правила фільтрації | Доповніть попередній рядок |
| Зміна послідовності | Чи сортувати лише за показами | Перезаписати вихідний номер рядка |
Міжсторінковий заголовок — це не звичайний рядок даних
Повторювані заголовки таблиці, описи таблиці продовження та рядки проміжних підсумків можуть входити до масиву деталей. Для їх видалення потрібні правила, які можна інтерпретувати, які стосуються не лише більш високого позиціонування чи коротшого тексту.
Збереження виключених рядків і їх причин може допомогти рецензентам виявити випадкове видалення. Інакше проблема буде вирішена лише в тому випадку, якщо підсумкова сума не збігається.
Перенесіть вихідний зв'язок на перевірку після перекладу
Багатомовні розклади повинні бути узгоджені за ідентифікатором джерела, а не лише за перекладеною назвою продукту. Під час оцінювання результатів перекладу табличних документів OmniDoc (портал продуктів) варто перевіряти окремо співвідношення рядків і стовпців, кількості та одиниці.
Ідентифікація джерела в цій статті є зовнішньою інженерною угодою, а не описом внутрішньої реалізації платформи.
Джерела: Масив схем JSON
🎯 Який спосіб вам підходить?
Якщо вам потрібно відсортувати за кількістю, щоб показати це іншим
Створіть подання відображення, сортування впливає лише на відображення, початкова вихідна сторінка та номер вихідного рядка залишаються незмінними.
Якщо ваша таблиця має міжсторінкові заголовки або проміжні підсумки
Використовуйте інтерпретовані правила, щоб виключити ці рядки, і збережіть виключені рядки та причини для подальшого перегляду.
Якщо ви хочете обробити кілька версій файлу
Правила створення ідентифікатора джерела слід включити до версії файлу, щоб запобігти переплутанню вмісту одного рядка на одній сторінці між різними версіями.
Якщо ви хочете зробити багатомовне детальне вирівнювання
Вирівнюйте за ідентифікатором джерела, не покладайтеся лише на переклад назви продукту.
❓ Часті запитання (FAQ)
1. Суми в двох рядках однакові. Чи можу я видалити дублікати безпосередньо?
не можна. Однакова сума не означає дублювання даних. Спершу слід перевірити їх вихідну сторінку та номер вихідного рядка, щоб переконатися, що вони належать до різних проектів або різних вихідних рядків.
2. Чому назва продукту не підходить як ідентифікатор рядка?
Назва продукту та сума можуть повторюватися, і неможливо стабільно розташувати рядок в оригінальному тексті при окремому використанні.
3. Чи можна новий порядковий номер записати назад до вихідних даних після сортування?
Не рекомендується. Відсортовані серійні номери придатні лише для відображення. Перезапис оригінальних номерів рядків призведе до втрати відповідності з джерелом.
4. На що слід звернути увагу при видаленні дублікатів заголовків?
Потрібні інтерпретовані правила, а виключені рядки та причини мають бути збережені, щоб можна було виявити випадкове видалення.
📝 Підсумок
Витягаючи деталі, спочатку зберігайте відповідність між кожним рядком і джерелом, а потім говорите про сортування та дедуплікацію. Код у цій статті є лише синтетичним прикладом демонстрації та не є гарантією всіх реальних файлів або ефектів продукту. Перед обробкою важливих документів збережіть оригінали та перегляньте їх відповідно до меж і пунктів прийняття в тексті.
Спробуйте зараз: завантажте документ, щоб розпочати переклад, зберігаючи вихідний макет


