powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет точных вхождений в поле
12 сообщений из 12, страница 1 из 1
Подсчет точных вхождений в поле
    #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
Подсчет точных вхождений в поле
    #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
Подсчет точных вхождений в поле
    #39466675
sergei.biyalt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо.
Пока ждал набросал свой пример, вот только есть проблемы небольшие


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

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

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

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


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