Число повторений определенного слова в ячейке

Автор radius, 19 марта 2021, 12:04

0 Пользователи и 1 гость просматривают эту тему.

radius

Исходные строки - это некое описание товаров на русском языке, весьма специфическое. Как правило, слова в описании не связаны друг с другом по смыслу, точнее говоря не образуют осмысленную фразу. Стоит задача перевода на английский, с ограничением на длину строки 120 символов. Часть исходного русского текста длиннее 120 знаков. Из-за того, что русский язык велик и могуч, после перевода на английский получаются такие казусы - вместо сочетания "малышка детка младенец грудничок" получается набор "baby babe babe baby", вместо "энергетика энергия" получается "energy energy". Плюс изначально, еще в русском варианте некоторые слова могли дублироваться. Поэтому стоит задача удалить слова, повторяющиеся два и более раза, что бы поместились другие слова. В файле выше приведены реальные примеры.

kompilainenn

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

Понято. Но "несвязный" текст в любом случае придётся "увязывать" глазами. Подсчёт повторений – это только дополнительная помощь для проверки на ошибки. Такую проверку делают и для вполне связного текста. Зачем понадобилась процедура, на которую вы дали ссылку выше (@JohnSUN)? Разве того, что здесь предложили недостаточно, если всё равно весь текст надо просмотреть? Важны ведь повторы в принципе, а не количество слов...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#18
@radius, предлагаю более простой вариант организации работы, если только я увидел все детали (это сложно).
Регулярное выражение:
(?i)\b(\w+)\b(?=.+\b\1\b)
Поставьте эту формулу в ячейку справа и пока не получите ноль, работайте со строкой:
=IF(ISERROR(REGEX(Текст;"(?i)\b(\w+)\b(?=.+\b\1\b)"));0;1)
"Единичка" будет сигнализировать о наличие повторов любого слова (одного или нескольких n раз) как семафор, пока вы работаете с текстом строки.

Кстати, эти "единички" вы можете отфильтровать.

UPD1:
Повтор любого "слова", в том числе и союза "и" или числа (одинакового набора цифр) в тексте, будет выдавать "единичку".

UPD2:
А формула ещё правее будет показывать первое проблемное слово. Исправите одно, появится другое (если есть такое):
=REGEX(Текст;"(?i)\b(\w+)\b(?=.+\b\1\b)")

UPD3:
Загрузил ваш пример с моей формулой.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

radius

Цитата: eeigor от 21 марта 2021, 16:25Зачем понадобилась процедура, на которую вы дали ссылку выше

Я пока в поиске наименее трудоемкого решения. И оно пока не найдено. Наверное, можно обойтись одной процедурой.

radius

Цитата: eeigor от 21 марта 2021, 17:17@radius, предлагаю более простой вариант организации работы

Спасибо, осмыслю позже.

eeigor

Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#22
Кое-что исправил...
Обратите внимание: в файле подсчитывается количество не вашего, а того слова, которое повторяется (найдено).

UPD:
Цитата: eeigor от 21 марта 2021, 16:25процедура, на которую вы дали ссылку выше (@JohnSUN)
Функция getDblWord() извлекает только первые повторяющиеся слова с учётом регистра.
В моём примере извлекается то же самое: первое повторяющееся слово, но без учёта регистра.
B1="(?i)\b(\w+)\b(?=.+\b\1\b)"
С4=IFERROR(REGEX(A4;$B$1);"")

То есть для строки "Да, нет, да, нет." REGEX вернёт "Да".
Для строки "Да, нет, нет." REGEX вернёт "нет".
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

radius

Огромное спасибо, на первый взгляд - это то что нужно. Позже начну работать и отпишусь.