Estou tentando categorizar/classificar uma lista combinando determinadas strings. Anteriormente, não consegui encontrar uma solução, então espero que seja mais fácil.
Lista de exemplos:
[A]
The apple is the pomaceous fruit of the apple tree
Apples grow on deciduous trees which are large if grown from seed
Apples are an important ingredient in many desserts, such as apple pie
Puréed apples are generally known as apple sauce
A banana is an edible fruit produced by several kinds of large plants
Worldwide, there is no sharp distinction between "bananas" and "plantains"
The term "banana" is also used as the common name for the plants
Orange is the colour of saffron, pumpkins and apricots
The colour orange is named after the appearance of the ripe orange fruit
In ancient Egypt, artists used an orange mineral pigment called realgar
Apple, orange and banana smoothie
Eating an orange and banana exceed allowable sugar intake
Kale or borecole (Brassica oleracea Acephala Group) is a vegetable
Until the end of the Middle Ages, kale was one of the most common green vegetables
Strings sendo procuradas e como serão categorizadas (sem distinção entre maiúsculas e minúsculas):
Apple = Apple
Apple Pie = Dessert
Banana = Banana
Orange = Orange
(anything not categorized) = Vegetables
(multiple found strings) = Multiple --> if this isn't possible it's fine
Aqui está o que a coluna ao lado da lista pode dizer:
[B]
Apple
Apple
Pie
Apple
Banana
Banana
Banana
Orange
Orange
Orange
Multiple
Multiple
Vegetables
Vegetables
E então eu usaria classificação/filtro. Obrigado!
Responder1
Eu resolveria isso com o suplemento Power Query. São necessárias algumas etapas para chegar lá, mas nenhum código ou alterações na estrutura de dados de entrada são necessários.
Eu construí um protótipo que você pode visualizar ou baixar - sua "demonstração do Power Query - pesquisando uma lista de palavras-chave e categorizando" no meu One Drive:
https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398
Basicamente, minha técnica era construir uma consulta preliminar para carregar a lista de categorias e atribuir uma chave de mesclagem fictícia e, em seguida, mesclar isso com o texto a ser pesquisado usando uma chave de mesclagem fictícia. Isso produz uma linha para cada linha de entrada x cada categoria. Em seguida, calculei a categoria usando a função Text.Contains e, finalmente, usei Group By para retornar ao conjunto original de linhas.
Nesse ponto você tem uma tabela normalizada que é ideal para exploração filtrando ou usando uma Tabela Dinâmica e/ou Gráfico Dinâmico.
Responder2
O fato de você querer que ele seja dinâmico E hierático (a torta de maçã tem precedência sobre a maçã) torna isso um pouco difícil, mas se você estiver disposto a programá-lo estaticamente, poderá fazer algo assim:
Row 1 - Your search text
Row 2 - Your result text
B1=Apple
B2=Apple
B3=If(Len($A2)>LEN(SUBTITUTE(LOWER($A2),LOWER(B$1),"")),B$2,"")
C1=Apple Pie
C2=Deserts
D1=Orange
D2=Orange
Drag B3 across and down
O que você está fazendo é substituir as ocorrências de “maçã” por nada e depois contar as letras para ver se há menos que o original. Normalmente esta é uma operação que diferencia maiúsculas de minúsculas, mas usei letras minúsculas em ambos os textos que estou comparando primeiro. Isso gerará o texto do resultado em cada coluna se houver uma ocorrência no texto de pesquisa dessa coluna.
Para incorporar a hierarquia você pode alterar a coluna B para IF(LEN(C2)>0,"",NORMAL FORMULA), para que a coluna não diga APPLE se a coluna C já tiver um valor. FÓRMULA NORMAL sendo apenas a fórmula B3 acima.
Então você poderia usar uma contagem para medir quantos acessos você tem
=IF(COUNTA(B2:D2)=0,"Vegitables",IF(COUNTA(B2:D2)>1,"Multiple",B2&C2&D2))
Se houver 0 correspondências, vegetais, se forem múltiplas, então múltiplas, caso contrário você terá apenas um campo preenchido para que possa obter sua resposta final concatinando os resultados.
Além disso, criei uma fórmula que apenas pega uma lista dinâmica e calcula quantos acessos você tem. Esta é uma função de array, então você terá que digitá-la sem o {} e, em vez de pressionar enter, pressione ctrl+shift+enter
{=SUM(--(LEN(A2)-LEN(SUBSTITUTE(LOWER(A2),LOWER($F$1:$F$6),""))>0))}
Isso falha como faria com qualquer coisa que contenha "torta de maçã", uma vez que contém maçã e torta, mas vence, pois pode funcionar com base em uma lista dinâmica fornecida na coluna F.