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

start [/forum/topic.php?fid=47&msg=38706787&tid=1834435]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 374ms |

| 0 / 0 |
