存储文本挖掘数据

时间:2012-06-29 18:32:58

标签: python database data-mining text-mining

我希望在大量文档中跟踪主题流行度。此外,我想根据主题向用户提供建议,而不是通常的单词模型。 为了提取主题,我使用了超出本文要点的自然语言处理技术。

我的问题是我应该如何保存这些数据,以便: I)我可以快速获取每个主题的趋势数据(原则上,每次用户打开文档时,该文档中的主题应该会越来越受欢迎) II)我可以快速比较文档以提供建议(这里我正在考虑使用聚类技术)

更具体地说,我的问题是: 1)我应该采用通常的方式存储文本挖掘数据吗?意味着为每个文档存储一个主题出现向量,以便我以后可以测量不同文档之间的欧氏距离。 2)其他一些方式?

我正在寻找特定的python方法来做到这一点。我已经研究过SQL和NoSQL数据库,还有pytables和h5py,但我不确定如何实现这样的系统。我关心的一个问题是如何处理不断增长的主题词汇?

非常感谢

2 个答案:

答案 0 :(得分: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()

另一个文档视图表:

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中完成。

答案 1 :(得分:0)

为什么没有简单的SQL表

表:

  • 主键为id或文件名的文档
  • 使用外键对文档和术语进行观察(在两个字段上编制索引可能是唯一的)

您提到的数组方法似乎是一种缓慢的术语。 使用sql,您可以轻松地将新术语添加到观察表中。

如果文档表包含时间戳,则可以通过按日期汇总来轻松聚合甚至进行趋势分析。