【问题标题】:Storing text mining data存储文本挖掘数据
【发布时间】:2012-07-01 07:13:57
【问题描述】:

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

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

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

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

非常感谢

【问题讨论】:

  • 主题是否添加到文档中一次?或者,是否可以随着时间的推移将新主题添加到旧文档中?
  • @GordonLinoff 它们被添加一次。
  • 您的问题的答案是,您应该将其存储在包含主题、DocumentUsage 和 DocumentTopics 表的 sql 数据库中。我刚刚写出了完整的答案,但由于一些技术问题,堆栈溢出丢失了它。我现在没有时间重新输入。

标签: python database data-mining text-mining


【解决方案1】:

为什么不用简单的 SQL 表

表格:

  • 主键为 id 或文件名之类的文档
  • 在文档和术语中使用外键的观察结果(在两个字段上都有索引可能是唯一的)

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

如果文档表包含时间戳,则可以通过按日期聚合来轻松聚合甚至做趋势数据。

【讨论】:

    【解决方案2】:

    我建议您在 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
    

    您还可以获取有关用户的信息、随时间的变化以及其他信息。你可以有一个 users 表,它可以为主题提供权重(更可靠的用户,更不可靠的用户)。系统的这方面应该在 SQL 中完成。

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多