За последние 24 часа нас посетили 17662 программиста и 1715 роботов. Сейчас ищут 1872 программиста ...

phpMorphy - Морфологический анализатор на PHP

Тема в разделе "Решения, алгоритмы", создана пользователем Psih, 14 мар 2008.

  1. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Изначально нашел здесь: http://zhilinsky.ru/2008/03/13/morphlogy/
    На данный момент словари есть для русского, английского и немецкого языков.

    Скачать можно с SourceForge - http://sourceforge.net/projects/phpmorphy/
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    поиск прикручивать пробовал? )
     
  3. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    armadillo
    Нет, нету таких задачь, а свободного времени у меня просто нету.
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    вообще-то он нужен именно для того, чтобы этого не допускать. А создавать таблицу связей слова(корни)-посты/статьи, которая в таком виде получается вменяемых размеров.
     
  5. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    armadillo
    Чёт я не въехал в смысл твоего поста

    [telepath mode on]
    Если ты хочешь создавать таблицу связок слов и постов, где они есть, ТО:
    1). Выбираешь все слова (исключая лишнее).
    2). Прогоняешь всё через phpMorphy и получаешь все словоформы или корни слов (это логичнее)
    3). Чекаешь что у тебя уже есть в базе из этих слов, а чего нету, добавляя отсутствующие корни в базу
    4). Добавляешь в таблицу связок всё что надо.

    Все это лучше всего делать в background'e по крону (записывая при постинге куда-то ID поста, который нужно обработать) или после постинга поста по register_shutdown_function (про неё я не совсем уверен) что-бы пользователь этого процесса не замечал если он слишком долог.

    При поиске нужно всего-лишь получить корни ключевых слов, получить их ID и передать их в SQL запрос, который выберет все посты, где есть эти слова из таблицы-связки
    [/telepath mode off]
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    угу. Что непонятного я сказал?
    в обычном пхпбб2 такая таблица с полными словами занимает большую часть объема.
     
  7. Johnatan

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

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Интересная вещь.. Буду разбираться как её можно прикрутить...

    З.Ы. Psih, фичи тырить нехорошо. :) [telepath mode screwed]
     
  8. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    armadillo
    Зато поиск быстрый. К тому-же если у тебя форум будет большим очень, то эти данные будут уже не такие большие. Кстати как в PHPBB сделан поиск по словоформам неизвестно мне, может он для него "бегал" и "бегать" разные слова вообще. Для phpMorthy теоретически это должно быть одно и тоже.

    З.Ы. Не ругать, поскольку я _не знаю_ как то и другое работает, я предпологаю. Если хотите знать точно, проверьте и поделитесь результатами.
     
  9. Диди

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

    С нами с:
    8 апр 2007
    Сообщения:
    72
    Симпатии:
    0
    Адрес:
    Люберцы, МО
    Psih большое спасибо за ссылку! Прикрутил поиск используя phpMorthy. Работает замечтательно! :D
    Главная поблема была сделать нормальную функцию разбиения текста на слова. Честно говоря, результатом доволен не очень. Может кто знает, есть ли какая-нить готовая функция для этого?
     
  10. crazy

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

    С нами с:
    8 авг 2007
    Сообщения:
    20
    Симпатии:
    0
    круто! но есть одно но - иногда когда ищешь надо найти именно в нужном склонении или времени, что задать принципе не трудно, а вот отплевываться от того лишнего что нашли считая одним словом например яндекс заколебешься, поэтому не заморачиваюсь на эту тему. Хотя для другого проекта где будут распознаваться слова ии весьма полезно.
     
  11. Диди

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

    С нами с:
    8 апр 2007
    Сообщения:
    72
    Симпатии:
    0
    Адрес:
    Люберцы, МО
    Это уже файн-тюнинг, которым можно бесконечно заниматься - дополнять поиск разными опциями, например ограничивающими поиск по датам, выбор все слова или любое из слов, поиск по разделам, поиск с и без словоформ, конвертацию популярных сокращений в нормальные слова и т.д...
    Так же очень полезно сделать систему кеширования результатов запроса, на случай, если в результатах поиска несколько страниц. Я вот все это реализовал (кроме точного вхождения) вот здесь: http://www.novosel.ru. Как результат, индексная база сократилась почти в двое, скорость поиска ощутимо возросла, количество запросов пользователей, по которым хоть что-то найдено, увеличилось в разы. Т.е. оно того стоило.
     
  12. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    есть ispell ВСТРОЕННЫЙ как расширение PHP.
    там все это давно есть. работает моментально.