[Ratkaisu] Tekstintunnistuksella tuotetun tekstitystiedoston virheiden korjaaminen

Lähtökohta
Kotihakemistossani on bin-alihakemisto ja se on määritelty komentojenhakupolkujen (PATH-muuttuja) joukkoon komentoriviprofiilissani.

Olen muuntanut kuvamuotoisen tekstityksen tekstimuotoiseksi Avidemuxilla. SRT-muotoinen tekstitystiedosto on tallennettu kotihakemistooni tiedostonimellä tekstitys.srt. Tekstitys sisältää muunnoksen jäljiltä joitain toistuvia virheitä: rivien alussa on välilyöntejä, pikku-l ja iso I-kirjain ovat paikoin sekoittuneet, joidenkin numeroiden välissä on välilyöntejä vaikka numerot ovat osa samaa lukua, ja lainausmerkin (“) tilalla on kaksi heittopilkkua (‘ ‘).

Ongelma
Virheitä on niin paljon, että niiden korjaaminen käsityönä Tekstieditorissa olisi liian työlästä. Haluan korjata virheet tarkoitukseen soveltuvilla komentojonoilla.
Ratkaisu
Luon seuraavassa listatut komentojonotiedostot, ja tallennan ne kotihakemistossani olevaan bin-alihakemistoon.

#!/bin/sed -f
s/^\ *//

Lataa leading_blank.sed (24 tavun komentojonotiedosto)

#!/usr/bin/gawk -f

BEGIN { FS = "" }
{
  previous = ""
  for (i = 1; i <= NF; i = i + 1) {
    if ($i ~ /I/) {
      if (previous ~ /[[:lower:]]/) {
        printf("l")
        previous = "l"
      } else if (i == 1) {
        printf("%s",$i)
        previous = $i
      } else if ((previous ~ /-/) && (i == 2)) {
        printf("%s",$i)
        previous = $i
      } else if (i < NF) {
        for (j = 1; i + j < NF; j = j + 1) {
          if ($(i+j) ~ /[[ \n]]/) {
            j = NF
            break
          } else if ($(i+j) ~ /[[:lower:]]/) {
            break
          }
        }
        if (i + j < NF) {
          printf("l")
          previous = "l"
        } else {
          printf("%s",$i)
          previous = $i
        }
      } else {
        printf("%s",$i)
        previous = $i
      }
    } else {
      printf("%s",$i)
      previous = $i
    }
  }
  printf("\n")
}

Lataa mixed_verticals.gawk (756 tavun komentojonotiedosto)

#!/bin/sed -f
s/\([[:digit:]]\) \([[:digit:]]\)/\1\2/g

Lataa blank_between_numbers.sed (56 tavun komentojonotiedosto)

#!/bin/sed -f
s/''/"/g

Lataa double_single_quotes.sed (24 tavun komentojonotiedosto)

Tämän jälkeen teen komentojonotiedostoista suoritettavia seuraavalla komennolla:

cd ~/bin && chmod +x blank_between_numbers.sed leading_blank.sed \
mixed_verticals.gawk double_single_quotes.sed

Lopuksi käytän kaikkia komentojonoja tekstitystiedostoon sen korjaamiseksi, seuraavasti:

cat ~/tekstitys.srt \
| leading_blank.sed | mixed_verticals.gawk \
| blank_between_numbers.sed | double_single_quotes.sed \
> ~/korjattu-tekstitys.txt

Tämän jälkeen kotihakemistossani oleva korjattu-tekstitys.txt -niminen tiedosto sisältää tekstityksen, jossa alkuperäisessä olleet virheet on korjattu.

Comments

4 responses to “[Ratkaisu] Tekstintunnistuksella tuotetun tekstitystiedoston virheiden korjaaminen”

  1. Vuorovaikuttaja Avatar

    Päivitin mixed_verticals.gawk -komentojonoa: se jättää nyt koskemattomiksi sanan alussa olevat isot I-kirjaimet myös muualla kuin rivin alussa.

  2. Vuorovaikuttaja Avatar

    Palautin aiemman version mixed_verticals.gawk -komentojonosta, eli sanan alussa olevat isot I-kirjaimet muunnetaan l-kirjaimiksi taas muualla kuin rivin alussa. Tämä on kahdesta vaihtoehdosta se toimivampi, sillä vaikka sanan alussa olevien isojen I-kirjainten korjaaminen ei toimikaan I-kirjaimella alkavien erisnimien kanssa (esimerkiksi Irenestä tulee lrene), sellaiset tuntuvat olevan l:llä alkavia yleisnimiä harvinaisempia.

  3. Vuorovaikuttaja Avatar

    Päivitin jälleen mixed_verticals.gawk -komentojonoa. Nyt se käsittelee hiukan paremmin Ill-alkuisia sanoja.

  4. Vuorovaikuttaja Avatar

    Jälleen päivitys mixed_verticals.gawk -komentojonolle: vuorosanojen alussa olevat I-kirjaimet jätetään nyt koskemattomiksi.