Как выделить дублирующиеся слова в libreoffice

Автор aleksklime, 24 марта 2022, 07:55

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

aleksklime

Добрый день. Нужно выделить дублирующиеся слова в ячейках и вынести их в отдельную ячейку.
Например ячейка B1 со значением Уличные светильники, Ячейка B2 со значением Уличные светодиодные светильники, Результат ячейка B3 Уличные светильники. И желательно в ячейках В1 и В2 что бы слова выделялись (но это не обязательно)

economist

Описание задачи - неполное. Нужно ли в B3 Уличные светильники если:

1)  Уличные светильники и Уличный светодиодный светильник (разные словоформы)
2)  Уличные светильники и уличные светодиодные светильники (разный регистр)

Ответ прольет свет на то как именно рождаются подобные расхождения аналитики, и как с ними можно (в т.ч. превентивно) бороться. И еще важно сколько строк должно проверяться и как часто, при 20k+ стоит подумать об использовании "стероидов" в Calс (макросов или, скажем, Python+Pandas).
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

aleksklime

Цитата: economist от 24 марта 2022, 08:58
Описание задачи - неполное. Нужно ли в B3 Уличные светильники если:

1)  Уличные светильники и Уличный светодиодный светильник (разные словоформы)
2)  Уличные светильники и уличные светодиодные светильники (разный регистр)

Ответ прольет свет на то как именно рождаются подобные расхождения аналитики, и как с ними можно (в т.ч. превентивно) бороться. И еще важно сколько строк должно проверяться и как часто, при 20k+ стоит подумать об использовании "стероидов" в Calс (макросов или, скажем, Python+Pandas).

Словоформы можно не учитывать их там не будет. Регистр то же не важен.

bigor

Хотелось бы видеть пример строк на 10
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

aleksklime


eeigor

#5
Выполните эту задачу в Excel: там есть надстройка Fuzzy Lookup для этого.

Правда, это больше для сравнения...

Edit:
Однако Николай Павлов предлагает функцию (Excel), которая может быть полезна для данной задачи. Тему следует перенести в раздел BASIC.

Если добавить:
    Option VBASupport 1
то будет работать без переделки.

Function FuzzyLookup(Lookup_Value As String, Tbl As Range) As String
Dim cell As Range, txt As String, p As Integer, pos As Integer, maxp As Integer, maxstr As String

   For Each cell In Tbl    'перебираем все ячейки в таблице
       txt = cell
       p = 0
       For i = 1 To Len(Lookup_Value)  'проходим по символам в искомом тексте
           pos = InStr(1, txt, Mid(Lookup_Value, i, 1), vbTextCompare)   'ищем вхождение
           If pos > 0 Then
               p = p + 1       'увеличиваем счетчик совпадений
               txt = Left(txt, pos - 1) & Right(txt, Len(txt) - pos)   'убираем найденный символ из текста
           End If
       Next i
       If p > maxp Then    'запоминаем наилучшее совпадение
           maxp = p
           maxstr = cell
       End If
   Next cell
   FuzzyLookup = maxstr
End Function


А вообще, это из области "Artificial Intelligence and Natural Language". Python решает такие задачи, а у Яндекса есть бесплатная библиотека, которая работает со всеми словоформами русского языка, устанавливая соответствие (склонения, падежи, мн. число - тогда роли не играют).
Но это непростая задача. И кто-то должен это реализовать.

Мой пример выше полезен, но для другой задачи.
Например, есть 2 списка: один с ошибками, второй верный. Ошибки легко найти (по максимальному совпадению), и заменить один текст на другой. Контроль глазами не отменяется.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

economist

Можно обойтись и без NLP, простой лемматизацией (обрезкой) до нормальной формы. Нужно ли "звать" на помощью Python+Pandas+FuzzyWuzzy итд  - мне не ясно, т.к. не озвучены объемы в строках.

Найти 1 строку в 10k и найти совпадающие 9к строк в 10к и 10к - совершенно разные задачи и инструменты.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...