Как автоматически помечать текст при сохранении эффективности? - PullRequest
2 голосов
/ 28 июня 2009

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

Почему-то я не могу придумать решение с низкой занимаемой площадью (и которое остается быстрым). Я знаю, что нужно ожидать компромиссов, но я предполагаю, что я пропускаю некоторые концепции.

Это особенно интересно для интеллектуальных тегов ("Michael Jackson" = "artist" и т. Д.), Поскольку применяемый тег может не являться частью самого текста.

Помимо создания черного списка слов, кэширования популярных тегов и огромных SQL-запросов, какой будет наиболее эффективный способ решения этой проблемы?

(достаточно забавно, я должен сам отметить этот вопрос :-))

Поскольку я ограничен в пространстве комментариев, позвольте мне добавить несколько мыслей здесь:

  • Я согласен, что использование целочисленных хешей повышает скорость. Хорошая идея.
  • Хэши не решат итерационных проблем (циклически просматривая каждый хеш / тег при проверке слова или комбинации слов по списку тегов)
  • Чтобы уточнить проблему: предположим, что текст типа "привет мир". Этот текст имеет 3 потенциальных тега ("привет", "мир" и "привет мир"). Список тегов может содержать только «hello», но «world» или «hello world» могут быть добавлены после анализа, что означает, что эти теги не применяются к тексту.

Проблемы:

  • Предполагается, что текст размером с книгу, итерация всех комбинаций (например, «Nine Inch Nails», но давайте предположим, что предел комбинации составляет 4 слова) для сравнения их с тегами в базе данных занимает много времени, даже при условии использования целочисленных хэшей .
  • Список тегов потенциально длинный, поэтому итерация по сохраненным тегам также, вероятно, медленная.
  • Обновление тегов будет означать дополнительный полнотекстовый поиск по текстам - в зависимости от количества текстов и их длины, и это может быть убийцей БД и вообще неэффективно?
  • Как можно автоматически найти «релевантные» новые теги? (снова «Nine Inch Nails» вспоминается в статье о музыке - но «выпустил новую песню» не будет хорошим тэгом). Это, вероятно, вопрос сам по себе.

1 Ответ

1 голос
/ 28 июня 2009

Хэшируйте каждое слово во входящем тексте и используйте его для совпадения с хэшами тегов, которые вы хотите сопоставить. Вы можете использовать базу данных для хранения и поиска хеш-значений, поэтому вам не нужно делать это в памяти.

...