2011-05-07 57 views
0

我試圖按字解析文本文件,我需要能夠從文件開頭存儲每個單詞的偏移量,以便我可以然後在文本文件中找到該單詞的確切實例。現在我正在處理一些非常大的文本文件,所以我想知道做這件事最有效的方法是什麼?用PHP解析文本文件並保留每個單詞的偏移量

編輯:一些更多的細節。

我將在數據庫中有兩個表。讓我們稱他們爲單詞,它存儲單詞和參考文獻,這些參考文獻是每個單詞對文件的引用。

的參考表將是這樣的:

id INT PRIMARY 
file_id INT /* ID of the text file */ 
offset INT /* Offset from the start of the file to get to the start of the word */ 

接話的每條記錄都有其相關的參考記錄a referenced_id。

這是一個簡化的例子。實際上,我會在另一張表中將WORDS中的每條記錄與REFERENCES中的一條或多條記錄相關聯,因爲在許多文件中每個單詞可能有很多實例。

所有這些的目的是爲了能夠準確地顯示在搜索時已找到單詞的實例。所以當我找到這個詞時,我可以得到它的參考,然後從文本文件中摘錄一段。

+0

真的取決於以後使用,請擴展問題。舉個例子。 – 2011-05-07 12:20:55

+0

PHP不是用來處理非常大的文件的。使其異步,選擇另一種語言,如C,Python或Perl,並從PHP調用解析器。 – 2011-05-07 13:06:35

回答

0

最有效的bu時間或通過記憶使用?

  1. 按時間 - 將所有文件加載到內存中並解析它。 然後彈出每個單詞,存儲它(字)長度

$頁=的file_get_contents($文件); $ arr_w = explode(「」,$ page);

$ arr_c = array();字數 $ arr_o = array();字的偏移:)

$ c = 0; foreach($ arr_w as $ w) { $ C++; str_replace($ page,$ w,「」,1); $ arr_c [$ w] ++; $ arr_o [$ c] = strlen($ w)+ 1; }

這只是想法...

  1. 使用存儲器, - 你將需要連續讀取文件,並analise。它與這個例子有很大的不同...
相關問題