Python 存储文本挖掘数据

Python 存储文本挖掘数据,python,database,data-mining,text-mining,Python,Database,Data Mining,Text Mining,我希望跟踪大量文档中的主题流行度。此外,我想根据主题向用户提供建议,而不是通常的纸袋模型。 为了提取主题,我使用了自然语言处理技术,这超出了本文的重点 我的问题是,我应该如何保存这些数据,以便: 一) 我可以快速获取每个主题的趋势数据(原则上,每次用户打开文档时,该文档中的主题都会受到欢迎) 二) 我可以快速比较文档以提供建议(这里我考虑使用集群技术) 更具体地说,我的问题是: 1) 我应该使用存储文本挖掘数据的常规方法吗?这意味着为每个文档存储一个主题出现向量,以便以后可以测量不同文档之间的欧

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

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

更具体地说,我的问题是: 1) 我应该使用存储文本挖掘数据的常规方法吗?这意味着为每个文档存储一个主题出现向量,以便以后可以测量不同文档之间的欧几里德距离。 2) 还有别的办法吗

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


非常感谢

为什么不使用简单的SQL表呢

表:

  • 具有id或文件名等主键的文档
  • 在文档和术语中使用外键进行观察(在这两个字段上编制索引可能是唯一的)
您提到的数组方法似乎是一种缓慢的获取术语的方法。 使用sql,您可以轻松地将新术语添加到观察表中


如果documents表包含时间戳,则可以通过按日期聚合来轻松聚合甚至进行趋势分析。

我建议您在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
选择t.TopicId、t.TopicName、count(*)作为cnt
从DocumentUsage du join
文档主题dt
关于du.DocumentId=dt.DocumentId连接
主题t
在dt.TopicsId=t.TopicsId上
在和之间的位置可以看到du.viewed
按t.TopicId、t.TopicName分组
按3描述订购

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

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