
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.07.2014, 15:51:56
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
На входе у меня строка до 1400 символов - некий произвольный текст, который вводит юзер. Работает он монопольно. В ней около 100 слов. На выходе я хочу получить рекордсет с: 1. позиция слова в строке. 2. Собственно слово. 3. В какой из имеющихся таблиц оно найдено, т.е. что это - существительное, прилагательное, глагол, знак препинания. и его id в Для этого у меня заведены эти четыре таблицы, в них лежат слова. Соответственно, ставлю числовой признак: 1, 2, 3, 4 - и найденный в какой-то из таблиц id. Если нигде не найдено - null, null И вроде бы все должно быть и просто и быстро - индекс на слово у меня есть, каждая из этих таблиц тоже индекс на слово содержит... НО реальный код обработки получается ужасно громоздким и тормозным. При этом в таблицах у меня до 1000 строк, т.е пробежаться надо по 4 тысячам записей, вообще ни о чем задача, а работает секунд десять. Машина при этом 4 ядерная, i-5 3570, 16 гигов оперативки, ssd Samsung 840Pro. В момент работы mysql отьедает до гига оперативки, 12 свободно. Понятно дело, что проблема в моем коде, а не в базе. Как это сделать правильно, коллеги? Достаточно будет даже не кода, а просто алгоритма - парсить с использованием вот этого алгоритма, заливать распарсенное лучше не во временную, а в постоянную таблицу и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2014, 15:53:59
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
Для расстановки позиций пользуюсь вот этим из faq. SET @id := 0; SELECT @id := @id + 1 AS row_number, your_table.* FROM your_table; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2014, 16:47:27
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
UsersДля этого у меня заведены эти четыре таблицы, в них лежат слова.Я бы сделал одну с признаком части речи. Например, в четырех отдельных полях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2014, 16:54:38
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
miksoft, Не пойдет, потому что хранится вся информация о части речи. Слово во всех формах и т.п. Эх, мне бы, конечно, сюда что-то бы прикрутить, чтобы оно по запросу эту инфу возвращала, типа АОТ, но не знаю, как. Ну, а коль хранится вся инфа - то выйдет с существительным и глаголом, например, проблема. Разные свойства - значит, будут пустые поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2014, 17:20:49
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
Users, ну тогда показывайте ваш код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2014, 18:21:23
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
miksoft, стыдно Заранее знаю, что написано криво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2014, 20:17:50
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
Users, Хм, ну хоть какие-то исходные данные можете дать? на слова можно бить с помощью SUBSTRING_INDEX, для поиска по таблицам - JOIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2014, 22:33:29
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
miksoft, я бью на слова вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. при этом union таких у меня 150 - по максимальному количеству слов в предложении. Уже очень некрасивый код :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2014, 23:27:07
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
Users, Используйте вместо кучи UNION-ов любую таблицу, где есть достаточно записей. В будущем старайтесь использовать UNION ALL, а UNION - только там где это целенаправленно нужно, ибо требует заметно больше накладных расходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2014, 22:47:00
|
|||
|---|---|---|---|
Парсинг текстовой строки |
|||
|
#18+
miksoft, спасибо, коллега. Натолкнули на очевидную, в общем-то, вещь. Ну и со временными таблицами я нагородил - в ms sql их использование свободно, а в mysql то джойнить нельзя, то обновлять, то еще что-то... Заменил на постоянную таблицу - и сразу полегчало, убрал весь мусор. Премного благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&tablet=1&tid=1834435]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
72ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 334ms |

| 0 / 0 |
