2012-06-29 100 views
3

我期待跟蹤非常大量的文檔主題的人氣。此外,我想根據主題向用戶提供建議,而不是通常包含的單詞模型。 要提取主題我使用自然語言處理技術是超出本文點。存儲文本數據挖掘的

我的問題是我應該如何堅持這個數據,以便:我可以快速獲取每個主題的趨勢數據(原則上,每次用戶打開文檔時,該文檔中的主題應該流行起來) II),我可以快速比較文檔提供建議,(在這裏我想到了用聚類技術)

更具體的,我的問題是: 1)我應該去存儲文本數據挖掘的常用方法?意思是爲每個文檔存儲一個主題發生向量,以便我可以稍後測量不同文檔之間的歐氏距離。 2)其他方式?

我要尋找特定的Python的方式來做到這一點。我已經研究過SQL和NoSQL數據庫以及pytables和h5py,但我不知道如何去實現像這樣的系統。我擔心的一個問題是,如何處理不斷增長的主題詞彙?

非常感謝您

+0

是否將主題添加到文檔一次?或者,可以將新的主題隨時間添加到舊文檔中嗎? –

+0

@GordonLinoff他們被添加一次。 – user1491915

+0

你的問題的答案是,你應該將這個存儲在一個sql數據庫中,包含Topics,DocumentUsage和DocumentTopics的表格。我只寫了完整的答案,但由於某些技術問題,堆棧溢出丟失了。我現在沒有時間重新輸入。 –

回答

1

我會建議你在一個SQL數據庫做這項工作。您可能不想將文檔存儲在那裏,但主題是適當的。

你想只爲一個主題表:

create table Topics (
    TopicId int identity(1,1), -- SQL Server for auto increment column 
    TopicName varchar(255), 
    CreatedBy varchar(255) default system_user, 
    CreatedAt datetime default getdate() 

你想分配給文件的主題另一個表,假設你有某種形式的文件ID來識別文件:

create table DocumentTopics (
    DocumentTopicId int identity(1,1), -- SQL Server for auto increment column 
    TopicId int, 
    DocumentID int, 
    CreatedBy varchar(255) default system_user, 
    CreatedAt datetime default getdate() 

而另一表DOCUME NT觀點:

create table DocumentView (
    DocumentViewId int identity(1,1), -- SQL Server for auto increment column 
    DocumentId int, 
    ViewedAt datetime, 
    viewedBy int, -- some sort of user id 
    CreatedBy varchar(255) default system_user, 
    CreatedAt datetime default getdate() 

現在你可以使用查詢,如獲得通過普及給定日期範圍內的主題:

select t.TopicId, t.TopicName, count(*) as cnt 
from DocumentUsage du join 
    DocumentTopics dt 
    on du.DocumentId = dt.DocumentId join 
    Topics t 
    on dt.TopicsId = t.TopicsId 
where du.ViewedAt between <date1> and <date2> 
group by t.TopicId, t.TopicName 
order by 3 desc 

您還可以獲取有關用戶的信息,變化隨着時間的推移,和其他信息。你可以有一個用戶表,它可以爲主題提供權重(更可靠的用戶,更不可靠的用戶)。系統的這個方面應該在SQL中完成。

0

爲什麼不能有簡單的SQL表

表:

與ID或文件名的主鍵或東西
  • 文件
  • 觀察與外鍵文件和術語(收錄在這兩個領域可能是唯一的)

你提到的數組方法似乎是一個緩慢的方式來獲取條款。 使用sql,您可以輕鬆地將新術語添加到觀察表中。

易聚合,甚至做到按照日期聚集,如果文件表包括時間戳趨勢的東西。