【问题标题】:What algorithm can break text up into its component words? [closed]什么算法可以将文本分解为其组成词? [关闭]
【发布时间】:2012-07-08 00:12:20
【问题描述】:

我惊喜地发现使用 iTextSharp 从 pdf 文件中提取文本是多么容易。通过关注this article,我能够使用以下简单代码将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.

是否有一种“外面”的算法可以接受这样的文本,并对单词中断(也称为“空格”)的位置做出最佳猜测?

【问题讨论】:

标签: c# wpf algorithm pdf text-parsing


【解决方案1】:

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

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

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

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

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

他告诉我一个par能干

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

他给遇见了他的书

所以我们被卡住了,因此在算法中添加了启发式算法,以便能够判断在语法上 He give meet his book 没有意义。

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多