Closed huichen5796 closed 1 year ago
Um weitere Verarbeitungen zu vereinfachen:
Gründe dafür, warum der header komplex ist.
Grund 1, Wörter sind zu lang Grund 2, es gibt primär- und sekundär-header
Für Grund 2 sollten zuerst die leeren Zellen in der erster Zeile ausgefüllt werden, für Grund 1 sollten aber nicht. Aber es ist unmöglich nur mit Lokationeninformationen der Zellen zu beurteilen, ob Ausfüllung erforderlich oder nicht. Um zu beurteilen muss man ggf. NLP DeepLeaning Modell nutzen. ---> Ausblick
Deswegen ignoriere ich Grund 1, kümmere ich nur um Grund 2, also der Grund für Existieren des komplexen headers ist primär- und sekundär-header, man muss alle leere Zellen in der erster Zeile ausfüllen.
Der daraus resultierende Fehler:
Schritte für Schmelzen der header
Ich zeiche die volle Zeile als 1, nicht volle Zeile als 0. Und hier werden #col0row0# Teil und header-Teil berücksichtiget. Es gibt insgesamt sieben Möglichkeiten von komplexen Tabellen, also 100, 010, 001, 110, 101, 011, 000, 111. 111 ist sehr seltsam, wir ignorieren es. Es erscheint nur, wenn alle Wörter so lang sind, dass sie drei Zeilen einnehmen, dieser Fall wird jedoch wegen Basis 3 (seh oben) als einfache Tabelle beurteilt.
Analyse anhand Basis 6 und Basis 7
Ausfüllung der erster Zeile Regel 1. zuerst sollten wir bestimmen -- welche Zellen können dilatiert werden, also welche Zellen sind primär header. wie zum Beispiel: Zelle 'Delta' nicht, Zelle 'Omikron' kann. dadruch: eine(hier ist der Fall zeile_nummer = 2, if zeile_nummer = 3 sollte hier zwei sein.) Zelle unter 'Delta' ist leer, deswegen hat 'Delta' kein sekundär header, also 'Delta' ist kein primär header --> kann nicht dilatiert werden.
Regel 2. wenn die beide Seite einer leere Zelle sind pirmär header: anhand Basis 6 werden die abweichenden Zellen immer nach oben links korrigiert. Deswegen für eine leere Zelle hat der primär header in der linke Seite Vorrang.
Regel 3. wir sollten auch bestimmen -- welche leere-Zellen können ausgefüllt werden. wenn die zwei(hier ist der Fall zeile_nummer = 3, if zeile_nummer = 2 sollte hier eins sein.) Zellen unter der leerer Zelle in der erster Zeile beide leer sind, es bedeutet, diese leere Zelle kein header ist, dann sollte die leere Zelle nicht ausgefüllt werden
Algorithmus Schritt 1: bestimmen -- welche Zellen können dilatiert werden Schritt 2: bestimmen -- welche leere Zellen können ausgefüllt werden Schritt 3: iterate Ausbreiten der dilatierbaren primären headers
für jede asugefüllbare leere Zelle:
Dann nach Ausfüllung der erste Zeile ist das Schmelzen des headers anhand zeile_nummer
Verarbeitung von Zeilenindex Teil -- vertikal schmelzen Schmelzen von leere values
So bisher sind allgemeine komplexe Tabelle in einfacher Tabelle transformiert.
für Zeilenindex mit mehr Spalt, brauche noch horizonal Schmelzen. wie beurteilen wir komplexe Zeilenindex -- in diesem Teil gibt es noch empty cell nach oben genannter alle Verarbeitung.
Beispiel:
Übrigens: Die Spalte ist nach den ZentrumPunktkoordinaten geteilt. warum zentrum Diese Teilungsweise kann sowohl zentrierte als auch linksbündige und rechtsbündige Tabellen berücksichtigen, Zellen mit großen Längenunterschieden unter derselben Spalte können auch möglichst in derselben Spalte aufgeteilt werden.
Wenn der Längenunterschied sehr groß ist, werden Zellen in derselben Spalte fälschlicherweise in zwei Spalten aufgeteilt. Daher eine Ursache für komplexe Zeilenindex-Spalten: einige Zellen sind zu länger als die andere, die in einer gleicher Spalte liegt. Ausßerdem gibt es der zweite Grund für komplexe Zeilenindex-Spalten: primär- und sekundär-Zeilenindex.
Wenn die beiden Spalten wie ein Reißverschluss ineinander passen können, dann ist das der erste Grund.
wenn nicht, dann ist es der zweite Grund.
Nun wird der Schwellwert der Teilung der Spalte dynamisch entsprechend der Länge jeder Zellen bestimmt, kleiner Zelle hat kleiner Schwellwert, also wird die Situation von Grund 1 weitestgehend vermieden, also kann sie ignoriert werden. Deswegen berücksichtigen wir bei Schmelzen der Zeilenindex-Teil nur die Situation von Grund 2. Für Grund 2 sollte die leeren Zellen in der erster Spalte ausgefüllt werden. Schwerpunkt hier ist wie sollte die leere Zellen ausgefüllt werden.
habe aber keine Ahnung wie sollte die leere Zellen ausgefüllt werden. für diese Tabelle sollte Zuerst wird der rote Rahmen zum grünen Rahmen hinzugefügt, dann werden der rote Rahmen und der grüne Rahmen in die leere Zelle kopiert. Aber ich denke, dieser Prozess funktioniert nur für diese eine Art von Tisch und ist nicht robust.
TODOS: Angenommen 3 zu verbessern Schwellwert der Teilung der Spalten und Zeilen zu verbessern
Verbessern:
oben genannte Vorgehensweise ist nur für header mit innerhalb 3 Zeilen verfügbar. Tatsächlich gibt es auch viele Tabellen mit mehr als 3 Zeilen header. so sollte erweitert werden.
In Anbetracht die Situation von einfache Tabelle 111, von 2 Zeilen header 001, 101, 011, von 3 Zeilen header 100, 010, 110, 000, Zeilen ab der dritten Zeile kann genutzt werden zum Bestimmung der Anzahl der Header.
dardurch kann die Bestimmung der zeile_nummer auf Situation mehr als 3 Zeile header erweitert werden.
dann sollten folgende Bestimmungen auch erweitert werden:
so:
für dilatierbare primäre Zellen: darunter sollten die Zellen innerhalb zeile_nummer Zeilen minimal eine volle Zelle sein. z.b. hier ist ein 4 Zeilen header. die drei Zellen unter 'Delta' sind alle leer, deswegen kann es nicht dilatiert werden. Im Gegensatz dazu 'Omikron' kann.
für ausgefüllbare Zellen: darunter sollte die Zellen innerhalb zeile_nummer Zeilen minimal eine volle Zelle sein.
Alle obigen Prozesse können somit auf einen allgemeineren Bereich ausgedehnt werden.
Aber nun gibt es ein BUG, wenn die Zeilenindex Teil auch komplex ist. hier wird die Tebelle als 4 Zeilen header beurteilt, aber tatsächlich ist sie 3 Zeilen.
Wir mussten die Reihenfolge der Verarbeitung ändern, um die Allgemeingültigkeit zu maximieren.
zuerst vertikales Schmelzen von Zeilenindex Teil Hier verwenden wir eine robustere Methode, um den Zeilenstatus zu beurteilen: Leerzeilen sind die Zeilen, deren alle Zellen ab der dritten Spalte leer sind. In diesem Schritt werden wir alle leeren Zeilen nach oben zusammenführen (include header Zeilen).
angenommen dann, dass sich die headerzeile in der oberen Hälfte der Tabelle befindet. Wenn in der unteren Hälfte der Tabelle Leerzeichen vorhanden sind, führe ich dann die Spalten, die leere Zellen haben, mit der vorherige Spalte zusammen.
dann gibt es um die Bestimmung von zeile_nummer.
dann Bestimmung der Qualifikationen der Zellen in erster Zeile, dilatiert zu werden und ausgefüllt zu werden eigentlich gibt es nach Schritt 2 keine empty_cell ohne Qualifikation, ausgefüllt zu werden.
Schmelzen von header
Basis 1. zwei Zustände von Zelle Zelle ist voll ==> d.h. in der Zelle gibt es Wörter Zelle ist leer
Basis 2. Abteilung einer Tabelle Alle Tabellen bestehen aus vier Teilen.
Basis 3. zwei Typen von Tabellen einfache Tabelle: header hat nur eine Zeile, und Zeilenindex hat auch nur eine Spalt. komplexe Tabelle: header hat mehr als eine Zeile, oder Zeilenindex hat mehr als eine Spalt. hier: anhand Angenommen 3. (Angenommen seh unten) header liegt immer innerhalb ersten drei Zeilen. und Angenommen 2. #col1row0# ist immer voll. (Falls es nicht voll ist, füllen wir es aus.) Nun beurteilen wir so: wenn es in der ersten drei Zeilen keine leere Zelle gibt, ist die Tabelle einfache Tabelle.
Basis 4. Komplexe Tabellen können nach Verarbeitungen in einfachen Tabellen transformiert werden. Verarbeitungen: Schmelzen von header, Schmelzen von Zeilenindex
Basis 5. zwei Zustände von Zeile Zeile ist voll ==> d.h. in der Zeile gibt es keine leere Zelle Zeile ist nicht voll
Basis 6. PositionCorrection von Tabellenzellen see issue PositionCorrection Daraus kann man sehen ==> abweichende Zellen werden immer nach oben links korrigiert. Deswegen kann man sagen: Je höher die Zeile in der Tabelle liegt, desto mehr möglich ist es für die Zeile, voll zu sein.
Basis 7. Nach Schmelzen ist die header-Zeile unbedingt voll, d.h. jeder Spalt von values hat ein entsprechendes header. Basis 8. Nach Schmelzen ist die Zeilenindex-Spalte auch unbedingt voll, d.h. jeder Zeile von values hat ein entsprechendes Zeilenindex.