Extrayez le tableau détaillé, ne laissez pas le tri perturber la correspondance entre les lignes et le texte original
La même quantité de détails dans les deux lignes ne signifie pas qu’il s’agit de données en double ; le tableau trié est plus ordonné, mais cela ne signifie pas qu'il peut être aligné avec le texte original ligne par ligne. Ce qui se perd le plus facilement lors de l’extraction de détails, c’est souvent la correspondance entre chaque ligne et la source. Cet article vous expliquera comment le conserver.
Ce n’est pas parce que les montants des deux lignes sont identiques qu’il s’agit de données en double. Ce n’est pas parce que le tableau est trié qu’il correspond toujours au texte original ligne par ligne. Lors de l’extraction de détails, ce qui est facilement perdu n’est souvent pas le champ lui-même, mais la correspondance entre chaque ligne et la source.
Cet article convient aux personnes qui ont besoin d'extraire des détails de documents tels que des contrats, des devis, des tableaux financiers, etc. Il convient également aux développeurs qui construisent des processus de traitement en aval. Après avoir lu, vous saurez comment conserver les informations source pour chaque détail, comment gérer les problèmes causés par le même montant, les en-têtes et le tri sur plusieurs pages, et quel alignement doit être utilisé lors de la vérification post-traduction.
Comment conserver la correspondance entre les lignes et les sources lors de l'extraction des détails ? Conclusion en une phrase
Enregistrez un identifiant de source stable pour chaque détail. Le tri est uniquement destiné à l'affichage et n'écrase pas le numéro de ligne d'origine.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
| Les deux lignes ont le même montant | Vérifiez d’abord la page source et le numéro de ligne source, et ne vous précipitez pas pour supprimer les doublons. | Le même montant ne représente pas des données en double |
| Doit être affiché trié par montant | Créez une vue d'affichage et conservez le numéro de ligne d'origine inchangé | Les numéros de série triés ne doivent pas être réécrits à la source |
| Des en-têtes ou des sous-totaux en double apparaissent dans le tableau | Exclure selon des règles interprétables et conserver les lignes et les motifs exclus | Permettre aux réviseurs de détecter plus facilement les suppressions accidentelles |
| Les détails multilingues doivent être alignés | Aligner par ID source, pas seulement par nom de produit traduit | Le nom et la quantité du produit peuvent être répétés |
Enregistrez d'abord l'identité de la ligne stable
Conservez la page source, le numéro de table et le numéro de ligne source pour chaque détail, ou un identifiant stable composé de ces informations. Le nom et la quantité du produit peuvent être répétés et ne conviennent pas comme identités distinctes.
Lorsque l'aval doit trier par montant, vous pouvez créer une vue d'affichage, mais ne réécrivez pas par erreur les numéros de série triés dans la source d'origine.
Plusieurs façons de l'utiliser comme identité de ligne
| Chemin | Est-ce approprié comme identité ? | raison |
|---|---|---|
| Page source + numéro de table + numéro de ligne source | Approprié | Peut localiser de manière stable la ligne dans le texte original |
| Nom du produit | Ne convient pas pour une utilisation seule | doublon possible |
| Montant | Ne convient pas pour une utilisation seule | doublon possible |
| Afficher le numéro de série après le tri | Ne convient pas comme source | Changera après le tri |
Faites attention au caractère unique du schéma JSON
Le tableau JSON lui-même conserve l'ordre, mais uniqueItems dans le schéma n'est pas un raccourci pour « un champ est unique ». Deux objets peuvent toujours être considérés comme des éléments distincts tant que les autres champs sont différents. L’unicité au niveau du champ doit être vérifiée individuellement.
Un ensemble de détails avec le même montant et des sources différentes
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}
Il s'agit d'un contrôle d'identité sur des données synthétiques, pas d'un outil de reconnaissance de table. Le code ne déduplique délibérément pas les mêmes montants et ne considère pas non plus l'ordre d'affichage comme l'ordre source.
Les règles de génération des identifiants de source de vérité doivent prendre en compte les versions des fichiers. Dans le cas contraire, le contenu de la même page et de la même ligne dans les deux versions pourrait être confondu avec le même élément de preuve.
Lorsque le nombre de lignes est incorrect, recherchez d'abord le lien manquant.
| Phénomène | devrait être vérifié | ne doit pas être pris immédiatement |
|---|---|---|
| Montant en double | Qu'il s'agisse d'un projet différent ou d'une ligne source différente | Supprimer les doublons par montant |
| ID source en double | Y a-t-il une erreur d’importation ou de mappage en double ? | Ajouter aléatoirement un nouvel identifiant |
| Nombre de lignes réduit | Fusionner les cellules, les lignes vides et les règles de filtrage | Compléter avec la ligne précédente |
| Changement de séquence | S'il faut trier uniquement pour les impressions | Écraser le numéro de ligne d'origine |
L'en-tête interpage n'est pas une ligne de données ordinaire
Les en-têtes de tableau répétitifs, les descriptions de tableau de continuation et les lignes de sous-totaux peuvent tous entrer dans le tableau de détails. Les supprimer nécessite des règles interprétables qui ne se limitent pas à un positionnement plus élevé ou à un texte plus court.
Conserver les lignes exclues et leurs raisons peut aider les réviseurs à détecter les suppressions accidentelles. Autrement, le problème ne persistera que si le total final ne correspond pas.
Amener la relation source à la vérification post-traduction
Les plannings multilingues doivent pouvoir être alignés sur l'ID source, et pas seulement sur le nom du produit traduit. Lors de l'évaluation des résultats de traduction des documents tabulaires de OmniDoc (portail produit), les relations ligne-colonne, les quantités et les unités valent toutes la peine d'être vérifiées individuellement.
L'identification de la source de cet article est une convention d'ingénierie externe et ne constitue pas une description de l'implémentation interne de la plateforme.
Références : Tableau de schéma JSON
🎯 Quelle méthode vous convient ?
Si vous devez trier par montant pour le montrer aux autres
Créez une vue d'affichage, le tri n'affecte que l'affichage, la page source d'origine et le numéro de ligne source restent inchangés.
Si votre tableau comporte des en-têtes ou des sous-totaux sur plusieurs pages
Utilisez des règles interprétables pour exclure ces lignes et conservez les lignes exclues et les raisons pour un examen ultérieur.
Si vous souhaitez traiter plusieurs versions d'un fichier
Les règles de génération de l'ID source doivent être intégrées à la version du fichier pour éviter que le contenu d'une même ligne sur la même page ne soit confondu entre les différentes versions.
Si vous souhaitez effectuer un alignement détaillé multilingue
Alignez-vous par ID source, ne vous fiez pas uniquement au nom du produit traduit.
❓ Questions fréquemment posées (FAQ)
1. Les montants des deux lignes sont les mêmes. Puis-je supprimer directement les doublons ?
ne peut pas. Le même montant ne signifie pas des données en double. Vous devez d’abord vérifier leur page source et leur numéro de ligne source pour confirmer s’ils appartiennent à différents projets ou à différentes lignes source.
2. Pourquoi le nom du produit ne convient-il pas comme identité de ligne ?
Le nom et la quantité du produit peuvent être répétés et il est impossible de localiser de manière stable la ligne dans le texte original lorsqu'elle est utilisée seule.
3. Le nouveau numéro de séquence peut-il être réécrit dans les données d'origine après le tri ?
Non recommandé. Les numéros de série triés ne conviennent qu'à l'affichage. L'écrasement des numéros de ligne d'origine entraînera la perte de la correspondance avec la source.
4. À quoi devez-vous faire attention lors de la suppression des en-têtes en double ?
Il doit y avoir des règles interprétables, et les lignes et motifs exclus doivent être conservés afin que les suppressions accidentelles puissent être détectées.
📝Résumé
Lors de l'extraction des détails, conservez d'abord la correspondance entre chaque ligne et la source, puis parlez de tri et de déduplication. Le code de cet article n'est qu'un exemple de démonstration synthétique et ne représente pas une garantie de tous les fichiers réels ou effets du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation du texte.


