首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储文本挖掘数据

存储文本挖掘数据
EN

Stack Overflow用户
提问于 2012-06-30 02:32:58
回答 2查看 592关注 0票数 3

我希望在非常大量的文档上跟踪主题的受欢迎程度。此外,我希望根据主题向用户提供推荐,而不是通常的词袋模型。为了提取主题,我使用了自然语言处理技术,这超出了本文的范围。

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

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

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

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-30 06:47:31

我建议您在SQL数据库中完成这项工作。您可能不想将文档存储在那里,但是主题是合适的。

您需要一个仅用于主题的表:

代码语言:javascript
复制
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来标识文档:

代码语言:javascript
复制
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()

)

和另一个用于文档视图的表:

代码语言:javascript
复制
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()

)

现在,您可以使用如下查询获取给定日期范围内的受欢迎程度的主题:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-06-30 02:48:07

为什么不使用简单的SQL表

表:

主键为id或文件名的

  • 文档,或包含外键的something
  • observations进入文档和术语(在两个字段上都编制了索引,可能是唯一的)

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

如果documents表包含时间戳,则可以通过按日期聚合来轻松聚合,甚至可以执行热门内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11267143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档