[php/mysql?]PDF search engine

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
Ik heb de opdracht gekregen een zoeksysteem te bouwen voor pdf's. Op de server komen rond de 3000 pdf's te staan met een totale grote van 5 a 6 gb. Nog geen idee waar deze website komt te draaien, intern of op internet of hoeveel deze ongeveer gebruikt gaat worden per uur/dag. Welk platform/server er voor gebruikt moet worden/beschikbaar is weet ik ook nog niet... (maar het enige wat ik een beetje ken is php en mysql)

Nog nooit zoiets gebouwd, maar ik zat te denken om de pdf om te zetten naar txt via het pdftotxt programma en dan deze met een mysql database in een longtext (of longblob?) veld op te slaan. Vervolgens deze een "full text"-index laten aanmaken. En dan via een "MATCH.. AGAINST.."-query op zoektermen gaan zoeken.

Is dat een goed idee? In longtext zou zo'n 4,2 miljard tekens passen, dat is dan zo'n 4 mb aan tekst. Eventueel kan elke pdf natuurlijk ook over meerdere records worden verspreid. Wordt dat niet te groot (inverband met de zoektijd), of kan MySQL dat makkelijk aan?

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 19:37

Gonadan

Admin Beeld & Geluid, Harde Waren
Moet er op letterlijke zinnen gezocht kunnen worden of op trefwoorden?
Anders kan je namelijk de woorden één keer op slaan, dat scheelt gegarandeerd ruimte. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

Anoniem: 34050

Is het niet makkelijker elk document een korte omschrijving te geven en een paar steekwoorden.
je de machine laat zoeken in steekwoorden, en de omschrijving. Dan zou je de pdf's met rust kunnen laten, tenzij het klant eis is dat de pdf zelf doorzoekbaar moet zijn.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:47

TeeDee

CQB 241

Afaik heeft Adobe ergens een PDF SearchFilter beschikbaar. Daar je nog niet exact weet wat voor platform zou je die kunnen gebruiken. Deze nestelt zich namelijk in de Indexing Service van Windows. Deze indexing service kan je vervolgens aanspreken.

Anders zou je eens tussen deze google zoek opdracht kunnen loeren.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
Er moet op hele woorden uit de pdf worden gezocht, dus op trefwoorden is niet genoeg.

Zal eens naar PDF SearchFilter gaan kijken. :)

Maar iig voor algemene interesse zou mijn idee uit mijn vorige post werken?

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 03-07 10:11

chem

Reist de wereld rond

Ik heb ooit zoiets in een half uurtje gebouwd met xapian+omega+een-of-andere-pdf-extractor.

Dat lijkt me beter werken dan een mysql backend.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-07 11:38

Janoz

Moderator Devschuur®

!litemod

Werken wel, maar of het efficient is is iets anders. Daarnaast zou ik, voor dat ik begin, eens enkele pdf's opvragen en deze door pdftotxt halen om te zien of er uberhaupt wel werkbare resultaten uitkomen.

Persoonlijk zou ik liever voor een kant en klaar oplossing gaan. Dit soort functionaliteiten zijn zo algemeen en veel gebruikt dat je hiervoor makkelijk een standaard oplossing kunt vinden die goedkoper is dan jou een week aan dit probleem laten werken.

Mocht je het toch zelf willen doen dan zou ik op zoek gaan naar een lucene achtig iets voor php of met trefwoorden.
Er moet op hele woorden uit de pdf worden gezocht, dus op trefwoorden is niet genoeg.
Wat Gonodan bedoeld is of het belangrijk is in welke volgorde de woorden staan (de zinnen dus) of dat je gewoon op alle woorden wilt zoeken. In het laatste geval kun je gewoon alle unieke woorden die je tegenkomt in je documenten in een tabel opslaan en deze middels een koppeltabel aan je documenten hangen.

Dit is een redelijk standaard manier voor het implementeren van een zoeksysteem. De fulltext search van Mysql ook zo, alleen heb je daar minder controle over en kan deze beperkingen hebben. Als je dat geen probleem vindt kun je die dus gewoon gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 22:06
Wat je dan wel krijgt als wanneer iemand geinteresseerd is in poesjes en als zoekwoord poesje opgeeft, niet de documenten te zien krijgt die enkel het woordt poes bevatten en niet poesje.
Volgens mij heeft MySQL wel zoiets als een soort match score wat je daarvoor kan gebruiken, ben zelf niet echt in MySQL, maar ik neem aan dat anderen op het forum dit wel weten.

Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 19:37

Gonadan

Admin Beeld & Geluid, Harde Waren
Janoz schreef op dinsdag 13 juni 2006 @ 11:44:
Wat Gonodan bedoeld is of het belangrijk is in welke volgorde de woorden staan (de zinnen dus) of dat je gewoon op alle woorden wilt zoeken. In het laatste geval kun je gewoon alle unieke woorden die je tegenkomt in je documenten in een tabel opslaan en deze middels een koppeltabel aan je documenten hangen.
Precies, dat scheelt ontzettend veel ruimte en het zoeken zal dan ook sneller gaan denk ik. :)
BestTested! schreef op dinsdag 13 juni 2006 @ 11:54:
Wat je dan wel krijgt als wanneer iemand geinteresseerd is in poesjes en als zoekwoord poesje opgeeft, niet de documenten te zien krijgt die enkel het woordt poes bevatten en niet poesje.
Volgens mij heeft MySQL wel zoiets als een soort match score wat je daarvoor kan gebruiken, ben zelf niet echt in MySQL, maar ik neem aan dat anderen op het forum dit wel weten.
Met LIKE kan je de meeste dingen wel vinden.
Maar als iemand inderdaad op poesje zoekt zal hij geen poes vinden.
Maar in welke zoekmachine werkt dat wel?
Ik vind dat de verantwoordelijkheid van de gebruiker.
De meeste mensen zullen alsnog poes proberen als poesje niets oplevert. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Mister_X
  • Registratie: Februari 2000
  • Laatst online: 17-04 14:07
Gonadan schreef op dinsdag 13 juni 2006 @ 12:50:
[...]

Precies, dat scheelt ontzettend veel ruimte en het zoeken zal dan ook sneller gaan denk ik. :)


[...]

Met LIKE kan je de meeste dingen wel vinden.
Maar als iemand inderdaad op poesje zoekt zal hij geen poes vinden.
Maar in welke zoekmachine werkt dat wel?
Ik vind dat de verantwoordelijkheid van de gebruiker.
De meeste mensen zullen alsnog poes proberen als poesje niets oplevert. :)
Like is opzich wel cool, maar FULL TEXT SEARCH zal misschien beter werken, dit is een definition die je op een veld in een tabel kan zetten, enige nadeel, als meer dan 50% van de content in dat veld 'hetzelfde' is, krijg je geen results terug, dont ask me why ..

voorbeeld: "WHERE/AND MATCH (veld1,veld2) AGAINST ($zoekterm)

Je kan natuurlijk ook combineren met like en text search... hoe, sja das jou opdracht? :)

meer info:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

en zie hier:
. In addition, words that are present in more than 50% of the rows are considered common and do not match.

[ Voor 14% gewijzigd door Mister_X op 13-06-2006 13:15 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-07 11:38

Janoz

Moderator Devschuur®

!litemod

Wanneer je je eigen implementatie maakt kun je naast je woorden tabel ook een synonymen tabel maken. In dat geval kun je poesje keurig aan poes, poezen, kat, kater en katten koppelen.

TOch ga ik nog steeds voor mijn eerdere voorstel en ga daarin dus mee met Chem. Zoek een passende redelijk kant en klaar oplossing. Zoekmachines zijn redelijk standaard en daarvoor zijn legio goeie en goedkope oplossingen te vinden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
Janoz schreef op dinsdag 13 juni 2006 @ 13:56:
Wanneer je je eigen implementatie maakt kun je naast je woorden tabel ook een synonymen tabel maken. In dat geval kun je poesje keurig aan poes, poezen, kat, kater en katten koppelen.
Maar dan zou je jaren bezig zijn om alle synonymen in te voeren voor alle woorden die in die pdf's voor komen. :?
Zal ook best ooit iemand gemaakt hebben gemaakt..

maar dat xapian+omega of PDf SearchFilter klinkt op eens een stuk aantrekkelijker. Daar ga ik me een in verdiepen..

Bedankt!

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 02-07 12:14
PsychoBoy schreef op dinsdag 13 juni 2006 @ 10:20:
Is dat een goed idee? In longtext zou zo'n 4,2 miljard tekens passen, dat is dan zo'n 4 mb aan tekst. Eventueel kan elke pdf natuurlijk ook over meerdere records worden verspreid. Wordt dat niet te groot (inverband met de zoektijd), of kan MySQL dat makkelijk aan?
Miljard komt overeen met gigabytes, niet mb.

Te groot qua zoektijd is een vraag die je zelf moet beantwoorden. Wat voor server gebruik je? Wat is een te lange zoektijd? Je kunt het uitproberen door test teksten in je database te stoppen en daarin te zoeken.

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 03-07 12:36

MaNdM

1000-dingen-doekje

Ik heb een dergelijke site onderhouden bij een vorige werkgever. Hier was het heel eenvoudig opgelost met een windows server. De PDFbestanden stonden in een mappenstructuur maar werden geïndexeerd door de indexing service van Windows zelf in een eigen catalog. Deze was geconfigureerd om die map te indexeren, "generate abstracts" stond aan en ook de tracking moet goed ingesteld worden. De indexing service kan PDFbestanden goed indexeren op inhoud en herindexeerd alles automatisch. Deze service kan je benaderen met een ASP pagina om in de index te zoeken. Op die manier heb je dus een locatie waar alle PDF's in kunnen staan en een automatische indexering met een goed zoekmechanisme erachter.

Als deze aanpak je interessant lijkt wil ik het wel wat gedetailleerder uitleggen en zelfs kijken of ik die ASPpagina nog aan kan komen voor je.

Edit:
Voor zover ik weet is die indexing service niet te benaderen met PHP helaas.

[ Voor 7% gewijzigd door MaNdM op 13-06-2006 17:07 ]

To be determined...


Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 22:40

NetForce1

(inspiratie == 0) -> true

Ik zou denk ik voor een lucene implementatie gaan, zoals Janoz ook al zegt. Zelf ben ik bekend met Lucene voor Java, het is erg snel en er is support voor zgn. stemming (poesje matched op poes). Voor php is er bijv. Zend Search. Onlangs heeft cnet hun searchengine op basis van Lucene (Solr) vrijgegeven. Dit is een soort webservices implementatie, er is iemand bezig om een php interface ervoor te schrijven, maar hoever dat allemaal is weet ik niet.
Voor het uitlezen van pdf's moeten ook er genoeg projecten zijn lijkt me, ik zag bijv. Zend pdf.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 21:37

AW_Bos

Liefhebber van nostalgie... 🕰️

Janoz schreef op dinsdag 13 juni 2006 @ 13:56:
Wanneer je je eigen implementatie maakt kun je naast je woorden tabel ook een synonymen tabel maken. In dat geval kun je poesje keurig aan poes, poezen, kat, kater en katten koppelen.

TOch ga ik nog steeds voor mijn eerdere voorstel en ga daarin dus mee met Chem. Zoek een passende redelijk kant en klaar oplossing. Zoekmachines zijn redelijk standaard en daarvoor zijn legio goeie en goedkope oplossingen te vinden.
Of gebruik de Stemming van Omega / Xapian...

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️

Pagina: 1