[SQL] Uit meerdere velden de dichtsbijzijnde match vinden

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
Hoi tweakers!

Ik ben bezig met een script die teksten met elkaar vergelijkt. Nu heb ik een aantal eigenschappen van de teksten die met elkaar vergeleken moeten worden.

Nu heb ik deze query:
code:
1
SELECT books_nl.*, ABS(zinlengte - '$closest_zinlengte') AS diff FROM books_nl ORDER BY diff ASC LIMIT 5


Dit werkt prima en ik krijg netjes een rij met teksten die dezelfde zinlengte hebben. Wat ik nu graag wil is meerdere variabelen aan de query toevoegen. Dus alleen teksten die het meest matchen op 3 a 4 punten.

Ben erg benieuwd hoe dat gaat! Google heeft het me helaas niet kunnen vertellen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ben jij niet gewoon op zoek naar zaken als een Full Text Search, Stemming, SoundEx of Levenshtein distance? Wat wil je precies bereiken? Het lijkt me dat je suggesties van boeken a.d.h.v. bep. criteria wil doen ofzo?

[ Voor 60% gewijzigd door RobIII op 05-10-2009 18:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
RobIII schreef op maandag 05 oktober 2009 @ 18:30:
Ben jij niet gewoon op zoek naar zaken als een FullText search, SoundEx of Levenshtein distance? Wat wil je precies bereiken?
In de database staat dit:

http://i37.tinypic.com/2n6s77.jpg

De bedoeling is dat er een tekstje word ingevoerd. Een script kijkt dan hoelang de zinnen gemiddeld zijn en uit hoeveel karakters het gemiddelde woord bestaat.

Dus bijvoorbeeld 5 woorden per zin en elk woord bestaat uit gemiddeld 7 karakters. Nu wil ik in de database zoeken naar een tekst die het meest overeen komt met 5 woorden per zin en 7 karakters per woord.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mag ik vragen wat het (wat minder abstracte) doel is? Ik zie hier namelijk totaal geen nut van :P Dat vraag ik omdat ik aan m'n water voel dat je moeilijk(er) bezig bent dan nodig is. Maar ik kan er natuurlijk langs zitten :P

offtopic:
Waarom heb je nederlandstalige veldnamen en dan weer opeens engelse? ;)

[ Voor 29% gewijzigd door RobIII op 05-10-2009 18:41 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
RobIII schreef op maandag 05 oktober 2009 @ 18:39:
Mag ik vragen wat het (wat minder abstracte) doel is? Ik zie hier totaal geen nut van :P
offtopic:
Waarom heb je nederlandstalige veldnamen en dan weer opeens engelse? ;)
Haha ja ik zit op een kunstacademie. Dit is een opdracht waar ik mee bezig ben. Ik heb altijd moeite met consistente veldnamen maken, maar daar heb ik zelf nooit zoveel hinder van :+.

Maar is het wel mogelijk om bovenstaande query uit te breiden?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
A.Kebab schreef op maandag 05 oktober 2009 @ 18:42:
Haha ja ik zit op een kunstacademie. Dit is een opdracht waar ik mee bezig ben. Ik heb altijd moeite met consistente veldnamen maken, maar daar heb ik zelf nooit zoveel hinder van :+.
Ah. Niet echt concreet "veldwerk" dus maar abstract kunst projectje :+ Dat verklaart waarom ik 't nut niet zie :+
A.Kebab schreef op maandag 05 oktober 2009 @ 18:42:
Maar is het wel mogelijk om bovenstaande query uit te breiden?
Uiteraard. Gebruik criteria in combinatie met And's, Or's en whatevers in een WHERE clause ofzo. Ik snap nog steeds je vraag niet en waarmee je de query dan uit wil breiden? Wat versta jij onder "dichtsbijzijnde match" bijvoorbeeld?

[ Voor 5% gewijzigd door RobIII op 05-10-2009 18:49 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
RobIII schreef op maandag 05 oktober 2009 @ 18:46:
[...]

Ah. Niet echt concreet "veldwerk" dus maar abstract kunst projectje :+ Dat verklaart waarom ik 't nut niet zie :+


[...]

Uiteraard. Gebruik criteria in combinatie met And's, Or's en whatevers in een WHERE clause ofzo. Ik snap nog steeds je vraag niet en waarmee je de query dan uit wil breiden?
SELECT books_nl.*, ABS(zinlengte - '$closest_zinlengte') AS diff FROM books_nl ORDER BY diff ASC LIMIT 5

Bij bovenstaande vergelijkt hij alleen maar de zinlengte. Wat ik graag wil is dat hij kijkt van welk boek de zinlengte en woordlengte overeenkomt.

dus je hebt
woordlengte: 7
zinlengte: 5

en in de database staan geen teksten met precies woordlengte 7 en precies zinlengte 5. Dus moet ik een boek selecteren die daar het dichtst bij ligt.

Edit:

Ah ik ben eruit! T was simpeler dan gedacht.

code:
1
SELECT books_nl.*, ABS(zinlengte - '$closest_zinlengte') AS diff, ABS(wordlength - '$closest_zinlengte') AS diff2 FROM books_nl ORDER BY diff, diff2 ASC LIMIT 5

[ Voor 11% gewijzigd door A.Kebab op 05-10-2009 19:23 ]


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Als je het doel kent, dan is de vraag duidelijk. Woord- en zinlengte is redelijk constant per auteur, maar verschillend tussen auteurs. Je kunt die maat dus gebruiken als een schatting voor de kans dat twee stukken tekst door dezelde auteur zijn geschreven.

Het antwoord op je oorspronkelijke vraag is overigens: "niet met SQL en tekst blobs".

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
MSalters schreef op maandag 05 oktober 2009 @ 19:51:
Als je het doel kent, dan is de vraag duidelijk. Woord- en zinlengte is redelijk constant per auteur, maar verschillend tussen auteurs. Je kunt die maat dus gebruiken als een schatting voor de kans dat twee stukken tekst door dezelde auteur zijn geschreven.

Het antwoord op je oorspronkelijke vraag is overigens: "niet met SQL en tekst blobs".
De opdracht was: maak een filter.

Ik heb een filter gemaakt waar je een tekst instopt en een auteur uitkrijgt. die auteur komt technisch gezien het meest met jouw schrijfstijl overeen. Ik denk dat ik het met sql toch een aardig eind heb gered.

Het zou redelijk ondoenbaar zijn om het handmatig te gaan doen.

De blobs zijn trouwens de ebooks die ik het geanalyseerd.

[ Voor 5% gewijzigd door A.Kebab op 05-10-2009 22:31 ]


Acties:
  • 0 Henk 'm!

  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
Misschien heb je hier iets aan. Vind het wel interessante materie: compressie gebruiken om de taal of auteur te achterhalen. http://arstechnica.com/news/posts/1013594411.html
Pagina: 1