Показать полную графическую версию : Извлечение ключевых сущностей используя VBA
r-studio
18-09-2018, 13:28
Тело текста - это названия продуктов из чека (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
Как мне правильно выделить одинаковые слова.
При этом я понимаю, что идеального кода тут и быть не может, т.е. как Я он не сделает, ну хотя бы приблизительно.
Как мне правильно выделить одинаковые слова. »
На форуме это обсуждалось много раз: какие слова считать похожими? Наименования "Творог деревен." и "Колбаски деревен." - похожи (если нет - как об этом должен узнать алгоритм)? Как быть с предлогами и сокращениями: "сосиски с сыром", "паштет из печени" - они встретятся в "салями" и "газета известия" и т.д. Как быть, если в наименовании встретятся одновременно два разных ключевых слова? Чем "Makfa" похожа на "Макфа" и т.д.
то получаю ошибку компиляции »
Приложите скрин этой ошибки и укажите, на какую строку ругается. Вы приложили кусок кода, скопируйте его целиком. У меня на ваш отрывок ошибок не выскакивало.
Например вот документе »
Код явно написан не под этот документ - он сравнивает ячейки первого столбца, точнее - их значения целиком. Предполагается, что вы для каждой ячейки будете указывать ключевые слова вручную? Тогда их можно отфильтровать, или использовать штатные функции excel для подсчета вхождений. Если ключевые слова должен определять код, то это сложная задача, с точки зрения алгоритма.
А решения, обсуждавшиеся на форуме раньше (http://forum.oszone.net/post-2645169-7.html), под вашу задачу не подходят?
r-studio
19-09-2018, 12:53
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
(если нет - как об этом должен узнать алгоритм)? »
Хорошие вопросы.
1. А можно ли сделать в алгоритме сличение, например, говоря бытовым языком, не является ли транслит в данном случае MAKFA МАКФОЙ
2. Макар и Макароны, ну тут по корню, "Творог деревен." и "Колбаски деревен." »
"Творог деревен." и "Колбаски деревен." »
дело в том, что в списке будет
твор деревен
творог дер
твор дереве
итак далее тво + дер
тут ключевое твор
а также
колбаса деревен
колб деревен
колб дер
колбас дере
и так далее
т.е. для таких фраз надо увидеть ключевое колб+дер
это можно сделать?
Предполагается, что вы для каждой ячейки будете указывать ключевые слова вручную? »
сравнивать вручную я не хочу в том и дело. Я просто как пример привел
под вашу задачу не подходят? »
проблема в том, что я не с экселем буду работать, я его как пример привел
исходные данные миллионы строк в txt
C:/чек.txt
он оттуда должен брать, т.е. я создам эксель файл, помещу туда код макроса, а он уже будет работать с текстовым файлом
там (текстовый)и должна появится колонка тип товара , а сам файл, уже буду в sql импортировать
при том, безупречного определения я не жду.
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
a_axe, Как мне правильно составть код исходя из тех требований, что я описал постом выше? Сможете помочь?
r-studio, перед тем как составлять код, правильно или неправильно, попробуйте сформулировать алгоритм. Я его тут не вижу.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.