[PHP] proximity

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TvdW
  • Registratie: Juli 2007
  • Laatst online: 30-08-2021
Beste leden van Tweakers,

Voor een indexatie script van mijn "mijn muziek" ben ik titels aan het matchen (uit een database, 900 titels) uit een map (met submappen, totaal >10k mp3 bestanden).

Dit doe ik in PHP omdat dat makkelijker werkt. Nu heb ik helaas probleempjes :

"Guns N Roses-Knockin On Heavens Door.mp3"
Echter staat in mijn database : "Guns 'n Roses" en "Knockin' on heaven's door"

stristr() geeft natuurlijk terug dat ze niet matchen, al kan ik zelf natuurlijk zien dat ze wel matchen :P
Probleem is dat er te veel liedjes zijn die om deze reden niet matchen.

Heeft iemand hier een goede oplossing voor? Ik heb al heel wat geprobeerd en elke keer matcht 'ie hooguit 300 van de 900 titels.

mvg,
Tom

Acties:
  • 0 Henk 'm!

  • Frash
  • Registratie: Mei 2002
  • Laatst online: 13:28
similar_text() en evt. levenshtein() ;)

[ Voor 5% gewijzigd door Frash op 03-12-2008 21:25 ]


Acties:
  • 0 Henk 'm!

  • jeroenikke
  • Registratie: Augustus 2003
  • Laatst online: 21:26
Een werkende, maar niet zo mooie oplossing is om 2 keer te proberen matchen:
1 keer zoals jij doet
en
1 keer waarbij je eerst "-" vervangt door " - "

Alleen zal dit niet werken bij "Titel Met-Streepje-Artiest"


EDIT: Volledig verkeerd, ik dacht dat het probleem met het - was


met http://be.php.net/manual/en/function.preg-replace.php kan je reguliere expressies toepassen, dus alle quotes verwijderen.

[ Voor 32% gewijzigd door jeroenikke op 03-12-2008 21:29 ]


Acties:
  • 0 Henk 'm!

  • TvdW
  • Registratie: Juli 2007
  • Laatst online: 30-08-2021
Die 2 functies ken ik en ik heb ermee ge-experimenteerd, al heb ik er geen goed resultaat uit kunnen krijgen. Iemand tips hiervoor?
jeroenikke schreef op woensdag 03 december 2008 @ 21:25:
Een werkende, maar niet zo mooie oplossing is om 2 keer te proberen matchen:
1 keer zoals jij doet
en
1 keer waarbij je eerst "-" vervangt door " - "

Alleen zal dit niet werken bij "Titel Met-Streepje-Artiest"
Mijn huidige script negeert de streepjes en gaat direct door met het matchen van de titels :
code:
1
2
3
4
5
6
                            if (stristr($file, $song['artist'])) {
                                if (stristr($file, $song['song'])) {
                                    $found = true;
                                    break 2;
                                }
                            }

[ Voor 69% gewijzigd door TvdW op 03-12-2008 21:27 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik heb al heel wat geprobeerd
Wat dan? Zelf een algoritme geprobeerd uit te vinden en daarmee opnieuw het wiel, zoiets als "kijk hoeveel woorden in lower case zonder leestekens wel matchen"?
geen goed resultaat uit kunnen krijgen
Er beter gebruik van maken.

Probeer eens iets duidelijker te zijn met wat je wil, en wat je hebt geprobeerd om dat doel te bereiken.

[ Voor 31% gewijzigd door CodeCaster op 03-12-2008 21:28 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
jeroenikke schreef op woensdag 03 december 2008 @ 21:25:
Een werkende, maar niet zo mooie oplossing is om 2 keer te proberen matchen:
1 keer zoals jij doet
en
1 keer waarbij je eerst "-" vervangt door " - "

Alleen zal dit niet werken bij "Titel Met-Streepje-Artiest"
Dit is niet het probleem van de TS. Het probleem is dat "Guns 'n' Roses" niet matcht met "Guns N Roses".

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • TvdW
  • Registratie: Juli 2007
  • Laatst online: 30-08-2021
CodeCaster schreef op woensdag 03 december 2008 @ 21:26:
[...]

Wat dan? Zelf een algoritme geprobeerd uit te vinden en daarmee opnieuw het wiel, zoiets als "kijk hoeveel woorden in lower case zonder leestekens wel matchen"?

[...]

Er beter gebruik van maken.

Probeer eens iets duidelijker te zijn met wat je wil, en wat je hebt geprobeerd om dat doel te bereiken.
bijvoorbeeld similar_text die wel redelijk goed werkt, behalve :
"Live from 1992 concert: blablabla - naam.mp3"

Acties:
  • 0 Henk 'm!

  • jeroenikke
  • Registratie: Augustus 2003
  • Laatst online: 21:26
Ondertussen geëdit...

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

TvdW schreef op woensdag 03 december 2008 @ 21:29:
[...]

bijvoorbeeld similar_text die wel redelijk goed werkt, behalve :
"Live from 1992 concert: blablabla - naam.mp3"
Ja leuk, maar als jij verder niet zegt hoe je dit uitvoert... je kunt toch iets aan je gebruiker melden als "Geen exacte match gevonden, maar wel $bijna_match"?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • TvdW
  • Registratie: Juli 2007
  • Laatst online: 30-08-2021
CodeCaster schreef op woensdag 03 december 2008 @ 21:30:
[...]

Ja leuk, maar als jij verder niet zegt hoe je dit uitvoert... je kunt toch iets aan je gebruiker melden als "Geen exacte match gevonden, maar wel $bijna_match"?
er zit geen gebruiker achter: alles is geautomatiseerd om een database te "Reconnecten"

en om dan uit te gaan van "ongeveer".. is eigenlijk niet acceptabel.

Tom

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Dan zul je toch bijvoorbeeld het aantal matchende woorden moeten bijhouden, en zelf het best matchende resultaat kiezen.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • TvdW
  • Registratie: Juli 2007
  • Laatst online: 30-08-2021
CodeCaster schreef op woensdag 03 december 2008 @ 21:33:
Dan zul je toch bijvoorbeeld het aantal matchende woorden moeten bijhouden, en zelf het best matchende resultaat kiezen.
Ik zal eventjes kijken of dit principe werkt (beetje "weight"-achtig dus..)

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 20:47

BCC

Je kan natuurlijk ook een fingerprint van de muziek in de MP3 maken en die met elkaar gaan matchen :).
Volgens mij is dat de enige echt goede manier. Je kan immers nooit alle waanzinnige spelfouten van titels matchen.

[ Voor 36% gewijzigd door BCC op 03-12-2008 21:37 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • TvdW
  • Registratie: Juli 2007
  • Laatst online: 30-08-2021
BCC schreef op woensdag 03 december 2008 @ 21:35:
Je kan natuurlijk ook een fingerprint van de muziek in de MP3 maken en die met elkaar gaan matchen :).
Volgens mij is dat de enige echt goede manier. Je kan immers nooit alle waanzinnige spelfouten van titels matchen.
dus op het moment dat ik met een playlist aan kom (bijvoorbeeld de top 2000, ik noem maar wat) heb ik ook direct de crc hashes?

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 20:47

BCC

Nee, dat probeer ik duidelijk te maken: een lijst met slecht gespelde titels is nooit 100% te matchen met een andere lijst met slecht gespelde titels. Je kan hoogstens proberen een best guess te doen op basis van steekwoorden, crc, hashes of analyse van het geluid in de MP3 (indien mogelijk).

Wat het beste werkt ligt nogal aan de kwaliteit van de lijsten en de informatie die er beschikbaar is. En natuurlijk de regelmaat van de gemaakte fouten.

[ Voor 21% gewijzigd door BCC op 03-12-2008 21:43 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

Verwijderd

Tsja, als er dan een keer foutief "Guns 'N Rozes" staat ben je alsnog het bokje.
Ik zou kijken of je met similar_text() / levenshtein() kunt kijken wat het dichtste bij komt als je geen match hebt.

Acties:
  • 0 Henk 'm!

  • Zyppora
  • Registratie: December 2005
  • Laatst online: 12-09 10:59

Zyppora

155/50 Warlock

TvdW schreef op woensdag 03 december 2008 @ 21:32:
[...]

er zit geen gebruiker achter: alles is geautomatiseerd om een database te "Reconnecten"

en om dan uit te gaan van "ongeveer".. is eigenlijk niet acceptabel.

Tom
Als 'ongeveer' niet acceptabel is, zul je ervoor moeten zorgen dat de namen 1-op-1 overeen gaan komen, zodat je niet met 'ongeveer' hoeft te werken. Je zegt ongeveer 900 records te hebben (en dus 900 bestanden in je folder), dus als je daar een middagje aan besteedt, denk ik dat je een heel eind zult zijn dit te synchroniseren.

Maar da's natuurlijk monnikenwerk (of stagiairewerk, zoals we dat hier noemen). Je kunt ook met levenshtein() en similar_text() werken om bijv. te calculeren hoeveel de filenames verschillen met je database records, en bij bijvoorbeeld > 90% match, een prompt omhoog laten komen 'is dit het juiste bestand?'. Als je dan je record (of je bestand) door je script laat herschrijven, heb je daar bij de volgende run ook geen problemen meer mee.

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290

Pagina: 1