Avatar billede caspersch Nybegynder
19. november 2009 - 23:40 Der er 7 kommentarer og
1 løsning

function til analyse af tekst

Jeg søger nogle kode eksempler på en funktion som kan se en tekst igennem. Den skal se hvor mange gange et given sætning står i en given tekst. Den skal altså tælle antal mellemrum i en tekst.

Kan i hjælpe mig på vej?

Med venlig hilsen
Casper Schneider
20. november 2009 - 06:11 #1
PHP funktionen hedder substr_count().  For eksempel denne kode:

<?
$str = "Der kom en soldat marcherende hen ad landevejen.  Han havde et tornyster paa ryggen kom en soldat og en sabel ved siden kom en soldat, jo han var en rigtig soldat.";
echo substr_count($str, "kom en soldat");
?>

Den giver resultatet 3.

Hvis det skal vaere javascript saa fandt jeg paa http://www.webmasterworld.com/javascript/3646070.htm denne kode.  Paa mit system giver den svaret 4.  Hvis jeg aendrer fra '25' til ' 25 ' saa giver den resultatet 1.

<script type="text/javascript">
var _s = '25fdjkkjlafjkl25alksdfjaafdjk25sl'; // haystack
var _m = '25'; // needle
var _c = 0;
for (var i=0;i<_s.length;i++) {
if (_m == _s.substr(i,_m.length))
_c++;
}
alert(_c);
</script>
Avatar billede Slettet bruger
20. november 2009 - 08:55 #2
Bedre javascript-fætter:

var haystack = "25fdjkkjlafjkl25alksdfjaafdjk25sl"
var needle = "l"
var i = 0;
var c = 0

while ((i=haystack.indexOf(needle,i)+1))    c++

alert(c)

NB: Det sidste +1 gør at indexOf's -1 returværdi veksles til FALSE :)
Avatar billede caspersch Nybegynder
20. november 2009 - 10:04 #3
Hej T4nk3r,

Tak for det, så kom jeg lidt af vejen. Problemet med overstående funktion er:

Er needle avis: så vil avis blive fundet 3 gange "Avis: Køb ikke avisen i kiosken, bestil et avisabonnement". Reelt skal den fjerne alle special tegn, explode på " " (mellemrum), og se hvor mange af de ord avis er. Jeg havde en ide om det kunne laves med Reg.Exp. og en explode.

Vh. Casper
20. november 2009 - 11:02 #4
Har jeg forstaaet dig rigtigt at du simpel hen bare vil vide hvor mange gange stringen "avis" indgaar i stringen "Avis: Køb ikke avisen i kiosken, bestil et avisabonnement" ?  Det goer den to gange (plus en gang for "Avis"), og det faar du uden at fjerne specielle tegn eller explode med funktionen substr_count().

Som test koerte jeg i http://christianjorgensen.be/caspersch1.php denne kode:

<?
  $str = "Avis: Køb ikke avisen i kiosken, bestil et avisabonnement";
  echo "Avis" . substr_count($str, "Avis") . "<br/>";
  echo "avis" . substr_count($str, "avis");

?>

og det gav resultatet:

Avis: 1
avis: 2

Er det noget andet du vil?
22. november 2009 - 15:28 #5
caspersch, saa du mit sidste indlaeg?  Som sagt, hvis du "bare" vil taelle hvor mange gang "avis" eller "Avis" indgaar i en tekst $str saa kan den ganske enkle funktion substr_count($str, "Avis") og substr_count($str, "avis) klare det.  Hvis det er noget mere komplicered du vil saa har jeg ikke forstaaet hvad det er saa du maa forklare det.
Avatar billede per1291 Nybegynder
24. november 2009 - 00:29 #6
Måske kan du bruge noget lignende dette:

<script type="text/javascript">
var S="Avis. Man tager en avis, en avissælger og endnu en avis";
alert(S.split(/\Wavis\W/igm).length-1);
</script>

Resultatet vil være antal forekomster af ordet "avis" omgivet af ikke-bogstaver.
Det er RegExp som du foreslog, hvor \W betyder ethvert ikke-bogstav.

Koden er mangelfuld, idet den ikke i dens nuværende udformning medregner det allerførste og det allersidste ord.

Denne kode gør:
alert(S.split(/^avis\W|\Wavis\W|\Wavis$/igm).length-1);

Men den kan formentlig gøres mere elegant.

Hilsen Per
24. november 2009 - 07:18 #7
Men er dit behov kun at finde forekomster af "avis" omgivet af ikke-bogstav?  Saa faar du ikke med forekomster saasom "Morgenavisen Jyllandsposten" eller "avisabonnement."  Naturligvis taeller du saa ogsaa ord som "propagandavisen" eller "Davisen," men saadanne ord forekommer vel ikke saa ofte paa dansk.
27. november 2009 - 14:13 #8
caspersch, tabte du maelet?  Det er en uge siden du har givet lyd fra dig.  Var de loesningsforslag der fremkom nyttige?  I saafald vil jeg bede dig lukke spoergsmaalet for god ordens skyld (og saa det ikke laengere aabent i min liste af indlaeg).  Hvis vi alle har misforstaaet problemet saa forklar yderligere saa vi kan faa en ende paa det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester