0

一般的ですが非常に具体的な問題を解決したいと思います。OCRエラーのため、多くの字幕ファイルに「l」(小文字のL)ではなく「I」(大文字のi)が含まれています。

私の攻撃計画は次のとおりです。

  1. ファイルを単語ごとに処理する
  2. 各単語をhunspellスペルチェッカーに渡します(「echothe-word | hunspell -l」は、有効な場合は応答をまったく生成せず、不良の場合は応答を生成します)
  3. それが悪い単語であり、大文字のIsが含まれている場合は、これらを小文字のlに置き換えて、再試行してください。現在有効な単語である場合は、元の単語を置き換えます。

スクリプトでファイル全体をトークン化して再構築することは確かにできましたが、そのパスをたどる前に、単語レベルでこれらの種類の条件付き操作にawkやsedを使用できるかどうか疑問に思いました。

他の提案されたアプローチも大歓迎です!

4

2 に答える 2

2

これには bash 以上は必要ありません。

while read line; do
  words=( $line )
  for ((i=0; i<${#words[@]}; i++)); do
    word=${words[$i]}
    if [[ $(hunspell -l <<< $word) ]]; then
      # hunspell had some output
      tmp=${word//I/l}
      if [[ $tmp != $word ]] && [[ -z $(hunspell -l <<< $tmp) ]]; then
        # no output for new word, therefore it's a dictionary word
        words[$i]=$tmp
      fi
    fi
  done
  # print the new line
  echo "${words[@]}"
done < filename > filename.new

ファイル全体を hunspell に渡し、その出力を解析する方が理にかなっているようです。

于 2011-10-23T12:07:03.053 に答える
1

2 つの提案:

  1. 問題が発生した場所の近く、つまり OCR ソフトウェアの近くで問題を修正します。辞書を引いても、「私」を含む単語以外は出てこないようにできますか? そうでない場合は、できる別の OCR プログラムを試してください。
  2. 各単語を hunspell で実行すると、単語ごとにプロセスが作成され、CPU サイクルが大幅に浪費されます。いくつかのパスを使用してみてください。最初のパスですべての「I」単語が検出され、正しい単語が除外され、修正可能な単語がそれぞれ置き換えられます。
于 2011-10-23T10:23:00.327 に答える