2011-09-21 53 views
4

我正在構建一個大約有10,000條記錄的MySQL數據庫。每個記錄將包含一個文本文檔(大多數情況下爲幾頁文本)。我想在整個數據庫中進行各種n-gram計數。我有已經用Python編寫的算法,這些算法是我想要對付包含大量文本文件的目錄,但要做到這一點,我需要從數據庫中提取10,000個文本文件 - 這會產生性能問題。MySQL中的n元計數

我是一個使用MySQL的新手,所以我不確定它是否有任何內置功能可以執行n-gram分析,或者是否有很好的插件。請注意,在我的分析中,我需要至少達到4克(最好是5克),所以我看到的簡單的2克插件在這裏不起作用。在進行n-gram計數之前,我還需要能夠從文本文檔中刪除停用詞。

社區的任何想法?

感謝,

羅恩

+0

當沒有人正在等待答案時,你不是在離線處理n-gram嗎?或者是否需要在每次添加一批文件時跨越許多文本文件快速生成新的n-gram數據庫? – hobs

+0

我知道類似於在其他論壇中詢問的問題。在放棄和尋找一些應用程序級別的解決方案(例如PHP)來執行字符串分析之前,問題人員在SQL中擺弄了幾天。只是說' – Strawberry

+0

你不能在RDBMS中進行合理的5克處理。如果你缺乏遞歸查詢的能力,Storarge是可行的,但是非常痛苦。 (在這方面,mysql是個不錯的選擇)我自己的玩具項目http://sourceforge.net/projects/wakkerbot/擁有所有原始文本行(大約2M當前)存在於(postgres)數據庫中,但是它全部都是在獨立的C程序中進行5克馬爾可夫處理,將其樹(35M節點)存儲在平面文件中。恕我直言,Python對於這種事情來說太慢了。 – wildplasser

回答

1

我的建議是使用像Lucene的/ Solr的,它具有更豐富和這樣的事情可擴展支持專用的全文搜索索引程序。它需要你學習一點才能設置它,但聽起來好像你想要在MySQL中難以定製的級別混亂。

0

如果你真的想過早優化;)你可以translate your python into C,然後用薄mysql UDF wrapper code包裝它。

但我強烈建議每次只加載一個文檔並在其上運行你的Python腳本來填充一個n-gram的mysql表。我現在每個釘子的錘子都是Django。它是ORM與mysql表進行交互並優化這些交互。我使用它在python上執行數百萬條記錄數據庫中的統計數據,用於production sites,這些數據庫必須在不到一秒的時間內返回數​​據。如果你發現比mysql更好的東西,比如postgre,任何python ORM都可以讓你輕鬆切換數據庫。最好的部分是有很多python和django工具來監控應用程序性能的各個方面(python執行,mysql加載/保存,內存/交換)。這樣你就可以攻擊正確的問題。這可能是連續批量mysql讀取不是什麼會減慢你的速度...