Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

Videoannonse
Annonse

Jepp, jeg hopper over alle tall som ikke skal skrives. Og gjør det på en veldig prosedyreorientert måte som er passende for oversetting til delphi.

Apropos prosedyrelignende løsning.

 

<?php

$input1 = "0,2,4,5,6,7,8,9,10,15,16,17,18,19,20,25,26,30";
$input2 = "0,3,4,5,6,7,8,9,10, 15,16,17,18,19,20";

function groupBySeq(array $input) {
  $data = $input;
  $result = [];

  // Group each item together with previeous. Result => [[0,0], [0,2], ..]
  array_unshift($data, 0);
  $gwprev = [];
  for($i=1, $l = count($data); $i < $l; $i++) {
    $gwprev[] = [$data[$i-1], $data[$i]];
  }

  // Group each sequences. Result => [[0],[2,3,4, ..]]
  $tmp = [];
  foreach($gwprev as $value) {
    // Slice group before this.
    if (($value[0]+1) < $value[1]) {
      $result[] = $tmp;
      $tmp = [];
    }
    $tmp[] = $value[1];
  }
  // Add the remaining from $tmp.
  if (!!count($tmp)) {
    $result[] = $tmp;
  }

  return $result;
}

function messWithStrings($input) {
  $result = [];
  $data = preg_split('/\D+/', $input);
  $grouped = groupBySeq($data);
  foreach($grouped as $g) {
    if (count($g) > 1) {
      $result[] = sprintf('%s..%s', reset($g), end($g));
    } else {
      $result[] = $g[0];
    }
  }
  return join(',', $result);
}

var_dump(messWithStrings($input1)); // string(26) "0,2,4..10,15..20,25..26,30"
var_dump(messWithStrings($input2)); // string(14) "0,3..10,15..20"
Lenke til kommentar

Vel, nå har jeg gjort løsningen to ganger med samme framgangsmåte. Finne en måte å gruppere tallrekken etter sekvens. [1,2,3,10,11,12] => [[1,2,3], [10,11,12]]. Resten er bare detaljer. Såvidt jeg klarer å lese så ser det ut til at snippsnapp gjør det samme. Jeg er usikker på syntaksten med python, men dog. Lync ser ut til å gjøre noe lignende? Har virkelig ingen anelse om haskell, men det ser ut som ett lignende mønster om jeg kniper igjen øynene, snurrer stolen to ganger, og myser en stund på koden. Det ser ut som at Emancipate lager en annen datastruktur, bare tar vare på ende-numrene i hver sekvens.

Det stemmer. Jeg traverserer listen og lagrer tupler med ranges. foldr tar seg av selve traverseringen, så jeg trenger bare spesifisere hva som skal gjøres per element. [1,2,3,5,10,11,12] => [(1,3), (5,5), (10,12)]. mkstr er kun print - du får resultatet fra mkgroup alene.

 

Det er rimelig enkelt å oversette det til å bruke mer spesialiserte ikke-tuple-typer i stedet, men det har liten hensikt for dette eksempelet.

Endret av Lycantrophe
Lenke til kommentar
  • 2 måneder senere...

Noen her som har drevet på med prosessering av naturlig språk på norsk her? er det veldig forskjellig i fra engelsk? Vet at det er ganske vanlig å bruke regex for å dele filtre ut ord/pre prosessere tekster for at den skal være enklere å jobbe med i sammenheng med machine learning.

 

Men norskt språk er jo ganske forskjellig fra engelsk, samskriving, formatering av desimaltall, datoer. Noen som vet om det finnes noen regex motorer for norsk naturlig språk?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...