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
Форумы портала PHP.SU :: Версия для печати :: Как ускорить обработку текста.
Форумы портала PHP.SU » » Кодировки и все смежное » Как ускорить обработку текста.

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

1. JamesHound - 09 Декабря, 2013 - 17:31:14 - перейти к сообщению
Написал сценарий по обработке текста. Если вкратце, то необходимо сравнивать ключевые слова. Но так как много сравнений то процесс затягивается. Поэтому вопрос. Если я текст перекодирую в коды символов, то это как то ускорит сравнение ? Слышал что для ускорения работы с текстом делают хэш таблицы это текста, но пока что то не могу найти как это делать.
2. caballero - 09 Декабря, 2013 - 17:43:07 - перейти к сообщению
какая связь между кодами символов и хешем?
3. Мелкий - 09 Декабря, 2013 - 17:58:36 - перейти к сообщению
JamesHound пишет:
Слышал что для ускорения работы с текстом делают хэш таблицы

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

Сначала постановка задачи, потом выбор подходящего и оптимального решения. А у вас всё с ног на голову, как можно что-то советовать, если неизвестны граничные условия?
4. JamesHound - 09 Декабря, 2013 - 18:25:09 - перейти к сообщению
На вход подается строка типа $str = 'Абтомобильный промышленность представила'.

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

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

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

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

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

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

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

Выбор ключевого слова происходит по принципу самого длинного слова в конструкции.
Сейчас все реализовано банально, т.е по средствам одного ключевого слова и прогона его по всей БД. Но чем больше становиться БД тем дольше становиться процесс поиска.
5. Мелкий - 10 Декабря, 2013 - 17:54:29 - перейти к сообщению
Собственно, пробуйте полнотекстовый поиск (innodb с MySQL5.6) или уже упомянутый sphinx.
6. JamesHound - 11 Декабря, 2013 - 09:26:17 - перейти к сообщению
За совет благодарю,но сделал другим методом, по средством удаления окончания у ключевых слов и выборкой через LIKE %% в Mysql;

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

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

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

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

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

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

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

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

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

Помещаю это в массив и дальше подаю каждый элемент массива в предложение для сравнения.
7. Мелкий - 11 Декабря, 2013 - 10:16:18 - перейти к сообщению
JamesHound пишет:
выборкой через LIKE %%

То есть fullscan.

Ещё раз - не занимайтесь непонятно чем, возьмите полнотекстовый поиск. Ведь именно им вы и заниматься пытаетесь.
8. JamesHound - 11 Декабря, 2013 - 19:04:09 - перейти к сообщению
Установил sphinx. начал тестировать.Подойдем ли под мои нужды,дальше посмотрим.

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

допустим


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

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

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

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

 

Powered by ExBB FM 1.0 RC1