За последние 24 часа нас посетили 19256 программистов и 1623 робота. Сейчас ищут 1014 программистов ...

Лексический анализ

Тема в разделе "MySQL", создана пользователем kuzic, 20 фев 2010.

  1. kuzic

    kuzic Активный пользователь

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    Добавлено: Сб Фев 20, 2010 19:34 Заголовок сообщения: Лексический анализ
    Добрый день уважаемые участники форума!

    Столкнулся с задачей, которую не могу решить.

    Задача состоит в следующем:

    Есть таблица MySQL вида:

    1 Язык PHP является современным языком разработки
    2 Существует большое количество языков программирования
    3 Не стоит прикосаться языком зимой к железу
    4 Язык программирования весьма занимательный
    5 Таня сегодня случайно прикусила язык
    6 Польза программирования на языке PHP очевидна

    Требуется из этой таблицы извлечь повторяющиеся словосочетания. В данном случае необходимо получить результат:

    1 Язык программирования 3

    Нам встретились строки 2, 4, 6.

    Иными словами мы ищем одинаковые слова, которые встречаются в одной строке.
    В этих 3-х строках нам встречались 2 слова "Язык" и "Программирования"
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Размер таблицы?
    Если тестовая, то поищите на phpclasses скрипт, который получает корень из слова. Выберите все записи, найдите одинаковые по корню. По количеству выбирайте.
     
  3. kuzic

    kuzic Активный пользователь

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    Размер таблицы порядка 20 тыс. записей.

    Я могу найти слова. Слова одинаковые по корню. Отсортировать их по количеству повторений во всех фразах.

    Но я не могу найти слова, которые с ними чаще всего встречаются.

    Иными словами я могу найти следующее:

    1 Язык 7
    2 Программирование 3

    Но как мне например получить таблицу

    1 Язык программирования 3
    2 Язык прикусила 1
    3 Язык прикасаться 1

    То есть как узнать какое слово чаще всего встречается со словом Язык.

    Проблема в том, что много строк. Требуется сделать 1 запрос и получить в результате уникальные фразы по мере их повторения в строках.

    Выделить ключевые фразы из всех строк. Фраза даже может содержать слова которые не вместе, а например в начале строки и в конце. Т.е. найти парные слова или тройные слова. Слова, которые связаны между собой и встречаются в строках.
     
  4. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    делай еще таблицу и по крону заноси туда результаты
     
  5. kuzic

    kuzic Активный пользователь

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    Дело в том, что я значения не могу получить.

    Как из всех строк выделить ключевые словосочетания.

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

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Частота запросов?

    Словосочетания заданы изначально? Или необходимо найти абсолютно все?
    Если заданы изначально, можно попробовать так:
    %корень____________________________корень%
     
  7. kuzic

    kuzic Активный пользователь

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    Частота запроса не более 1 в час. Cron.

    Строки постоянно пишутся в базу. Изначально не известно какие словосочетания самые популярные.

    Задача состоит в том чтобы проанализировать таблицу и найти в ней самые повторяющиеся словосочетания.

    После анализа результаты записать в другую таблицу, но это просто.

    Главное произвести анализ.

    Я уже неделю мучаюсь. Не могу найти решение. Никак.

    Как выделить словосочетания.

    Если абстрогироваться от mysql.

    Поставим задачу по другому.


    Есть текст. 10Кб. Как из него выделить самые повторяющиеся ключевые фразы, пусть даже без учета лексем.

    вот пример: http://be1.ru/stat/?url=php.net
    Там по середине страницы выведены Словосочетания.
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    1. бьешь текст в массив слов.
    2. далее перебираешь все слова с учетом предыдущего и последующего по парам и пихаешь в другой массив, где суммируешь.
    3. сортируешь полученный массив по значениям и получаешь рейтинг пар.
    4. пьешь пиво
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    И сколько на это уйдет памяти?
     
  10. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    думаю не много...
    будет мало памяти - пихнуть в базу, но это уже тех. реализация...
     
  11. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    kuzic
    если у тебя есть исходные данные, то это конечно гемор. А если новые, то сразу надо это делать. Пришол набор слова, проанализировал в момент когда он пришел, положил в базу результаты.
     
  12. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Не, это он для примера привел. А в реале у него 20к+ записей. Видимо, нужно на части разбивать и результаты постепенно подбивать в базе.