подсчет n-грамм в MySQL - PullRequest
       32

подсчет n-грамм в MySQL

4 голосов
/ 21 сентября 2011

Я строю базу данных MySQL, в которой будет примерно 10 000 записей. Каждая запись будет содержать текстовый документ (несколько страниц текста в большинстве случаев). Я хочу сделать все виды подсчета n-грамм по всей базе данных. У меня уже есть алгоритмы, написанные на Python, которые будут работать с каталогом, содержащим большое количество текстовых файлов, но для этого мне потребуется извлечь 10000 текстовых файлов из базы данных - это будет иметь проблемы с производительностью.

Я новичок в MySQL, так что я не уверен, есть ли в нем какие-либо встроенные функции, которые выполняют n-граммовый анализ, или есть ли хорошие плагины, которые бы это делали. Обратите внимание, что мне нужно поднять как минимум 4 грамма (предпочтительно 5 граммов) в моем анализе, поэтому простые 2-граммовые плагины, которые я видел, здесь не будут работать. Мне также нужно иметь возможность удалять стоп-слова из текстовых документов перед подсчетом n-граммы.

Есть идеи от сообщества?

Спасибо

Рон

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Я бы предложил использовать специальную программу индекса полнотекстового поиска, такую ​​как lucene / solr, которая имеет гораздо более широкую и расширяемую поддержку для такого рода вещей.Вам потребуется немного научиться настраивать его, но звучит так, как будто вы хотите возиться на уровне, который будет трудно настроить в MySQL.

0 голосов
/ 30 марта 2013

Если вы действительно хотите преждевременно оптимизировать;) вы можете перевести ваш питон в C и затем обернуть его тонким mysql UDF-кодом оболочки .

Но яочень рекомендую просто загружать ваши документы по одному и запускать на них ваши скрипты python, чтобы заполнить таблицу mysql n-граммами.Мой молоток на каждый гвоздь на данный момент - Джанго .Это ORM делает взаимодействие с таблицами mysql и оптимизацию этих взаимодействий легким делом.Я использую его, чтобы делать статистику в python для многомиллионных баз данных записей для производственных сайтов , которые должны возвращать большие объемы данных менее чем за секунду.И любой python ORM облегчит переключение вашей базы данных, если вы найдете что-то лучше, чем mysql, например postgre.Самое приятное то, что существует множество инструментов python и django для мониторинга всех аспектов производительности вашего приложения (выполнение Python, загрузка / сохранение mysql, память / своп).Таким образом, вы можете атаковать правильную проблему.Может случиться так, что последовательное массовое чтение MySQL не то, что замедляет вас ...

...