存储文本挖掘数据

Posted

技术标签:

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

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

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

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

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

非常感谢

【问题讨论】:

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

【讨论】:

以上是关于存储文本挖掘数据的主要内容,如果未能解决你的问题,请参考以下文章

R语言 数据挖掘-文本分析(1)

干货丨文本挖掘二三式

数据挖掘:手把手教你文本挖掘

基于知识图谱的文本挖掘 - 超越文本挖掘

文本挖掘

数据挖掘 | 文本挖掘在垃圾邮件的应用