Hur kan man räkna ord på svenska?

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Bollnäs
  • 2008-12-22 12:04

Nu sitter jag med ett lite irriterande problem. Jag försöker att räkna ord med str_word_count(), men i och med att den filtrerar bort alla tecken utanför a-z och 0-9 så blir det lite rumphugget resultat.

Jag har försökt att hitta någon enkel ersättare som tillåter hela UTF-8, men utan lycka.

Är man tvungen att ange samtliga tecken som ska tillåtas, eller kan man på något sätt utöka funktionen med en regular expression eller liknande?

Jag hittade ett förslag, men den tar inte med till exempel skiljetecken vilket gör att det faller rätt rejält om man vill skriva ut strängen som räknats efteråt.

define("WORD_COUNT_MASK", "/\p{L}[\p{L}\p{Mn}\p{Pd}'\x{2019}]*/u");

    function str_word_count_utf8($string, $format = 0)
    {
        switch ($format) {
        case 1:
            preg_match_all(WORD_COUNT_MASK, $string, $matches);
            return $matches[0];
        case 2:
            preg_match_all(WORD_COUNT_MASK, $string, $matches, PREG_OFFSET_CAPTURE);
            $result = array();
            foreach ($matches[0] as $match) {
                $result[$match[1]] = $match[0];
            }
            return $result;
        }
        return preg_match_all(WORD_COUNT_MASK, $string, $matches);
    }

Jag är väldigt osäker på regexp så ett tips på hur man kan utöka funktionen ovan så att den tar med allt i UTF-8 (eller åtminstone det mesta från Basic latin plus interpunktion) vore verkligen hjälpsamt.

Tack på förhand.

går det inte att använda explode?

$string = explode(" ", $otherString)

  • Oregistrerad
  • 2008-12-29 14:22
Ursprungligen av lill_postiZ:

går det inte att använda explode?

$string = explode(" ", $otherString)

Den räknar inte bara ord, utan lär ju ta med siffror, utropstecken etc. Gissar att trådskaparen bara vill få med ord även om jag inte tittade på WORD_COUNT_MASK så noga.

  • Medlem
  • Bollnäs
  • 2008-12-29 17:08
Ursprungligen av studiox:

Den räknar inte bara ord, utan lär ju ta med siffror, utropstecken etc. Gissar att trådskaparen bara vill få med ord även om jag inte tittade på WORD_COUNT_MASK så noga.

Syftet är att ta en textmassa (en variabel populerad med en artikel från en databas), hitta det mellanslag som ligger närmast mittpunkten och dela textmassan i två delar som sedan skrivs ut separat från varandra. Tanken är att dela en artikel i två spalter.

Allra bäst vore om HTML-kod kunde bortses från vid ordräknandet i och med att den inte kommer att visas vid utskriften, men det är inte nödvändigt.

Hmm...

Men jag förmodar att du vill att vänsterspalten ska vara den längre (om de inte går alldeles jämt upp) så kan du helt enkelt inte dela strängen i två delar, leta efter det första mellanslaget via stripos i substring 2 och ta all text fram till det. Därefter konkatenera substring 1 + den del av substring2 som är fram till mellanslaget, som får utgöra spalt 1, därefter går resten över till spalt två etc.

1
Bevaka tråden