Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как ускорить обработку текста.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Ускорение обработки текста
JamesHound
Отправлено: 09 Декабря, 2013 - 17:31:14
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Написал сценарий по обработке текста. Если вкратце, то необходимо сравнивать ключевые слова. Но так как много сравнений то процесс затягивается. Поэтому вопрос. Если я текст перекодирую в коды символов, то это как то ускорит сравнение ? Слышал что для ускорения работы с текстом делают хэш таблицы это текста, но пока что то не могу найти как это делать.
 
 Top
caballero
Отправлено: 09 Декабря, 2013 - 17:43:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




какая связь между кодами символов и хешем?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Мелкий Супермодератор
Отправлено: 09 Декабря, 2013 - 17:58:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




JamesHound пишет:
Слышал что для ускорения работы с текстом делают хэш таблицы

Я даже скажу, где слышали: http://forum.php.su/topic.php?fo...66510#1386166510
JamesHound, будьте добры ответить чётко и ясно на вопрос, заданный почти неделю назад.

Сначала постановка задачи, потом выбор подходящего и оптимального решения. А у вас всё с ног на голову, как можно что-то советовать, если неизвестны граничные условия?


-----
PostgreSQL DBA
 
 Top
JamesHound
Отправлено: 09 Декабря, 2013 - 18:25:09
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




На вход подается строка типа $str = 'Абтомобильный промышленность представила'.

Строка логически не правильна 'Абтомобильный промышленность' .

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

Задача состоит в том, что бы строку $str сравнить с предложениями и если будет неявное,но самое ближайшее сходство, типа " Абтомобильный промышленность представила "~ "Абтомобильная промышленность представила" , заменить на строку из правильного предложения т.е на "Абтомобильная промышленность представила".

Сравнивать каждое предложение со строкой бессмысленно поэтому все делается в 2 этапа.
1 - этап . С помощью ключевого слова (на данном примере ключ. слово Абтомобильный) делается выборка предложений, где есть примерно идентичное слово.(сравнение делается на основе similar_text() ).

2 этап. После выборки идет сравнение строки $str и слов в предложении. Если есть неявное, но близкое сходство по similar_text(), то идет замена слова.

Вот собственно вся задача которую решаю.

Сейчас стал вопрос на Первом этапе, с выборкой предложений по ключевому слову.

Выбор ключевого слова происходит по принципу самого длинного слова в конструкции.
Сейчас все реализовано банально, т.е по средствам одного ключевого слова и прогона его по всей БД. Но чем больше становиться БД тем дольше становиться процесс поиска.

(Отредактировано автором: 09 Декабря, 2013 - 18:28:40)

 
 Top
Мелкий Супермодератор
Отправлено: 10 Декабря, 2013 - 17:54:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Собственно, пробуйте полнотекстовый поиск (innodb с MySQL5.6) или уже упомянутый sphinx.


-----
PostgreSQL DBA
 
 Top
JamesHound
Отправлено: 11 Декабря, 2013 - 09:26:17
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




За совет благодарю,но сделал другим методом, по средством удаления окончания у ключевых слов и выборкой через LIKE %% в Mysql;

Но встала другая задача.
Есть переменная $Str = 'Все выходные я провел дома'

Нужно сравнить со строкой $Str2 = "Выходные все я провел дома"

Если поменять местами слова в $Str - все выходные На выходные все и привести все в нижний регистр, то $Str = (будет равна) $Str2.

Задача стала в том, что бы подаваемую строку $Str сравнивать с предложениями и выявлять похожие конструкции со строкой $Str, но учитывая пример выше.

Допустим Мы подаем строку $Str = 'Все выходные я провел дома'

Сравниваем с предложением 'Все друзья где то были, но выходные все я провел дома '.

Очевидно что если мы подадим $Str в таком виде, то ничего не найдем. Но если мы поменяем слова местами все выходные На выходные все то найдем в тексте

'но выходные все я провел дома';

Сейчас у меня организованно так что подаваемую строку $Str я разделяю на элементы (каждое слово\символ после пробела считается за элемент),перемешиваю
[все выходные я провел дома]
[выходные все я провел дома]
[выходные я все провел дома]
[...... и так далее ]

Помещаю это в массив и дальше подаю каждый элемент массива в предложение для сравнения.

(Отредактировано автором: 11 Декабря, 2013 - 09:29:13)

 
 Top
Мелкий Супермодератор
Отправлено: 11 Декабря, 2013 - 10:16:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




JamesHound пишет:
выборкой через LIKE %%

То есть fullscan.

Ещё раз - не занимайтесь непонятно чем, возьмите полнотекстовый поиск. Ведь именно им вы и заниматься пытаетесь.


-----
PostgreSQL DBA
 
 Top
JamesHound
Отправлено: 11 Декабря, 2013 - 19:04:09
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




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

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

допустим


При введении конструкции выдает релевантные\похожие конструкции, но нужно что бы был вывод только похожих конструкций на введенную фразу.

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

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

Собственно это я и описывал выше.

(Отредактировано автором: 11 Декабря, 2013 - 19:50:03)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB