вырвать часть текста

sergey24

Новичок
вырвать часть текста

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

dimagolov

Новичок
а слабо пользоваться сервисами, которые эти поисковые системы предоставляют?
 

sergey24

Новичок
слабо
у меня полностью свой готовый движок рабочий
зачем зависит от кого то ?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
слабо
у меня полностью свой готовый движок рабочий
ITHappens.ru
#511: Круче только яйца
21 января 2009, 09:00
рейтинг: 2597

Из разговора с директором:
- Глеб, нам нужен поисковик, который бы сам ходил по сайтам и выбирал нужные нам только новые объявления по аренде помещений под филиалы центра и сортировал бы их по релевантности на фоне кризиса. За основу что-нибудь наподобие google. Точнее, так же, как гугл, но круче.
- Вячеслав Всеволодович, для этого мне понадобится комната под сервер, собственно сам сервер, штат сотрудников - человек хотя бы 10 для начала, несколько миллиардов долларов и полгода-год времени для создания поисковика, круче гугла.
- Так, я не понял, за пару вечерних смен не сделаешь?
 

sergey24

Новичок
Вы меня не поняли :)
поиск по базе ни каких ботов нет :)
просто надо выделить слова
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
sergey24
а что тебе мешает это сделать так, как сделано в поисковых системах?
разбивать текст по предложениям, приводить слова к учиываемым словоформам, построить индекс слов, написать поиск по этому индексу... может быть, построить кластер серверов
за годик справишься
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
esergey
он спрашивает о поиске фрагмента внутри текста (полнотекстовый поиск), а не о запросах в базе данных
 

sergey24

Новичок
Автор оригинала: grigori
esergey
он спрашивает о поиске фрагмента внутри текста (полнотекстовый поиск), а не о запросах в базе данных
хоть один адекватный человек нашелся :)

-~{}~ 23.01.09 01:54:

и где там хоть слово про поиск куска текста с найдеными словами ?
может я слепой...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
sergey24
я не один, а вот твой начальник явно не из нашего узкого круга ограниченных товарищей
 

pilot911

Новичок
обычно делается так:

1. находится первое слово - от него +- 5 слов вправо влево
2. находится второе слово - от него +- 5 слов вправо влево
3. находится третье.................................


между всеми тремя пунктами ставятся многоточие в том коротком искуственном фрагменте, которым показываешь найденное

по-другому я не вижу, как это сделать
 

pilot911

Новичок
Автор оригинала: zerkms
pilot911
нужно не забыть, что:
я понял, но это какое-то невразумительное требование, по-моему, так никто не делает ..


имхо, кусок фрагмента, который надо показать - это 5-7 строк текста.. иногда вообще 2-3

и чтобы в 2-3 строках поисковая фраза встречалась несколько раз.. и так в нескольких местах текста.. ну может такое быть в одном тексте из 100..

смысла особого я не вижу в такой постановке вопроса
 

Splurov

Новичок
sergey24
1) разбиваешь поисковую фразу на слова
2) убираешь у слов окончания и приставки (это достаточно грубый подход, но более-менее пригоден для данной задачи)
3) ищешь в тексте слова и запоминаешь их позиции
4) ищешь позиции наиболее близкие к друг друга (начиная от всех слов из поисковой строки заканчивая одним, если остальные не найдены), и не забываем учитывать длинну слова
5) берёшь самую первую и самую последнюю найденную позицию из пункта 4, и выделяешь предложение в котором находится фраза, для этого слева и справа от позиций нужно найти точки или перевод строк или конец/начало строки
 

x-yuri

Новичок
не понял про 4 и 5. Можно пройтись по всем найденным в тексте словам и определить для них количество слов в некоторой окрестности (количество слов, которое ты собираешься выдать). Из всех этих вариантов выбрать сам знаешь какой
 

Splurov

Новичок
x-yuri
4. допустим
- поисковый запрос состоит из трёх слов
- в тексте нашлось 10 первых слов, 15 вторых слов, 5 третьих слов
мы знаем позицию каждого из найденных слов
теперь ищем в каждой из трёх групп такие позиции, чтобы слов стояли как можно ближе друг к другу
таким образом мы найдём искомую фразу
5. от позиции первого слова в найденной фразе ищем слева начало предложения/начало абзаца/начала строки, запоминаем точку левого обрезания
от конечной позиции последнего слова ищем справа конец предложения/конец абзаца/конец строки, запоминаем точку правого обрезания
выделяем найденный абзац/предложение и показываем пользователю
---
я не сколько упрощаю алгоритм, но надеюсь принцип понятен
 

x-yuri

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

Splurov

Новичок
x-yuri
Ещё определим минимальную близость, при которой слова считаются фразой. Например, два слова между искомыми.
 

sergey24

Новичок
Мда такой раньше был классный форум и что с него осталось :(

вообщем я придумал реализацию:

1 выделяются найденые слова
2 разбивается текст на предложения
3 сортируются предложения от количества отмеченых слов
4 выводятся первые предложения с максимальным количеством найденых слов (в зависимости от длины строки которую надо показать)

как показывает практика все просто и удивительно :)

Всем удачи, верните старых формучан :)

P.S. Я работаю на себя :)
 
Сверху