Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вырезать текст с наибольшим вхождением искомого, С учетом морфологии 
:(
    Опции темы
IZ@TOP
  Дата 1.9.2005, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Здравствуйте товарищи! Пишу поиск по своему сайту, и, решил немного заморочиться: сделать вывод результатов поиска (по базе идет с использованием индексов full text search) с небольшой частью текста в котором находится наибольшее число вхождений словосочетаний (фраз, слов) в тексте. Пример того что нужно сделать - http://www.yandex.ru. Путем недолгих раздумий, решил использовать разбиение по пробелу текстов и проверки в цикле схожести слова, хотя изначально и хотел использовать strpos и ему подобное (но к сожалению тут морфологии ни какой не будет, только точное совпадение). Так вот, в данной схеме используется similar_text по словам запроса и элементам массива слов найденных текстов. А теперь представим что массив при разбивке получается из, так к примеру, 20-30K элементов... что скажем так, очень сильно кушает память, да еще в добавок, считаем что чем больше слов в запросе (хоть и слова из менее чем трех символов не считаем вообще за слово), тем больше он этот массив крутит (т.е. x*y - 20k*3 = 60k циклов итерации!!!).

Может кто-то делал что-то подобное? Или возможно есть уже какие либо готовые решения на php.net (я правда ничего вразумительного не нашел).

У меня сейчас есть такая идея:
1. Берем слово, обрезаем его (к примеру -3 символа), если оно не меньше определенной длинны.
2. Ищем позицию этого слова в тексте (strpos).
3. Смотрим схожесть текста (similar_text). Если она не менее 90%, делаем следующий шаг. Если меньше, ищем далее по тексту. Если не найдем, оставим первую фразу из текста.
4. Ищем перенос строки (или отсчитываем необзходимое количество символов) до вхождения слова, ищем перенос строки или `.` или `!` и т.п. после вхождения слова.

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

Еще нужно учитывать сам запрос пользователя. Если он хотел найти точное вхождение фразы целиком, то при обрезке текста нужно и это учесть (но это уже мысли вслух).

В общем жду идей или еще лучше ссылок на алгоритмы подобной обработки текста.



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Akina
Дата 1.9.2005, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Погоди... чем тебе штатный рейтинг соответствия не угодил?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
IZ@TOP
Дата 1.9.2005, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



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


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
IZ@TOP
Дата 2.9.2005, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



И что - все уснули?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
AntonioBanderaz
Дата 3.9.2005, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



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


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Opik
Дата 8.9.2005, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 3
Всего: 55



http://ee.php.net/mnogosearch
http://ee.php.net/manual/en/ref.aspell.php
http://ee.php.net/manual/en/ref.pspell.php

Это сообщение отредактировал(а) Opik - 8.9.2005, 08:56
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.