2012-07-08 21 views
1

我很惊喜地发现使用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. 

是否有一个算法“在那里”,将采取这样的文本,并作出一个最好的猜测,这个词断裂(AKA“空间”)应该去哪里?

+9

我会说最好解决为什么你的文本提取不包含空格,然后试图破解你为自己创建的新问题的解决方案。 – 2012-07-08 05:04:57

+0

[Watch Peter Norvig在数据的不合理有效性中使用词分词](http://youtu.be/yvDCzhbjYWs?t=18m10s),知道你的答案 – Alexander 2012-07-08 09:06:44

+0

@Gavin:因为我使用这个第三方代码来做到最难的部分,我对这种事情发生的原因没有太多的控制,也不会把它称为我为自己创造的问题。 – 2012-07-08 18:29:42

回答

5

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

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

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

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

第一个例子,上面的算法工作正常,但对第二个例子,算法输出:

他告诉我一个参数 able

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

他给遇到了他的书

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

相关问题