FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Jag har en tabell som har ett textfält som innehåller ca 40-50 ord per rad. Varje sådant fält innehåller ord som är typiska för en textkategori och varje rad representerar alltså en sådan kategori. Jag vill kunna klassificera texter genom att se hur många av orden i varje textfält i databasen som finns i texten jag vill klassificera eller använda någon annan sorts jämförelsealgoritm av den oklassificerade texten och varje textfält i databasen. Något sorts rankingsystem får sedan bestämma vilken kategori den nya texten tillhör.
Det finns ju olika strängjämförelsefunktioner i php och man skulle ju kunna tänka sig att bara iterera över hela kategoritabellen (ca 100 rader) och jämföra den oklassificerade texten med varje textfält i databasen. Då sker ju själva strängjämförelsen i php och inte i MySQL och fördelen är att man då även kan bygga ihop sin egen jämförelsealgoritm. Skulle det gå att använda MySQL:s fulltext-sökning eller någon strängjämförelsealgoritm som finns i MySQL? Kan man stoppa in hela den oklassificerade texten (hundratalet ord och med stopp-ord borttagna) i en SQL-fråga eller blir det för mycket för MySQL? Ordföljden spelar ingen roll för mig men är det något som MySQL tar hänsyn till vid fulltext-sökning? En annan approach skulle ju vara att ha en tabell med ett ord per rad och sedan iterera över alla ord och se vilka som förekommer i den nya texten, men då är det ju 5000 ord som skall kollas, kanske lite väl många? Någon som gjort något liknande? Hur gjorde ni? |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Flitig postare
|
Jag skulle lösa detta i PHP eftersom det är mer skalbart.
|
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Mycket flitig postare
|
Om du har en en tabelle med ett ord per rad behöver du inte (själv) iterera över den. En SQL fråga löser det.
Kod:
SELECT kategori_id, COUNT(*) as cnt FROM words WHERE 0 != INSTR(din_text, word) GROUP by kategor_id order by cnt DESC |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Flitig postare
|
Citat:
/Andreas |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Mycket flitig postare
|
INSTR är sannolikt en ganska billig operation. Att hitta substrängar är ganska enkelt och effektivt att implementera rent algoritmmässigt. Och antingen gör du jobbet i databasen eller i ditt PHP-script. Generellt sett är databasen att föredra skulle jag säga, men exakt vet du inte förrän du testat båda varianterna.
|
||
![]() |
![]() |
Svara |
|
|