0

iTextSharp を使用して PDF ファイルからテキストを抽出するのがいかに簡単であるかを知って、うれしい驚きを覚えました。この記事に従って、次の簡単なコードで PDF ファイルをテキストに変換することができました。

string pdfFilename = dlg.FileName;
// Show just the file name, without the path
string pdfFileNameOnly = System.IO.Path.GetFileName(pdfFilename);
lblFunnyMammalsFile.Content = pdfFileNameOnly;
string textFilename = String.Format(@"C:\Scrooge\McDuckbilledPlatypus\{0}.txt", pdfFileNameOnly);

PDFParser pdfParser = new PDFParser();
if (!pdfParser.ExtractText(pdfFilename, textFilename))
{
    MessageBox.Show("there was a boo-boo");
}

問題は、生成されたテキスト ファイルに次のようなテキストが含まれていることです (つまり、スペースがありません)。

IwaspleasantlysurprisedtofindhoweasyitistouseiTextSharptoextractthetextfromatextfile.

そのようなテキストを取得し、単語の区切り(別名「スペース」)がどこに行くべきかについて最善の推測をする「そこに」アルゴリズムはありますか?

4

1 に答える 1

5

この場合、この問題を解決する簡単な方法があるというギャビンに同意しますが、問題自体は興味深いものです。

これを解決するには、ヒューリスティック アルゴリズムが必要です。なぜそう思うのか、簡単に説明します。しかし、最初に、私のアルゴリズムについて説明します。

すべての辞書の単語をTrieに格納します。では、文を取り上げて、単語にたどり着くためにトライで検索してください。トライは単語の終わりを追跡します。単語が見つかったら、文中にスペースを追加します。これはあなたの文に当てはまります。しかし、次の 2 つの例を考えてみましょう。

  • 彼は私にこの本をくれました
  • 彼は私にたとえを話した

最初の例では、上記のアルゴリズムは正常に機能しますが、2 番目の例では、アルゴリズムは次のように出力します。

彼は私にたとえを話した

これを回避するには、最長一致を考慮する必要がありますが、そうすると、最初の例の出力は次のようになります。

彼は彼の本に会った

そのため、私たちは立ち往生しているため、アルゴリズムにヒューリスティックを追加して、文法的に彼が彼の本に出会ったことが意味をなさないと判断できるようにします。

于 2012-07-08T07:33:03.757 に答える