2011-01-29 57 views
6

我下載了維基百科文章標題文件,其中包含每個維基百科文章的名稱。我需要搜索所有可能匹配的文章標題。例如,我可能會有「曲棍球」一詞,但維基百科的曲棍球文章是我想要的,就是「Ice_hockey」。它也應該是一個不區分大小寫的搜索。在大文件字符串中找到部分字符串匹配的最有效方法(python)

我正在使用Python,是否有更有效的方法比只做一行行搜索?理想情況下,我將以每分鐘500或1000次的速度執行此搜索。如果一行一行是我唯一的選擇,那麼我可以在這裏做一些優化嗎?

我認爲文件中有幾百萬行。

任何想法?

謝謝。

+1

請顯示預期的輸入。文件格式是什麼?不要讓那些想幫助你自己下載文件的人。 – aaronasterling 2011-01-29 21:46:14

回答

3

格雷格的答案是好的,如果你想匹配單個單詞。如果你想匹配子字符串,你需要一些更復雜的東西,比如後綴樹(http://en.wikipedia.org/wiki/Suffix_tree)。一旦構建,後綴樹可以有效地回答任意子串的查詢,因此在您的示例中,當有人搜索「hock」時,它可以匹配「Ice_Hockey」。

3

如果你有一個固定的數據集和變量查詢,那麼通常的技術就是將數據集重組爲可以更容易搜索的東西。在抽象級別上,可以將每篇文章標題分解爲單獨的小寫字詞,並將它們中的每一個添加到Python字典數據結構中。然後,每當您收到查詢時,都將查詢詞轉換爲小寫字母並在字典中查找。如果每個字典條目值是一個標題列表,那麼您可以輕鬆找到與給定查詢詞相匹配的所有標題。

這適用於簡單的單詞,但您必須考慮是否要對類似單詞進行匹配,例如查詢「煙霧」時發現「吸菸」。

1

我建議你把你的數據放入一個sqlite數據庫,並使用SQL'like'操作符來進行搜索。