Хранение данных интеллектуального анализа текста

Я ищу, чтобы отслеживать популярность темы по очень большому количеству документов. Кроме того, я хотел бы давать пользователям рекомендации, основанные на тематиках, а не на обычной модели набора слов. Для извлечения тем я использую методы обработки естественного языка, которые выходят за рамки этой статьи.

Мой вопрос в том, как мне сохранить эти данные, чтобы: I) я мог быстро получить данные о тенденциях для каждой темы (в принципе, каждый раз, когда пользователь открывает документ, темы в этом документе должны становиться популярнее) II) Я могу быстро сравнить документы, чтобы дать рекомендации (здесь я думаю об использовании методов кластеризации)

В частности, мои вопросы: 1) Следует ли мне использовать обычный способ хранения данных интеллектуального анализа текста? Это означает хранение вектора возникновения темы для каждого документа, чтобы впоследствии я мог измерить евклидово расстояние между различными документами. 2) Другой способ?

Я ищу для этого конкретные способы Python. Я изучал базы данных SQL и NoSQL, а также pytables и h5py, но я не уверен, как я буду реализовывать такую ​​систему. Одна из моих проблем - как справиться с постоянно растущим словарным запасом тем?

Большое Вам спасибо


person user1491915    schedule 29.06.2012    source источник
comment
Добавляются ли темы в документ один раз? Или можно ли со временем добавлять новые темы в старый документ?   -  person Gordon Linoff    schedule 29.06.2012
comment
@GordonLinoff Они добавляются один раз.   -  person user1491915    schedule 29.06.2012
comment
Ответ на ваш вопрос заключается в том, что вы должны сохранить это в базе данных sql с таблицами для тем, DocumentUsage и DocumentTopics. Я просто написал полный ответ, но переполнение стека потеряло его из-за какой-то технической проблемы. У меня сейчас нет времени вводить его повторно.   -  person Gordon Linoff    schedule 29.06.2012


Ответы (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()

)

Вам нужна другая таблица для тем, назначенных документам, при условии, что у вас есть какой-то идентификатор документа для идентификации документов:

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.

person Gordon Linoff    schedule 29.06.2012

Почему бы не использовать простые таблицы SQL

Таблицы:

  • документы с первичным ключом идентификатора или имени файла или чего-то еще
  • наблюдения с внешним ключом в документы и термин (индексируются по обоим полям, вероятно, уникальны)

Упомянутый вами подход с использованием массивов кажется медленным способом разобраться в условиях. С помощью sql вы можете легко разрешить добавление новых терминов в таблицу наблюдений.

Легко агрегировать и даже отслеживать тренды путем агрегирования по дате, если таблица документов включает метку времени.

person Phil Cooper    schedule 29.06.2012