Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Извлечение ключевых сущностей используя VBA (http://forum.oszone.net/showthread.php?t=336746)

r-studio 18-09-2018 13:28 2831883

Извлечение ключевых сущностей используя VBA
 
Тело текста - это названия продуктов из чека (GOODS_NAME)
Я хочу сгруппировать любые похожие слова.

суть в том, что некоторые фразы имеют однокоренные слова и как бы ключевые слова.
Например вот документе
слово Макаронные изделия Макфа улитки флоу-пак 450 г. и подобное ему
Я нашел 7 строк с

Макароны макфа
Макароны макфа
Макароны макфа
Макароны макфа
Макароны макфа
Макароны макфа
Макароны макфа
(иногда транслит makfa, pechenie)


Я вручную нашел слова, у который похожие корни

если я делаю так, т.е. вложенный цикл для проверки уникальных / дублированных элементов., то получаю ошибку компиляции
Код:

for lRow = 1 to lLastRow
  sString1 = range("A" & lrow).value
  bFlag = false
  for lRow2 = lrow+1 to lLastRow
    sString2 = range("A" & lrow2).value
    if sstring1 = sstring2 then
        bflag = true 'values match
        'do something with matching values
        exit for
    end if
  next lrow2
next lrow

Как мне правильно выделить одинаковые слова.
При этом я понимаю, что идеального кода тут и быть не может, т.е. как Я он не сделает, ну хотя бы приблизительно.

a_axe 18-09-2018 22:48 2831957

Цитата:

Цитата r-studio
Как мне правильно выделить одинаковые слова. »

На форуме это обсуждалось много раз: какие слова считать похожими? Наименования "Творог деревен." и "Колбаски деревен." - похожи (если нет - как об этом должен узнать алгоритм)? Как быть с предлогами и сокращениями: "сосиски с сыром", "паштет из печени" - они встретятся в "салями" и "газета известия" и т.д. Как быть, если в наименовании встретятся одновременно два разных ключевых слова? Чем "Makfa" похожа на "Макфа" и т.д.
Цитата:

Цитата r-studio
то получаю ошибку компиляции »

Приложите скрин этой ошибки и укажите, на какую строку ругается. Вы приложили кусок кода, скопируйте его целиком. У меня на ваш отрывок ошибок не выскакивало.
Цитата:

Цитата r-studio
Например вот документе »

Код явно написан не под этот документ - он сравнивает ячейки первого столбца, точнее - их значения целиком. Предполагается, что вы для каждой ячейки будете указывать ключевые слова вручную? Тогда их можно отфильтровать, или использовать штатные функции excel для подсчета вхождений. Если ключевые слова должен определять код, то это сложная задача, с точки зрения алгоритма.

А решения, обсуждавшиеся на форуме раньше, под вашу задачу не подходят?

r-studio 19-09-2018 12:53 2832026

a_axe,


Код:

Option Explicit

Public Sub FindDuplicates()

Dim lRow As Long
Dim lRow2 As Long
Dim lLastRow As Long
Dim sString As Long
'This use of capitalisation is called 'camel case' - and is good for lots of reasons
' using lots of comments like this helps you to understand your code later

lastrow = ActiveSheet.UsedRange.Rows.Count
For lRow = 1 To lLastRow
  sstring1 = ActiveSheet.Range("A" & lRow).Value
  If sstring1 <> "" Then 'cell is not blank - proceed with test
  For lRow2 = lRow + 1 To lLastRow
    sstring2 = Range("A" & lRow2).Value
    If sstring1 = sstring2 Then
        bflag = True 'values match
        'do something with matching values
        ActiveSheet.Range("A" & lRow2).Interior.ColorIndex = 3  'mark cells with red background fill
        'you could also activesheet.range("A" & lrow2).clearcontents 'to delete values
    End If

    Next lRow2
  End If
Next lRow


If bflag = False Then MsgBox ("no duplicate values found")

End Sub

screen


Цитата:

Цитата a_axe
(если нет - как об этом должен узнать алгоритм)? »

Хорошие вопросы.
1. А можно ли сделать в алгоритме сличение, например, говоря бытовым языком, не является ли транслит в данном случае MAKFA МАКФОЙ
2. Макар и Макароны, ну тут по корню,
Цитата:

Цитата a_axe
"Творог деревен." и "Колбаски деревен." »

Цитата:

Цитата a_axe
"Творог деревен." и "Колбаски деревен." »

дело в том, что в списке будет
твор деревен
творог дер
твор дереве
итак далее тво + дер
тут ключевое твор
а также

колбаса деревен
колб деревен
колб дер
колбас дере
и так далее

т.е. для таких фраз надо увидеть ключевое колб+дер

это можно сделать?
Цитата:

Цитата a_axe
Предполагается, что вы для каждой ячейки будете указывать ключевые слова вручную? »

сравнивать вручную я не хочу в том и дело. Я просто как пример привел
Цитата:

Цитата a_axe
под вашу задачу не подходят? »

проблема в том, что я не с экселем буду работать, я его как пример привел
исходные данные миллионы строк в txt

C:/чек.txt
он оттуда должен брать, т.е. я создам эксель файл, помещу туда код макроса, а он уже будет работать с текстовым файлом
там (текстовый)и должна появится колонка тип товара , а сам файл, уже буду в sql импортировать
при том, безупречного определения я не жду.

a_axe 19-09-2018 13:39 2832032

r-studio, опция
Цитата:

Цитата r-studio
Option Explicit »

говорит о том, что переменные в вашем коде должны быть описаны через dim
lastrow у вас не описана (вместо этого - похожая переменная Dim lLastRow As Long), sstring1 и sstring2 тоже (должны быть - as string, у вас похожая переменная почему-то Dim sString As Long).
На это и ругается excel.

r-studio 19-09-2018 14:17 2832038

a_axe, Как мне правильно составть код исходя из тех требований, что я описал постом выше? Сможете помочь?

Iska 19-09-2018 14:53 2832046

r-studio, перед тем как составлять код, правильно или неправильно, попробуйте сформулировать алгоритм. Я его тут не вижу.


Время: 13:07.

Время: 13:07.
© OSzone.net 2001-