Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет точных вхождений в поле / 12 сообщений из 12, страница 1 из 1
06.06.2017, 11:07
    #39466516
sergei.biyalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
Здравствуйте! Пытаюсь разобраться - возможно ли данная манипуляция.
Есть таблица "slova" c полями (id, name,) пример:
id name
1 гриб
2 лес
3 нож

и таблица "statja" с полями (id, text)
id text
1 Однажды я пошел в лес
2 Существует много разных грибов в лесу, но не все грибы съедобные
3 Найденный гриб в лесу аккуратно был срезан перочинным ножиком

Хочу подсчитать сколько раз каждое слово входит в каждом тексте (поле "text")

В итоге хочу получить результат:
name id_statja количество
гриб 1 0
гриб 2 2
гриб 3 1
лес 1 1
лес 2 1
лес 3 1
......
...
Рейтинг: 0 / 0
06.06.2017, 12:43
    #39466652
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
Да не вопрос. Берёшь текст статьи, вылизываешь все разделители слов, преобразуя их в как-нибудь один (скажем, пробел), добавляешь по пробелу в начало и в конец, а потом просто ищешь каждое отдельно взятое слово, точно так же обрамлённое пробелами. Для подсчёта же количества вхождений заменяешь обрамлённое пробелами слово на два пробела, считаешь разницу длин текста до замены и после, делишь на длину слова и получаешь количество. Ну то есть алгоритмически:

Код: sql
1.
2.
3.
4.
5.
set @article = (select concat(' ', text, ' ') from articles limit 1);
for @char in '.,;:-_!'
    set @article = replace(@article, @char, ' ');
set @word = (select word from slova limit 1);
set @wordcount = (length(@article) - length(replace(@article, concat(' ', @word, ' '), '  ') / length(@word));
...
Рейтинг: 0 / 0
06.06.2017, 12:55
    #39466675
sergei.biyalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
Akina, спасибо.
Пока ждал набросал свой пример, вот только есть проблемы небольшие


SELECT length(text) - SELECT length(REPLACE(text,'гриб','гри'))
FROM `statja` итогом будет нужное количество
проблема в том, что функция replace регистрозависимая (Гриб и гриб - разные слова)
...
Рейтинг: 0 / 0
06.06.2017, 12:58
    #39466681
sergei.biyalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
точнее сказать, функция меняет только точные вхождения. Можно ли как-то обойти?
...
Рейтинг: 0 / 0
06.06.2017, 13:01
    #39466686
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
sergei.biyaltфункция replace регистрозависимая (Гриб и гриб - разные слова)Зависит от Collation.

sergei.biyaltфункция меняет только точные вхожденияА как надо?
...
Рейтинг: 0 / 0
06.06.2017, 13:03
    #39466688
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
sergei.biyaltфункция replace регистрозависимаяК тому же нет необходимости сохранения текста после замены - так что привести его к одному регистру (LOWER(), к примеру), и всё...
...
Рейтинг: 0 / 0
06.06.2017, 13:05
    #39466694
sergei.biyalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
AkinaА как надо?

если в тексте есть, слова ГРИБ, или гриб, или Гриб
нужно всех их просуммировать
...
Рейтинг: 0 / 0
06.06.2017, 13:06
    #39466696
sergei.biyalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
SELECT length(REPLACE(LOWER(text),'гриб','гри'))
FROM `statja` так?
...
Рейтинг: 0 / 0
06.06.2017, 13:08
    #39466698
sergei.biyalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
Akina, спасибо Вам большое! То что нужно)
...
Рейтинг: 0 / 0
06.06.2017, 13:13
    #39466706
sergei.biyalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
AkinaДа не вопрос. Берёшь текст статьи, вылизываешь все разделители слов, преобразуя их в как-нибудь один (скажем, пробел), добавляешь по пробелу в начало и в конец,

А зачем доставать все разделители и вставлять пробелы?
...
Рейтинг: 0 / 0
06.06.2017, 14:15
    #39466812
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
sergei.biyaltзачем доставать все разделители и вставлять пробелы?
Затем, чтобы под слово "гриб" не считало слова "грибы", "грибной", "Магриб" и т.п.
...
Рейтинг: 0 / 0
06.06.2017, 14:40
    #39466844
sergei.biyalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет точных вхождений в поле
Akina, понятно. Спасибо!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет точных вхождений в поле / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]