aantal keer een bepaald woord in een tekst bestand

Status
Niet open voor verdere reacties.

regitbull

Gebruiker
Lid geworden
16 nov 2007
Berichten
25
Hallo,

Ik ben bezig met een script dat laat zien hoevaak bepaalde woorden voor komen.

Bijv ik heb een tekst bestand met deze tekst: woord1 blablablabla woord1 blablabla woord2 blablabla woord1

Het php script kijkt dan hoevaak bepaalde woorden voor komen in het tekst bestand en laat dit zien.

Bijv:
Woord1 kwam: 3x voor.
Woord2 kwam: 1x voor.


Ik heb dit script geprobeerd maar dat werkte niet:
PHP:
<?
$bestand = "test1.txt";
$handelaar = fopen($bestand, r);
$text = fread($handelaar, filesize($bestand));
fclose($handelaar);

$woord = "hier vul je je woord in";
preg_match_all("/(\w$woord|$woord\w)/", $text, $matches);
print count($matches);
?>


Zou iemand mij kunnen vertellen hoe ik dit aan de praat krijg en het liefst dat ik meerdere woorden kan kiezen om te laten zien hoevaak die voorkomen.
En is dit ook mogelijk met een .dat bestand of moet ik eerste elke keer het .dat bestand omzetten in een .txt bestand?

Ik hoop dat iemand een oplossing heeft.

Alvast bedankt.
 
Hi

mijn kennis van PHP is nog steeds beperkt maar volgens mij zie ik 2 problemen:

- de match wordt door jou niet afgehandeld als een array
- de print zou in dit geval vervamgen moeten worden door een echo

een voorbeeld op http://nl.php.net/preg_match_all
 
Je reguliere expressie klopt niet. "/(\w$woord|$woord\w)/" zoekt naar een alfanumeriek teken (letter, cijfer of underscore) gevolgd door de inhoud van $woord of de inhoud van $woord gevolgd door een alfanumeriek teken. Probeer eens "/\b$woord\b/". Dat is een "word boundary" gevolgd door de inhoud van $woord, gevolgd door een "word boundary".

Ook zal je
PHP:
print count($matches[0]);
moeten gebruiken, omdat preg_match_all alle matches in een nieuwe array in de meegegeven array ($matches in dit geval) zet. Overigens levert preg_match_all het aantal matches op, dus als je alleen het aantal woorden wilt weergeven kan je volstaan met
PHP:
print preg_match_all("/\b$woord\b/", $text, $matches);
of
PHP:
echo preg_match_all("/\b$woord\b/", $text, $matches);
("echo" en "print" doen hetzelfde, al wordt "echo" vaker gebruikt).

Om dit met meerdere woorden te doen zal je preg_match_all meerdere keren moeten uitvoeren, elke keer met een andere waarde in $woord.

En is dit ook mogelijk met een .dat bestand of moet ik eerste elke keer het .dat bestand omzetten in een .txt bestand?
Het kan met elk bestand waarvan de inhoud tekst is, onafhankelijk van de extensie.
 
ok bedankt voor de reacties.

ik ga het zo even verbeteren en kijken wat er dan gebeurt.

Ik laat wel even weten of het werkt!

edit: ok Supersnail het werkt nu perfect.
bedankt voor je hulp.


edit2: ik heb nog 1 vraag.
$bestand = "test2.txt";

hoe kan ik dit veranderen zodat ik een tekst bestand op een andere site dan waar de php pagine zich bevind kan laden.
Site1.nl = bevind zich de test.php
Site2.nl = bevind zich het bestand dat ik wil openen.

ik heb dit al geprobeerd maar dan krijg ik errors:
$bestand = file_get_contents('http://www.site1.nl');
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan