我希望在大量文档中跟踪主题流行度。此外,我想根据主题向用户提供建议,而不是通常的单词模型。 为了提取主题,我使用了超出本文要点的自然语言处理技术。
我的问题是我应该如何保存这些数据,以便: I)我可以快速获取每个主题的趋势数据(原则上,每次用户打开文档时,该文档中的主题应该会越来越受欢迎) II)我可以快速比较文档以提供建议(这里我正在考虑使用聚类技术)
更具体地说,我的问题是: 1)我应该采用通常的方式存储文本挖掘数据吗?意味着为每个文档存储一个主题出现向量,以便我以后可以测量不同文档之间的欧氏距离。 2)其他一些方式?
我正在寻找特定的python方法来做到这一点。我已经研究过SQL和NoSQL数据库,还有pytables和h5py,但我不确定如何实现这样的系统。我关心的一个问题是如何处理不断增长的主题词汇?
非常感谢
答案 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表
表:
您提到的数组方法似乎是一种缓慢的术语。 使用sql,您可以轻松地将新术语添加到观察表中。
如果文档表包含时间戳,则可以通过按日期汇总来轻松聚合甚至进行趋势分析。