## Verbesserung des OCR-Verfahrens für Inhaltsverzeichnisse japanischsprachiger Materialien II
* Das Ziel des ganzen Projekts * Was ist bisher erreicht? * Das Modell "jpn_vert (best)" Verbessern * Ergebnisse & Ausblick
# Das Ziel des Projekts
## Inhaltsverzeichnisse im vertikalen japanischen Schrift automatisch erschliessen
# Was ist bisher erreicht?

Vorarbeitungsprozess automatisiert mit Python

Zuerst Textbereich markieren...

Danach den Aussenbereich mit der weissen Farben füllen

# Das Modell "jpn_vert (best)" Verbessern
## Methode Fine tuning
### Fine tuning? * Es wird ein OCR-Modell nicht von Anfang an erstellt * Sondern ein bereits existierendes Modell "jpn_vert (best)" wird durch weiteres Training verbessert * Das Modell ist https://github.com/tesseract-ocr/tessdata_best zu finden
### Trainingsdaten für Fine tuning * Ground truth Daten aus Image und Texte * Ein Textkorpus zuerst erstellen * Der Textkorpus zeilenweise in die Bilder umwandeln
### Textkorpus * Text aus Wikipedia * Werktitel aus Authoritätsdaten von National Diet Library (NDL)
### Text aus Wikipedia * Die gesamten japanischsprachigen Wikipedia-Artikel als Dump * Hier: https://dumps.wikimedia.org/jawiki/latest/ (jawiki-latest-pages-articles.xml.bz2 am 01.05.2021) * Mit [Wikiextraktor](https://github.com/attardi/wikiextractor) von XML zu Text umwandeln
### Wikipedia-Texte aus Dump extrahieren I 1. `pip install wikiextractor` 1. `python -m wikiextractor.WikiExtractor jawiki-latest-pages-articles.xml`
### Wikipedia-Texte aus Dump extrahieren II 1. `find text/ | grep wiki | awk '{system("cat "$0" >> wiki.txt")}'` 1. `sed -i '/^<[^>]*>$/d' wiki.txt` 1. `sed -i '/^$/d' wiki.txt` 1. `sed -e '/\.$/d' ./wiki.txt > ./wiki_v2.txt` 1. `sed -e 's/。/。\n/g' ./wiki_v2.txt | sed -e '/^$/d' > ./wiki_v3.txt`
### Werktitel aus Authoritätsdaten von der NDL 1. [NDL Web Authorities](https://id.ndl.go.jp/auth/ndla) erlaubt [SPARQL-Query](https://id.ndl.go.jp/auth/ndla?query=PREFIX+skos%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23%3E%0D%0APREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0APREFIX+rda%3A+%3Chttp%3A%2F%2FRDVocab.info%2FElementsGr2%2F%3E%0D%0APREFIX+foaf%3A+%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0D%0APREFIX+xl%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2008%2F05%2Fskos-xl%23%3E%0D%0APREFIX+ndl%3A+%3Chttp%3A%2F%2Fndl.go.jp%2Fdcndl%2Fterms%2F%3E%0D%0ASELECT+*+WHERE+%7B%0D%0A%3Furi1+skos%3AinScheme+%3Chttp%3A%2F%2Fid.ndl.go.jp%2Fauth%23uniformTitles%3E+%3B+skos%3AexactMatch+%3Flink+%3B+skos%3ArelatedMatch+%3Flink2.%0D%0A%3Furi1+xl%3AprefLabel+%5B+xl%3AliteralForm+%3Ftitle%5D.+%0D%0A%3Furi1+xl%3AaltLabel+%5B+xl%3AliteralForm+%3Falttitle%5D.+%0D%0AFILTER+regex%28%3Flink2%2C+%27%5E.*KG.*%27%29%0D%0A%7D%0D%0A%0D%0A&output=json) 1. Python library "[SparqlWrapper](https://github.com/RDFLib/sparqlwrapper)" installieren 1. Eine [Python-Code](https://github.com/NbtKmy/jpn_vert_improvement/blob/main/training_data/ndl_sparql.py) schreiben und laufen lassen
## Fine tuning * 3 Verfahren, mit 3 unterschiedlichen Datensets * 1 Datensets hat 1000 Paare von Textzeile und Image * Fine tuning immer vom jpn_vert (best) Modell ausgehend
## 3 Datensets 1. Datenset - eine Zeile besteht aus reinem Text 1. Datenset - eine Zeile besteht aus Text, dem Leader-Zeichen ("︙") und die Zahlen in chines. Schrift 1. Datenset - eine Zeile besteht aus Text, dem Leader-Zeichen und die Zahlen in chines. Schrift. Die Zahlen im Image ist verkleinert dargestellt

1. Datenset

2. Datenset

3. Datenset

### Fine tuning mit [tesstrain](https://github.com/tesseract-ocr/tesstrain) `$ nohup time -f "Run time = %E\n" make training MODEL_NAME=jpn_vert START_MODEL=jpn_vert PSM=5 >> train.log 2>&1 &` PSM (page segmentation modes)=5 bedeutet "assume a single uniform block of vertically aligned text".
## Ergebnisse und Ausblick
OCR mit dem normalen jpn_vert (best) Modell
Ergebnis mit dem 1. Dataset
Ergebnis mit dem 2. Dataset
Ergebnis mit dem 3. Dataset
Erkannte Textbereiche waren immer gleich
## ... NICHT WIRKLICH BESSER GEWORDEN 😑...
## AUSBLICK ODER MÖGLICHE MASSNAHMEN * Fine tuning mit den unterschiedlich grossen Leader-Zeichen ("︙") * Die Leader-Zeichen und die kleineren Schriften in der Vorarbeitung ausfiltern * Oder vielleicht eine Layout-Erkennung mit Tensorflow o.ä. * Andere OCR-Software wie [kraken](https://github.com/mittagessen/kraken) in Betracht ziehen
## Code & Data im Github-Repo https://nbtkmy.github.io/jpn_vert_improvement/
# Vielen Dank!