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.

是否有一种“外面”的算法可以采用这样的文本并对单词中断(AKA“空格”)应该去哪里做出最好的猜测?

4

1 回答 1

5

虽然我同意 Gavin 的观点,在这种情况下有一种简单的方法可以解决这个问题,但问题本身是一个有趣的问题。

这将需要一个启发式算法来解决。我将稍微解释一下我为什么这么认为。但首先,我将解释我的算法。

将所有字典单词存储在Trie中。现在取一个句子,然后在 trie 中查找一个单词。trie 跟踪单词的结尾。一旦你找到一个单词,在你的句子中添加一个空格。这将适用于您的句子。但是考虑这两个例子:

  • 他给了我这本书
  • 他给我讲了一个比喻

对于第一个示例,上述算法运行良好,但对于第二个示例,算法输出:

他告诉我一个标准

为了避免这种情况,我们需要考虑最长匹配,但如果我们这样做,那么第一个示例的输出将变为:

他给遇见了他的书

所以我们被卡住了,因此在算法中添加了启发式算法,以便能够从语法上判断他给了他的书没有意义。

于 2012-07-08T07:33:03.757 回答