比方說,我有一個關鍵字文件,其中包含「ab」,「ef」,「ab ef」(真實生活:另外一千個條目)。我想查什麼網頁我的每一個關鍵詞都出現一個真正的索引--- perl中的多個匹配
page 0
ab
gg
^L
page 1
ab ef
^L
page 2
Ab
ef
[another thousand pages, 2 million words, each ^L separated]
我想回去
ab => [ 0,1,2 ]
ef => [ 1,2 ]
ab ef => [ 1 ]
我知道如何做到這一點的效率非常低。將文件翻成長字符串。小寫它。將其分成頁面。對於每個頁面,將每個(小寫)關鍵字條目正則表達以查看它是否出現在頁面上。如果是,則在包含我的關鍵字作爲關鍵字的散列末尾添加頁碼。不難,但痛苦無效。我的算法看起來更像是一種C方法,而不是一種優雅的Perl方法。
唉,我想不出一個更好的選擇。我甚至無法首先將主文件讀入散列,因爲空格分隔的多詞關鍵字可能會導致這種不合邏輯的錯誤。
也許perl是這個錯誤的工具?!
你需要在uniq之前做lc(理想情況下只在身體上) – ysth
我不認爲它解決了這個問題。它將文件轉換爲其組成單詞,併爲每個單詞分配一個頁碼。 –
我不認爲它解決了這個問題。它將文件轉換爲其組成單詞,併爲每個單詞分配一個頁碼。它不是從包含可包含空格的短語的單詞列表開始的。我的\\page = split(/ f /,slurp($ filename));我不會更快做 my \ @page = split我的$ pageno(0 .. $#頁面){ my \ @wordsonpage = split/[\ n \ s] /,$ page [$ pageno]; ; push @ {words {$ _}},$ pageno for \ @wordsonpage } #現在我們有一個帶頁碼的單詞散列 –