Как создать упорядоченный список наиболее распространенных подстрок внутри моего столбца varchar MySQL?

86
5

У меня есть таблица базы данных MySQL с несколькими тысячами строк. Таблица настроена так:


id | text


Столбец id представляет собой автоматически увеличивающееся целое число, а столбец text - varchar с 200 символами.


Скажем, у меня есть следующие строки:


3 | I think I'll have duck tonight


4 | Maybe the chicken will be alright


5 | I have a pet duck now, awesome!


6 | I love duck


Тогда список, который я хочу сгенерировать, может выглядеть примерно так:


    3 появления "утки"
    3 вхождения 'I'
    2 вхождения 'have'
    1 появление "курицы"
    .etc.etc

Кроме того, я, вероятно, захочу сохранить список подстрок, которые можно игнорировать из списка, например "Я", "Будет" и "иметь". Важно отметить, что я не знаю, что люди опубликуют.


У меня нет списка слов, которые я хочу контролировать, я просто хочу найти наиболее распространенные подстроки. Затем я отфильтрую любые ошибочные подстроки, которые не интересны из списка, путем редактирования запроса.


Может ли кто-нибудь предложить лучший способ сделать это? Спасибо всем!

спросил(а) 2008-10-30T02:57:00+03:00 12 лет, 5 месяцев назад
1
Решение
75

MySQL уже делает это для вас.


Сначала убедитесь, что ваша таблица является таблицей MyISAM


Определите индекс FULLTEXT в столбце


В командной строке оболочки перейдите в папку, в которой хранятся ваши данные MySQL, затем введите:


myisam_ftdump -c yourtablename 1 >wordfreq.dump

Затем вы можете обработать wordfreq.dump, чтобы устранить нежелательный столбец и отсортировать его по частоте.

Вы можете сделать все вышеперечисленное с помощью одной командной строки и некоторого волшебства sed/awk.
И вы можете включить его в свою программу без необходимости создания файла дампа.


Дополнительная информация о myisam_ftdump здесь:
http://dev.mysql.com/doc/refman/5.0/en/myisam-ftdump.html


О... еще одна вещь, секундомеры для MySQL предварительно скомпилированы в движок.
И слова с 3 или менее символами не индексируются.
Полный список находится здесь:


http://dev.mysql.com/doc/refman/5.0/en/fulltext-stopwords.html


Если этот список не подходит для ваших нужд или вам нужны слова с количеством символов менее 3, единственный способ - перекомпилировать MySQL с разными правилами для FULLTEXT. Я не рекомендую это!

ответил(а) 2008-10-30T08:44:00+03:00 12 лет, 5 месяцев назад
44

Вы можете посмотреть в MySQL Полнотекстовые плагины для парсеров

ответил(а) 2008-10-30T03:10:00+03:00 12 лет, 5 месяцев назад
44

Извлеките в плоский файл, а затем используйте свой любимый быстрый язык, perl, python, ruby ​​и т.д. для обработки плоского файла.


Если у вас нет одного из этих языков как часть вашего набора навыков, это идеальная небольшая задача, чтобы начать использовать его, и вам это не понадобится.

Некоторые задачи базы данных намного проще выполнять OUTSIDE базы данных.

ответил(а) 2008-10-30T03:03:00+03:00 12 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема