2012-07-08 20 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

爲了避免這種情況,我們需要考慮一個最長匹配,但如果我們這樣做,那麼輸出的第一個例子就變成:

他給遇到了他的書

所以我們被卡住了,因此給算法添加了啓發式算法,它能夠判斷語法他給了他的書認識沒有意義。

相關問題