• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Teksten vergelijken tussen 2 verschillende cellen met percentuele match?

Status
Niet open voor verdere reacties.

bgerco

Gebruiker
Lid geworden
10 okt 2007
Berichten
64
Ik heb een probleem met een formule in Excel waar ik niet uitkom. Hopelijk kan iemand mij hiermee helpen.
Ik wil graag 2 cellen met elkaar vergelijken of er overeenkomstige woorden in terugkomen. Het liefste zou ik een soort percentuele match willen zien tussen deze 2 cellen. Ik heb een voorbeeld in de bijlage toegevoegd.

Ik wil verschillende data kunnen importeren in kolom C, waarbij hij dan altijd gaat vergelijken of de teksten die in kolom A staan overeenkomen met kolom C. Ik wil graag weten of de woorden die gescheiden zijn door een spatie in een cel in kolom A, voorkomen in een gezamelijke unieke regel in kolom C.

Voorbeeld; Cel A1; 4Y FT Temp Transmitter
Cel C428; 1J FT Temp Transmit.
Cel C4500; 4Y FT Temp Trans.

Ik wil weten wat het hoogste percentage qua overeenkomst is. woorden die gescheiden zijn door een spatie moeten vergeleken worden. Met andere woorden cel C428 matcht 50% met Cel A1, C4500 matcht 75% met Cel A1. de hoogste match in dit geval is 75% en dat wil ik dan ook terug zien achter cel A1. Is er iemand bekend met dit soort zoekfuncties in excel en het vergelijken van tekst op deze manier?

All help would be very much appreciated!

Groeten Gerco
 

Bijlagen

Ter informatie, ik heb mijn kennis over dit onderwerp opgedaan op;

http://www.mrexcel.com/pc07.shtml

Hier praten ze over een mogelijke fuzzy match. Dit is wat ik ook wil doen, alleen ik krijg het niet werkend naar mijn situatie.
 
Wat als er 2 items zijn?

Voorbeeld; Cel A1; 4Y FT Temp Transmitter
Cel C428; 1J FT Temp Transmit.
Cel C4500; 4Y FT Temp Trans.
Cel C100; 3Y FT Temp Transmitter

In deze situatie zijn c100 en c4500 evenveel waard. Het verschil tussen een "echte" fuzzy compare en een woorden compare is dat de granulariteit een stuk slechter is. Bij een fuzzy search wordt C100 gekozen.
 
Gehele woorden (of alle tekst die tussen twee spaties staat) vergelijken is al een hele klus, maar zou wellicht nog te doen zijn. Als je ALLES moet vergelijken (woorden waarvan alleen de eerste letter overeenkomt vormen bv. ook een overeenkomst), dan ben je wel even bezig.
 
Het gaat alleen om de tekst die tussen 2 spaties staat. Het is inderdaad een hele klus, maar die fuzzy match waar ze over praten op de website die ik eerder stuurde, die suggereert dat dit wel mogelijk is. Alleen ik krijg die VBA code die zij gebruiken niet aan de praat.
 
Wat als er 2 items zijn?

Voorbeeld; Cel A1; 4Y FT Temp Transmitter
Cel C428; 1J FT Temp Transmit.
Cel C4500; 4Y FT Temp Trans.
Cel C100; 3Y FT Temp Transmitter

In deze situatie zijn c100 en c4500 evenveel waard. Het verschil tussen een "echte" fuzzy compare en een woorden compare is dat de granulariteit een stuk slechter is. Bij een fuzzy search wordt C100 gekozen.

Ik settel voor elke werkbare optie! Als ik die fuzzy compare maar aan de gang krijg qua VBA Scripting..
 
let wel dat een volledige fuzzy match met deze lijst meerdere minuten zou duren. De woord vergelijking gaat wel sneller, maar duurt nog steeds een tijdje. De basis van de code is een aantal lussen.

Ik heb er een scriptje overheen gehaald, maar de correlatie tussen de twee lijsten is nagenoeg 0.

Het dichtstbijzijnde bij: "4Y Electr Motor Protective Devices Test" is "JAARLIJKSE TEST AARDGAS VERBRANDINGSMOTO"

met een score van 1 op test en een score van 0,5 omdat er een overeenkomst is tussen motor en verbrandingsmoto. Ik vraag me dus af wat je hier mee op gaat schieten eerlijk gezegd.
 
let wel dat een volledige fuzzy match met deze lijst meerdere minuten zou duren. De woord vergelijking gaat wel sneller, maar duurt nog steeds een tijdje. De basis van de code is een aantal lussen.

Ik heb er een scriptje overheen gehaald, maar de correlatie tussen de twee lijsten is nagenoeg 0.

Het dichtstbijzijnde bij: "4Y Electr Motor Protective Devices Test" is "JAARLIJKSE TEST AARDGAS VERBRANDINGSMOTO"

met een score van 1 op test en een score van 0,5 omdat er een overeenkomst is tussen motor en verbrandingsmoto. Ik vraag me dus af wat je hier mee op gaat schieten eerlijk gezegd.

Het kan kloppen dat de resultaten uit de voorbeeldsheet bijna gelijk zijn aan 0, want dit zijn lang niet alle data velden natuurlijk. Het doel is om te kunnen vergelijken of de teksten overeenkomen, in een willekeurige volgorde om zo te kunnen stellen of bepaalde activiteiten wel of niet uitgevoerd worden. Ik heb er geen problemen mee dat de fuzzy vergelijking een paar minuten zou duren, het vergelijk wordt ook niet dagelijks gemaakt. Hoe heb jij nu de vergelijking opgezet in excel als ik vragen mag?
 
Dit is de huidige code. De scoring is nog niet helemaal juist en er zitten nog wat kleine bugs in. Dus echt werkbaar is het nog niet helemaal

Code:
Sub t2()

Dim score As Double
Dim highscore As Double
Dim doel As Range
Application.ScreenUpdating = False
    For Each regel In Range([a2], [a60000].End(xlUp))
        highscore = 0
        For Each vergelijk In Range([c2], [c60000].End(xlUp))
            score = 0
            For Each blok In Split(regel.Value, " ")
                If UBound(Filter(Split(vergelijk.Value, " "), blok, True)) = 0 Then
                    score = score + 1
                Else
                    If Len(blok) >= 5 Then
                        temp = blok
                        temp = "*" & Mid(temp, 2, Len(temp) - 2) & "*"
                        If vergelijk.Value Like temp Then
                            score = score + 1 - (1 / (Len(temp) - 3))
                            
                        End If
                    End If
                End If
            Next blok
            If score > highscore Then
                highscore = score
                Set doel = vergelijk
            End If
        Next vergelijk
        If highscore > 0 Then
            regel.Offset(0, 1).Value = doel.Value & "(" & highscore & ")"
        End If
    Next regel
Application.ScreenUpdating = True

End Sub
 
Laatst bewerkt:
Ik heb de score iets aangepast. In principe is het bruikbaar, maar de manier van scoren moet mogelijk in de praktijk nog wat geslepen worden.
 
Wampier, kun je mij het bestand toesturen hoe je het nu voor elkaar hebt gekregen? Tevens had ik nog 2 vragen, ten eerste over het maximum aantal woorden, dat ligt op 16 woorden (die door spaties gescheiden worden). Levert dit een probleem op in de geschreven code? En hoe heb je de scoring momenteel ingesteld, dan kan ik ook begrijpen hoe ik die bij kan stellen. erg bedankt voor je hulp tot zo ver in ieder geval!
 
Je kunt het script eenvoudig uit mijn post kopieren en in een lege module plakken. Lengte van de zinnen is niet echt relevant, tenzij je computer weinig geheugen heeft.

Score is op dit moment 1 punt voor een exacte match, wordt er geen exacte match gevonden dan wordt er een deelmatch gezocht. Bijvoorbeeld motor in "verbrandingsmotor". de waarde van die vondst is afhankelijk van het deelwoord. woorden kleiner dan 5 tekens worden niet gebruikt. Een deelmatch van 5 tekens is een score van 0,5. Een deelmatch van langere woorden is relatief meer waard. bijvoorbeeld "schoenveter" in het woord "schoenveters" is 0,91.
 
OK interessant, dat kan ik nog wel aanscherpen. Is er ook een mogelijkheid dat als er een match van 1 of lager is, hij dan geen waarde invult? Dan kan ik hier zeker mee uit de voeten! dus ik wil alleen de hits hoger dan 1 terug zien.

En kan de gevonden score ook in een andere kolom worden neergezet vanuit de code? Dat hij die gegevens niet achter elkaar plakt?
 
Laatst bewerkt:
De code daarvoor bevind zich allemaal in dit blokje:

Code:
        If highscore > 0 Then
            regel.Offset(0, 1).Value = doel.Value & "(" & highscore & ")"
        End If

Je kunt dat veranderen in "> 1". Op de 2de regel wordt de waarde van de match samengevoegd met "(highscore)" je kunt dat verwijderen of in een andere kolom toevoegen. Ik heb het er vooral bijgezet zodat ik kon zien hoe goed de code omging met matches.
 
Hallo, Ik kwam toevallig bij dit topic omdat ik zoek naar een programma of iets dergelijks om 2 tekstjes met elkaar te vergelijken en dan ook een procentuele overeenkomst te krijgen. Ik ben een leek op het gebeid van excel en al die formules dus ik vroeg me af of de formule die hier boven staat kan werken voor mijn probleem en hoe ik het precies moet gebruiken want dat snap ik niet.

Kort gezegt heb ik dus 200 stukjes tekst waar ik een overeenkomst tussen zoek, kan ik die allemaal in een keer vergelijken of moet ik dat 2 aan 2 doen? dat maakt me ook niet uit want het is iig veel sneller dan alles met de hand gaan tellen. De stukjes tekst bestaant uit ongeveer 50 woorden.

Ik hoor graag wat de mogelijkheden zijn, en zoals ik dus al zei dat programeren in excel snap ik niks van dus graag in beginners taal.
Bedankt!
 
Laatst bewerkt:
De code zoals die hier staat zoekt de beste match uit kolom 2 voor iedere regel in kolom 1. Of dit van toepassing is op je eigen situatie is aan de hand van de informatie die je nu geeft niet echt op te maken.

Als je eventueel een klein voorbeeldje zou kunnen toevoegen kunnen we dat wat beter beoordelen.
 
Hee,
bedankt voor je reactie, het zit eigenlijk zo ik ben op zoek naar een patroon, ik verwacht dat er grofweg 10 groepjes zijn van 20 teksten die op elkaar lijken, als ik dat weet dan hoef ik in principe alleen de 20 teksten met de eerste te vergelijken en te weten hoeveel die overeenkomen. Maar als ik er zo overnadenk, om erachter te komen of ze op elkaar lijken moet ik wel (Tekst1- Tekst2, Tekst1- Tekst3, Tekst1- Tekst4, Tekst2- Tekst3, Tekst2- Tekst5, Tekst3- Tekst4, etc) met elkaar vergelijken maar niet alle 200 want ik weet bijvoorbeeld dat tekst 1 tot 50 niet overeen kan komen met tekst 200.En de 200 bestaan uit 25 groepen van ieder ongeveer 8 tekstjes die ook al niet met elkaar vergeleken hoeven te worden. Het is als ik het zo lees lastiger dan ik dacht dus die uitzonderingen kan ik ook gewoon negeren. Het makkelijkste zou het zijn als ik 40 tekstje tegelijk met elkaar kan vergelijken en dan idd 1-2, 1-3, 2-3, etc. Het zou ook kunnen door 20 tekstjes aan de ene kant te hebben die dan dus niet met elkaar maar wel met alle andere. Ik weet niet of dat te doen is. Ik hoop dat het duidelijk is, als je nog vragen hebt hoor ik het graag.

ps. Als het alleen mogelijk of makkelijker is om tekst 1 met 200 andere te vergelijken(wat volgens mij het geval was hier)Bekijk bijlage excell.xlsx kan dat ook en doe ik dat zelf 200 keer:P hier van zie je in de bijlage een voorbeeld. Waar de procenten zijn de woorden die uit Kolom C overeenkomen met die uit Kolom A, voor tekst B is dat 49%.
 
tja, laten we wel wezen: excel is niet gemaakt / geoptimaliseerd voor dit soort toepassingen. het werkt wel, maar het is niet snel of ideaal ;)

Je geeft ook aan te zoeken naar een patroon. het vorige voorbeeld zoekt alleen naar woorden een deelwoorden. De volgorde waarin ze voorkomen wordt dus totaal genegeerd.

Als je alleen wil vergelijken hoeveel woorden van tekst A ook voorkomen in tekst B dan is dat redelijk makkelijk om te schrijven van het huidige voorbeeld. Patroonherkenning vraagt een heel andere aanpak en zou ik ook eigenlijk niet meer in excel doen.
 
ohh wacht je begrijpt me even verkeerd, dat patroon zoek ik tussen de teksten, dus niet in de teksten zelf. Dat patroon is meer bedoeld als in tekst A en dan lijkt tekst C het meest en dan tekst F en dan tekst B bijvoorbeeld. Dat staat in principe los van de woorden vergelijken.

Waar voer je dan die formule die hier al staat in en waar voer je dan de tekst in die vergeleken moet worden. Want zijn er wel andere programmas die het wel doen, Want wat ik zoek is dan eigenlijk een soort plagiaat programma, die geven ook de procentuele overeenkomsten.
Bedankt
 
Laatst bewerkt:
Nee, ik begrijp het juist goed :P

Het doel van de macro zoals die hier staat beschreven is zoeken op woorden. De volgorde is dus niet relevant. de score is puur gebaseerd op hoeveel woorden overeen komen. Ik was al "bang" dat je iets zocht qua pattern recognition. Dat is dus niet wat hier gebeurt.

Nu is het wel mogelijk om "fuzzy" matching te doen in VBA. Dit proces is echter zeer traag. De volgende link bevat relevante informatie:

http://www.mrexcel.com/forum/showthread.php?p=955137

Zoiets kan omgeschreven worden om hele woorden te gebruiken en de matching te doen op zin niveau in plaats van woorden, maar het is ingewikkeld en langzaam.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan