Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Индексация  (Прочитано 11593 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Scorpion
Гость
« : 16-02-2004 11:21 » 

Много искал, но так ничего и не нашёл ... может вы поможете ...

Проблема в том, что существует некий массив из слов (регистр не важен, так как в итоге для удобства переведём его в нижний) и текст, в котором вероятно могут присутствовать эти слова.

Задача следующая: найти в тексте все слова, которые встречаются в массиве. При этом при самом поиске регистр не должен учитываться тоесть Выхухоль, ВЫХУхоль, ВыХуХоль, для поиска всё едино ... Но, после поиска, эти слова должны заменяться, причём имиже самими с дописыванием тегов ссылки покраям (елси кто не понял ... проще говоря делам из слова ссылку не меняя регистра этого слова)

Существуют следующие проблемы:

1. Поиск без учёта регистра невозможен (в качестве регулярного выражения eregi() ) так как русский язык (без комментариев). Пробовал установиль локаль и даже патч (наш админ ставил), поиск без учёта регистра так и не работает, а вот такие функции, как usfirst() и подобные начинают косячить с буквами (особенно с буквой т, регистр при этом не меняется, а вот вместь буквы появляется чёрт знает что);

2. Пробую выйти из положения функцией sql_regcase, дабы найти хотябы зависящее от регистра слово, но зато предусмотреть регистр для самой замены. Возникают проблемы, находится первое слово из возможных, записывается в переменную и эти слова заменяются, при этом остальные слова остаются без внимания (например впередиидущее по тексту слово выхухоль проиндексируется. а идущее далее слово ВЫхухоль, уже нет).

Бьюсь 2 недели, ничего придумать не могу ...

Делать перебор для каждой буквы с регистром это бред, так как букв в слове может быть и 20, а вариантов сочетаний больших и маленьких букв, это только из-за одного слово можно сервак повешать, не говоря уже о тексте из 1 000 слов (как минимум)

Если желаете, могу привести мой код ...
Если не сложно, почешите репу ... а то у меня уже мозги кипят, а делать надо ...
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-02-2004 11:41 » 

Ну, локаль все равно надо делать - иначе придется тебе руками писать все ф-ии поиска/замены.

Покажи как ты локаль устанавливаешь. Какая ОС, версия PHP?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Skubent
Гость
« Ответ #2 : 16-02-2004 21:14 » 

А если текст перегонять в строчные буквы ?
Записан
Scorpion
Гость
« Ответ #3 : 17-02-2004 04:38 » 

Цитата: Skubent
А если текст перегонять в строчные буквы ?


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

Весь смысл и состоит в том, чтобы регистр при формировании ссылок можно было сохранить.

Например если в тексте TSpeedButton, то после превращения этого слова в сылку, оно должно таким и остаться по регистру, ане стать tspeedbutton или наоборот TSPEEDBUTTON.

Будь мне неважен регистр конечных слов, я б с самого начала сделал как ты предлагаешь.
Записан
Scorpion
Гость
« Ответ #4 : 17-02-2004 04:40 » 

Цитата: RXL
Ну, локаль все равно надо делать - иначе придется тебе руками писать все ф-ии поиска/замены.

Покажи как ты локаль устанавливаешь. Какая ОС, версия PHP?


OS:  ASP Linuks 7.3
PHP: 3

установка локали через патч, если найду. потом напишу, и через php функцию, что назувается "для всех".
Записан
Fireworm
Гость
« Ответ #5 : 17-02-2004 07:18 » 

Как вариант:
1. Делаеш массив весь в нижнем регистре
2. делаеш копию строки, с переводом в нижний регистр оператором
Код:
strtr)$TEXT, "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ", "абвгдеёжзийклмнопрстуфхцчшщьыъэюя":
- он не зависит от локали.
3. делаеш поиск по новой строке, но результаты поиска по ней - аналогичны результатам в исходной.
4. производиш необходимые тебе операции.

Если что еще не понятно - спрашивай.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 17-02-2004 14:06 » 

Fireworm, это конечно решение, но больше напоминает латание дыр. Такая вешь как локаль должна функционировать нормально, а иначе в будущем он опять споткнется на этом.

Scorpion, какой патч? Зачем патч? Поддержка локали организованна через glibc, а php только выполняет роль прослойки. Если PHP ставил из того же дистрибутива, то, если конечно в системе лишнего не снес, то работать должно как часы. Кстати, с ASPLinux 7.3 идет php-4.1.2, а не 3.х.х .
Лучше посмотри внимательнее - может ты чего не так сделал.
На всякий случай - сслыка на доку: http://ru3.php.net/manual/ru/function.setlocale.php
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Fireworm
Гость
« Ответ #7 : 17-02-2004 15:27 » 

RXL, Это латание дыр - предложено здесь:
http://www.php.net/manual/ru/function.strtoupper.php
см. комментарии. И это не только для кирилических кодировок.
Тем более, неизвестно, какой хостинг, и как там это все настроено... особенно, если выбирать западные хостинги
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 17-02-2004 17:04 » new

Fireworm, понимаю, всякое возможно. Но не в данном случае - дистрибутив линукса русский.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Scorpion
Гость
« Ответ #9 : 18-02-2004 05:41 » 

спасибо ...


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

ещё раз спасибо ...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines