Как ускорить синонимайзер?

12
harpeos
На сайте с 17.09.2007
Offline
64
#11

for ($i = 0; $i < count ($words); $i++){
Код
}

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

Лучше сделайте вот так:

$words_sz = count ($words);
for ($i = 0; $i < $words_sz; $i++){
Код
}

Удачи!

SJ
На сайте с 16.03.2008
Offline
78
#12
harpeos:
for ($i = 0; $i < count ($words); $i++){

Код
}

Вот так никогда не делайте.

Почему "никогда"? А вдруг мы в цикле меняем количество элементов в $words? ;)

Любимый хостинг (http://beget.ru?id=2902) How can we grow old when the soundtrack of our lives is rock-n-roll?
K
На сайте с 28.12.2008
Offline
61
kud
#13

Вставлю и свои пять копеек :)

Правильно тут подметили, что нужно использовать ассоциативный массив.

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

и потом с помощью array_key_exists() проверить есть ли синоним для этого слова в Вашей базе, если есть, то добавить шаблон поиска в массив patterns[], ну а после этого уже использовать preg_replace_callback()

[Удален]
#14

kud, огорчу вас, array_key_exists работает медленее чем $data[$key] и это факт, можете проверить ;)

ewg777
На сайте с 04.06.2007
Offline
225
#15
sokol_jack:
Почему "никогда"? А вдруг мы в цикле меняем количество элементов в $words? ;)

Извращенцы...

foreach

harpeos
На сайте с 17.09.2007
Offline
64
#16
sokol_jack:
Почему "никогда"? А вдруг мы в цикле меняем количество элементов в $words? ;)

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

Unabashed
На сайте с 17.11.2006
Offline
70
#17

Разбирался с относительно аналогичной задачей (массивы строк), БД также не давала прироста производительности и работала даже медленнее. Но! Изменение настроек СУБД привело к желаемому результату. Может быть, попробовать сюда копнуть?

[Удален]
#18

субд в данном случае - бред, тут надо использовать хеш массивы. как вариант - файл ключей и файл данных. могу в принципе организовать такую файловую бд, которая даст непохо прирост производительности и примерно ~n время выборки ключа по данному "массиву". если интересно, то и мне может быть интересно чтото в этом проекте, можем обсудить :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий