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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск целого слова, не разделенного пробелами, тяжело кратко описать суть темы :) 
:(
    Опции темы
PROme
Дата 16.3.2005, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Значит есть стакая проблема: есть набор слов, есть строки.
Мне нужно определить тематику текста строк, для этого я использую набор сло, например есть слова:

авто
велосипед
машина
мотоцикл

для определения вхождения слова с троку, использую в цикле, для всех слов:

Код
if(stristr($str, $slovo[$i])) {...}


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

BlaBlaBla - лучший велосипед с автоматическим переключателем скоростей.

Тут if сработает, поскольку stristr ищет не слово, а вхождение текста вооще, и он его найдет для слова не по теме - автоматическим (авто - подразумивается автомобиль...) ну может не совсем удачный пример, носмысл, думаю донес: нужно то же самое, только для слов.

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

Конечно, можно немного усложнить конструкцию, но тут возникает другая проблема - в данном месте большие требования по производительности: через этот участко кода будут бещз перерыва прогоняться строки...

Так что, специалисты smile, прошу оптимального решения.
Заранее спасибо и сорри за ламерский вопрос... очень нужен наиболее оптимальный вариант smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Irokez
Дата 16.3.2005, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



думаю тут регами нужно
PM   Вверх
Opik
Дата 17.3.2005, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



PROme
сначала вырежи лишние пробелы, потом дели explode(' ', $text)
PM MAIL Skype   Вверх
penizillin
Дата 17.3.2005, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 9



Opr, Irokez прав - целым словом является любой набор букв, ограниченный не-буквами.
PM MAIL ICQ   Вверх
PROme
Дата 17.3.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



penizillin в этот что-то есть


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


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

в общем, если у кого есть еще какие решения или идеи - делитесь, заранее спасибо smile

если нет, думаю я к концу недели созрею и выложу свой наиболее оптимальный вариант smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Sardar
Дата 17.3.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Цитата(PROme @ 17.3.2005, 15:48)
Irokez я не уверен, но мне кажется что реги тоже, благодаря своей универсальности уступают в производительности

Лучший способ замерить smile А еще лучше разобратся как устроенны реги(4 уровень Хомского, формальные грамматики) и узнать почему же реги и мощные и быстрые одновременно(O(N) при не сжатом ДКА). Естественно память они кушают smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
PROme
Дата 18.3.2005, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



замеряем... на досуге...

а вчера перед сном меня осенило smile
предыдущий пост - фактически и есть оптимальное (с моей точки зрения) решение
итак, как я его вижу:

$str строка, до этого обработанная trim-ом
мы делаем примерно так:
$str_work=' '.$str.' ';
все слова заранее (чтоб небыло лишних операций, они все равно в БД висят) обрамляем пробелами
ну и цифры/знаки припенания в $str_work заменяем пробелом
а далее уже как в первом посте...
по-моему, довольно оптимально
может ли кто чего лучше предложить?


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Irokez
Дата 18.3.2005, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Код

<?php
$str="  Значит есть стакая проблема: есть набор слов, есть строки.
Мне нужно определить тематику текста строк, для этого я использую набор сло, например есть слова:
";
$words=preg_split('/[\W]+/', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($words);
?>


PM   Вверх
PROme
Дата 18.3.2005, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я совсем недавно писал что реги так же плохо знаю, как в свое время и работу с физической памятью в Паскале smile
Irokez, спасибо за пример
вызов принят smile
завтра устроим испытания на производительность smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
PROme
Дата 19.3.2005, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
SEO-мастер
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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