2008-10-29 16 views
0

我有一個數千行的MySQL數據庫表。該表是設置像這樣:如何在我的MySQL varchar列中創建最常見子字符串的有序列表?

id | text

id列是一個自動遞增的整數,並且text列是200個字符的VARCHAR。

說我有以下行:

3 | I think I'll have duck tonight

4 | Maybe the chicken will be alright

5 | I have a pet duck now, awesome!

6 | I love duck

然後我想生成列表可能是這樣的:

'鴨' 的 'I'
  • 2次出現的
  • 3出現的10
    • 3次出現 '具有' '雞'
    • .etc .etc
  • 1次出現

    另外,我可能想要維護一個從列表中忽略的子字符串列表,比如'I','will'和'have。重要的是要注意,我不知道人們會發布什麼。

    我沒有我想監視的單詞列表,我只想找到最常見的子字符串。然後,我將通過編輯查詢來手動過濾掉列表中不感興趣的任何錯誤的子字符串。

    任何人都可以建議最好的方法來做到這一點?感謝大家!

  • 回答

    2

    的MySQL已經這樣做了你。

    首先確保你的表是MyISAM表

    定義你的列

    一個FULLTEXT指數在shell命令行導航到你的MySQL存儲數據的文件夾,然後鍵入:

    myisam_ftdump -c yourtablename 1 >wordfreq.dump 
    

    然後您可以處理wordfreq。轉儲消除不需要的列並按頻率降序排序。

    你可以用一個命令行和sed/awk wizardry做所有上述的事情。 而且您可以將其併入您的程序而不需要轉儲文件。在myisam_ftdump

    此處瞭解詳情: http://dev.mysql.com/doc/refman/5.0/en/myisam-ftdump.html

    哦......還有一兩件事,MySQL的詞語將被編譯爲發動機。 具有3個或更少字符的單詞未被編入索引。 完整名單是在這裏:

    http://dev.mysql.com/doc/refman/5.0/en/fulltext-stopwords.html

    如果此列表不能滿足您的需求,或者您需要的話不到3個字符來算,唯一的辦法就是重新編譯MySQL的與不同的規則全文。我不推薦!

    0

    提取到平面文件,然後使用您最喜歡的快速語言,perl,python,ruby等來處理平面文件。

    如果你沒有一種這些語言作爲你的技能組的一部分,這是一個完美的小任務開始使用它,它不會花費你很長時間。

    某些數據庫任務在數據庫外部非常容易實現。

    相關問題