存储文本挖掘数据
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 中完成。
【讨论】:
以上是关于存储文本挖掘数据的主要内容,如果未能解决你的问题,请参考以下文章