0

OCR出力で動作する英語以外の言語用のスペル修正システムを開発しています。私は非常に大きな辞書を使ってスペルミスをチェックし、提案をします。

スペルミスのほとんどは、似た形の文字によるものです。たとえば、、、、、ـجـなど。これらの文字は英語にも存在しـچـます。たとえば、、、、、などです。ـحــخـغعIluvy

スペル チェック システムは、チェックしたい単語の候補を示します。たとえば、入力vogaすると、次の単語が提案されます。

  • volga
  • boga
  • yoga
  • toga

の長さvogaは 4 であるため、4 文字の候補のみを保持します。ここで、OCR エンジンはvasを検出できるためy(形式が似ているため)、OCR 出力としてyogaの最適な候補として選択します。voga

私たちの言語では、この種の選択は非常に効果的です。たとえば、 を入力するمدپرと、次の単語が提案されます。

  • مدارا
  • مدار
  • مدیر
  • مراد

セット (この例ـبــپـは、 、ـیـزرژذ、、 )دと単語の長さに基づいて、 の最適なオプションになります。مـفـقـمدیرمدپر

この関数を PHP スクリプト言語で通常実装する方法は、提案された単語を同じ長さに保ち、すべてのセット ( مدپر、 、فدپر、 、など)قدپرを置き換えて、スペルが間違っている単語の可能な組み合わせをすべて作成し、検索することです。提案リスト内の同じ単語。しかし、この実装方法は非常に遅く (特に大規模なコンテキストでは)、ほとんど役に立ちません。مذپرفذپرقذپر

PHP でこの種の関数を実装するための最良の方法またはアルゴリズムは何ですか?

アップデート:

候補リストを生成するエンジンは最適化されており、通常は候補リストに正しい単語が含まれています。問題は、私のシステムが人工知能なしで正しい単語として提案の 1 つを選択しなければならないことです。この方法は私の言語には適していると思います。なぜなら、似たような形の文字のセットがたくさんあり、OCR エンジンが通常単語を間違って検出するのはそのためです。しかし、より良い方法がある場合は、それらを提案することを歓迎します。

4

1 に答える 1

1

この質問は、ここで質問するには広すぎると思います。どうやってそれを行うのか全くわからないように見えるので、PHP ソリューションを求めるべきではありません。私の意見では、この質問は、プログラミングや実装に関するものではなく、アルゴリズムのソリューションに関するものです。さまざまな解決策が存在すると確信しており、私たちは数年前にこの分野で科学的調査を行ったので、その解決方法の手がかりを得るために 1 つの解決策を提案します。

無効な「OCR 単語」があり、有効な単語の辞書からそれを置き換えるのに最適な有効な単語を選択したいとします。

  1. 標準の提案アルゴリズムから始めます。したがって、いくつかの候補単語が得られます。

  2. 次に、これらの単語から OCR 単語までの「距離」を計算します。

  3. 計算距離が最小の候補を使用します。

問題は、2 つの単語の距離を計算する方法です。ハミング距離から始めることもできますが、この古典的なアルゴリズムはあなたの状況には十分ではなく、ステップ 1 で得た以上のことはできないので、より適切なものを作成する必要があります。単純に、似たような記号/文字にボーナスを与えたいと言っただけです。私たちは、ファジー オートマトンを使用して、DNA 分析とまったく同じ状況を解決しました。ここに完全なアルゴリズムを記述すると長すぎるため、詳細が必要な場合は論文を参照してください。(リンクは researchgate リポジトリに移動します。)

ステップ 1 を完全にスキップして、類似点のある類似語のグローバル検索システムを作成することもできます。これについては、私たちの論文でも説明しています。私はこのグローバルなアプローチに投票します。

于 2016-08-15T02:27:26.960 に答える