Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Individuele woorden tellen in een tekst  (gelezen 4901 keer)

Offline Jenske

  • Lid
Individuele woorden tellen in een tekst
« Gepost op: 2013/07/25, 10:37:35 »
Bestaat er (liefst voor LibreOffice) een "tool" waarmee ik snel een statistiek kan bekomen van alle in een document vermelde woorden? En liefst dan nog eentje waarbij je een lijst van woorden automatisch niet opneemt, zoals "de", "het", "hebben", "geen" enzovoort. En liefst dan ook waarbij je nadien zélf kan aanvinken/afvinken welke woorden niet/wél in de lijst moeten worden opgenomen.

Sommige wordcloud-programma's doen dat in feite, maar het (grafische) resultaat daarvan is nu net niet wat ik zoek. Ik vermoed dat de motor achter die wordcloud-programma's net zo goed kan worden ingebouwd in een LibreOffice-macro.
.. Kubuntu 23.10 op een ...
.. geen idee welk computermerk, 32 Gbyte RAM, 4 Gbyte video-RAM

Offline HarzG

  • Lid
Re: Individuele woorden tellen in een tekst
« Reactie #1 Gepost op: 2013/07/25, 23:40:21 »
De woorden-teller zit in het menu "Extra". Een filter "zonder het/de etc" is mij niet bekend.
Xubuntu 20.04; siduction-15.1.0 Xfce

Offline HarzG

  • Lid
Re: Individuele woorden tellen in een tekst
« Reactie #2 Gepost op: 2013/07/26, 17:53:41 »
... in LibreOffice versie 4.x wordt het aantal getelde woorden getoond in de statusbalk.
Xubuntu 20.04; siduction-15.1.0 Xfce

Re: Individuele woorden tellen in een tekst
« Reactie #3 Gepost op: 2013/07/27, 01:12:59 »
Maar Jenske bedoelt dat er alleen bepaalde woorden geteld moeten worden.
Desktop:
Processor: Intel® Core™2 Quad CPU Q8300 @ 2.50GHz × 4, Geheugen: 3.9Gb, GPU: nVidia 220GT OS: Windows 7 64 bit / Ubuntu 12.04 64 bit
Notebook:
Processor: Intel® Core™ i7-4700MQ, Geheugen: 8Gb, GPU: nVidia GTX765m (met Optimus) OS: Windows 8 64 bit / Elementary OS Luna 64 bit

Offline Jenske

  • Lid
Re: Individuele woorden tellen in een tekst
« Reactie #4 Gepost op: 2013/07/27, 01:44:45 »
HarzG,

Dat "woorden tellen" in LO kende ik, maar die telt gewoon alle woorden; een woord dat 734 keer in een document voorkomt, wordt dus als 734 woorden geteld.

Ik wil een systeem dat snel een overzicht geeft van alle woorden éénmalig met het aantal keer dat ze voorkomen én met de mogelijkheid om een aantal standaardwoorden systematisch niet mee tellen, zoals lidwoorden.

Uiteindelijk wil ik dus iets dat het volgende antwoord kan genereren:

  • aardappel 25
  • zaaien 14
  • boer 18
  • oogst 7
  • kleigrond 2

.. Kubuntu 23.10 op een ...
.. geen idee welk computermerk, 32 Gbyte RAM, 4 Gbyte video-RAM

Re: Individuele woorden tellen in een tekst
« Reactie #5 Gepost op: 2013/07/27, 10:31:05 »
Jenske,

Het zal een serieuze programeer klus worden...
Om te beginnen kan je document bewaren als een tekst document en gaan spelen met awk in een script:
#!/bin/bash

if [ $# -ne 1 ]
then
  echo "Usage: `basename $0` filename.txt"
  exit 1
fi

awk ' {
$0 = tolower($0) 
gsub(/[^[:alnum:]_[:blank:]]/, "", $0)
for (i = 1; i<=NF ; i++)
num[$i]++
}
END {for (word in num)
             print word, num[word]
}
' $1

Opslaan als oa WC.sh  in je home/bin map en uitvoerbaar maken:
WC.sh <bestand.txt>
Dit scriptje tel alle worden, dus het houd geen rekening met woorden die niet mogen opgeteld.
Het "vertaal" wel alles naar kleine letters zodat boer en Boer dus niet appart tel.
Ook haalt het alle punten, komma's en dergelijke eruit zoadt boer en boer. ook niet appart tel.
Eens je een deftig scriptje kan je deze omzetten naar een LO macro.

Veel plezier.


« Laatst bewerkt op: 2013/07/27, 12:39:17 door MauRice2 »
MvG,
MauRice
Registered Linux user: 473556

Offline HarzG

  • Lid
Re: Individuele woorden tellen in een tekst
« Reactie #6 Gepost op: 2013/07/27, 16:25:18 »
Mijn resultaat met het script van MauRice2 heb ik in Calc ingelezen. In Calc kan je een filter activeren om woorden wel/niet te laten tellen.
De tekstdata heb ik uit de terminal gehaald en met de optie "spatie" als scheidingsteken laten inlezen.
Xubuntu 20.04; siduction-15.1.0 Xfce

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
Re: Individuele woorden tellen in een tekst
« Reactie #7 Gepost op: 2013/07/27, 16:39:52 »
Jenske,

Het zal een serieuze programeer klus worden...
Om te beginnen kan je document bewaren als een tekst document en gaan spelen met awk in een script:
#!/bin/bash

if [ $# -ne 1 ]
then
  echo "Usage: `basename $0` filename.txt"
  exit 1
fi

awk ' {
$0 = tolower($0) 
gsub(/[^[:alnum:]_[:blank:]]/, "", $0)
for (i = 1; i<=NF ; i++)
num[$i]++
}
END {for (word in num)
             print word, num[word]
}
' $1

Opslaan als oa WC.sh  in je home/bin map en uitvoerbaar maken:
WC.sh <bestand.txt>
Dit scriptje tel alle worden, dus het houd geen rekening met woorden die niet mogen opgeteld.
Het "vertaal" wel alles naar kleine letters zodat boer en Boer dus niet appart tel.
Ook haalt het alle punten, komma's en dergelijke eruit zoadt boer en boer. ook niet appart tel.
Eens je een deftig scriptje kan je deze omzetten naar een LO macro.

Veel plezier.
Op het eerste gezicht ziet dat er goed uit!  :)

Overweeg eens om dit aan te bieden als extensie voor LibreOffice?
http://www.libreoffice.org/features/extensions/

Re: Individuele woorden tellen in een tekst
« Reactie #8 Gepost op: 2013/07/27, 18:40:41 »
Mijn resultaat met het script van MauRice2 heb ik in Calc ingelezen. In Calc kan je een filter activeren om woorden wel/niet te laten tellen.
De tekstdata heb ik uit de terminal gehaald en met de optie "spatie" als scheidingsteken laten inlezen.

Als je een klein beetje aanpast, maakt het script gelijk een csv-bestandje aan met als scheidingsteken een ;.

#!/bin/bash

if [ $# -ne 1 ]
then
  echo "Usage: `basename $0` filename.txt"
  exit 1
fi

awk ' {
$0 = tolower($0) 
gsub(/[^[:alnum:]_[:blank:]]/, "", $0)
for (i = 1; i<=NF ; i++)
num[$i]++
}
END {
# Eerst een hoofding!
print "Woord;Aantal" > "WC.csv"
for (word in num)
print word";"num[word] > "WC.csv"
    }
   ' $1

Dubbelklikken op het WC.csv wordt gelijk LO calc geopend met de vraag of je de ; als scheiding teken wil gebruiken.

Pjort; het belange nog niet af om als LO macro te gebuiken laat staan voor een extensie.
PS:
Het grootste gedeelte komt van het net...

Edit: Een hoofding toegevoegd.
« Laatst bewerkt op: 2013/07/27, 18:48:54 door MauRice2 »
MvG,
MauRice
Registered Linux user: 473556

Re: Individuele woorden tellen in een tekst
« Reactie #9 Gepost op: 2013/07/28, 18:59:18 »
Mijn eerst LO macro is een feit, het is nog belange na niet af maar het werkt.
Het bash-script wordt een awk-bestandje.
Dus in de LO macro moet je wel het pad naar dit awk-bestandje goed zetten.
De wait is er om tijd te gunnen aan het script om het csv-bestandje te maken, anders heb je een fout melding.

Dus je odt-bestandje wordt eerst omgezet naar een txt-bestandje.
Die op zijn beurt wordt behandeld via een awk-script naar een csv-bestandje.
Deze wordt dan ingelezen in LO Calc. (Met dank aan HarzG voor de tip)

Hierna kan je in LO Calc gaan filteren, hoofding vast zetten  etc etc .... en opslaan als een ods-bestanje.

Links:
awk-bestandje: http://users.telenet.be/x86_64/Scripts/wcf.awk
LO macro: http://users.telenet.be/x86_64/Scripts/Macro_WCF.txt
MvG,
MauRice
Registered Linux user: 473556

Offline HarzG

  • Lid
Re: Individuele woorden tellen in een tekst
« Reactie #10 Gepost op: 2013/07/28, 21:13:58 »
... je hebt hiermee veel belangstellenden geholpen. Je bent nu onze script-man.  =D
Dat is de manier waarop OpenSource een meerwaarde kan bieden voor de gebruikers:
1 heeft een vraag, 2 heeft een idee, 3 heeft een toevoeging en 4 (MauRice2) heeft de truc gevonden die 1+2+3 helpt.
Trots is niet het juiste woord, maar het is mij een eer dat ik kon helpen om een misschien passende oplossing te adviseren.
« Laatst bewerkt op: 2013/07/28, 21:16:02 door HarzG »
Xubuntu 20.04; siduction-15.1.0 Xfce

Re: Individuele woorden tellen in een tekst
« Reactie #11 Gepost op: 2013/07/29, 20:33:23 »
HarzG,

Nu ben ik belange na geen programeur...
Van een paar talen ken ik de basis syntax ervan.
Net genoeg om de voorbeelden op het net te vinden zijn, te combineren tot iets bruikbaar.

Nu is er een extensie voor LO, die dit ook moet doen, denk ik:
http://extensions.libreoffice.org/extension-center/instant-word-count
Ik krijg deze op de ene systeem niet aktief via de "Extensions Manager", een fout melding.
Op een ander systeem krijg ik een python fout-melding bij het uitvoeren ervan.

Van python weet ik helaas niets, maar ik denk dat je hiermee ook iets moois mee kan maken.
Ik denk dat je ook een lijste kan maken van worden die het moet optellen.

Ik denk dat je met awk, grep en sed dit ook wel zal lukken, maar ben er nog niet uit.
Nu weet ik dan awk, grep en sed heel krachtig zijn met text-bestandjes.
MvG,
MauRice
Registered Linux user: 473556

Re: Individuele woorden tellen in een tekst
« Reactie #12 Gepost op: 2013/07/29, 22:33:38 »
OK,

Een kleine aanpassing in het awk-bestandje wcf.awk
Er zit nu ook een zoek patroon voor de woorden die je wilt tellen.
Deze wordt geladen via een text-bestandje Search.txt.
Het enigste wat je moet aanpassen in het wcf.awk bestandje is het pad naar dit text-bestandje.

De woorden moeten gescheiden zijn door een | (pipe) symbool op EEN regel, zie voorbeeld:
http://users.telenet.be/x86_64/Scripts/Search.txt

Met een beetje zoekwerk op het net ...
En met LO basic en awk begint het aardig op iets te lijken.

Edit:
Maak je in het awk-bestandje van:
if (match(word, Patern))
er dit van:
if (! match(word, Patern))

Dan werkt het anders om.

Veel plezier ermee.
« Laatst bewerkt op: 2013/07/29, 22:42:15 door MauRice2 »
MvG,
MauRice
Registered Linux user: 473556

Re: Individuele woorden tellen in een tekst
« Reactie #13 Gepost op: 2013/08/04, 13:02:39 »
Een vraagje, de onderstaande link is voor LO extensie om woord frequentie te tellen.
Het geeft een dialog venster met een paar keuze mogelijkheden.
Het wijst zich zelf is mijn gedacht.
Het opslaan als text-bestand van je odt-bestand, en het maken van de awk-script bestandje en het zoek-bestandje.
Worden door de LO-macro geregeld, maw je hoeft niets te doen dan alleen het dialog venster te volgen.
Het resultaat wordt in LO-calc getoond.
Als het goed is, is deze afhankelijk van je systeem taal is de dialog venster in het Nederlands of mijn beste Engels .

Downloaden en installeren met LO extensie manager
http://users.telenet.be/x86_64/LO_Basic/Extensions/WCF-0.0.1.oxt

Opmerkingen:
Ik heb wel gemerkt waneer je op lidwoorden zoek (de|het|een).
Ook woorden waar lidwoorden in zijn 'verwerkt' ook (of niet)  meetelt, iets wat ik in awk niet kan veranderen.

Een defitg fouten afhandeling is (nog) niet verwekt in de LO-macro.

Werkt alleen met Linux.

MvG,
MauRice
Registered Linux user: 473556

Offline HarzG

  • Lid
Re: Individuele woorden tellen in een tekst
« Reactie #14 Gepost op: 2013/08/04, 17:25:58 »
Werkt alleen met Linux.
..., want WIJ hebben awk  =D
Maar er kunnen blijkbaar ook acties met de Powershell gedaan worden die bruikbaar zijn of anders met gawk.

Ik heb je macro getest met LibreOffice Version: 4.1.0.4, Build ID: 410m0(Build:4). Het gaat grotendeels zoals het hoort.
Voordat je nog meer tijd en energie in de macro stopt, zou je ook nog even kunnen wachten op een reactie van Jenske. Voor mij is de huidige functionaliteit prima, de "foutjes" zijn geen probleem voor mij.

Het zou misschien prettiger zijn als het originele bestand geopend blijft c.q. opnieuw wordt geopend. Op deze manier kan een auteur meteen de gevonden typefouten in het originele document herstellen.
Dat kan bereikt worden door niet "het bestand" te bewaren als txt, maar met Ctrl-A de tekst te selecteren, deze selectie te kopiëren en vervolgens te plakken in een nieuw document met de naam /tmp/tmpFile.txt. Om verwarring te voorkomen kan dat tmp-document worden gesloten. De gebruiker behoort dan alleen het "originele document.odt" en het rekenblad "wcf.csv" te zien. Tussen deze 2 bestanden kan men switchen met de Win-toets+tab.

De kleine "foutjes":
Als ik schijf "media/data" dan wordt dat geteld als 1 woord "mediadata".
Als ik een spatie vergeet voor een woord bij een komma zoals "naam,adres en woonplaats", dan wordt dat als 2 woorden geteld: "naamadres" en "woonplaats".
Maar dat is niet per se een foutje, maar een kwestie van spelling en interpretatie.

Het dialoogvenster is voor mij verwarrend (zie bijlage).
Xubuntu 20.04; siduction-15.1.0 Xfce

Re: Individuele woorden tellen in een tekst
« Reactie #15 Gepost op: 2013/08/04, 20:09:26 »
HarzG,

Leuk dat je deze heb uitgeprobeerd en fijn vindt.

Wat betreft de dialog venster klopt.
Mijn fout, heb de extensie niet op een ander systeem geprobeert. En heb daar het zelfde resultaat.
De fout ligt niet helemaal bijmij, heb op het net een extensie gevonden die met een een paar muisklikken van je macro een extensie bestand maakt.
Helaas heeft deze niet de mogelijkheid om de taal ondersteuning die je in de dialog venster inbouwt goed te beheren.
En een extensie maken via netbeans of eclipse, daar zag ik geen eind aan.
Zal de maker eens op attenderen en ondertussen eens kijken of ik het kan verhelpen.

Een nood oplossing hiervoor ...
Via Extra -> Macro's -> Macro's beheren -> LibreOffice Basic -> WCF - Module1 -> Bijwerken
Dan op de tablad "dlgWCF" (vanonderen) op klikken en rechtermuisknop -> Verwijderen.
De code voor deze dialog venster vind je op de onderstaande link:
http://users.telenet.be/x86_64/LO_Basic/Code/wcf/dlgWCF.xdl
Downloaden.
In de LO-Basice IDE toolbaar zie je een knop met een groen + teken (Dialogvenster importeren).
Hierna naar de gedownloade dlgWCF.xdl kiezen en OK.
De dialoog venster is hersteld in zijn oorspronkelijke staat (In mijn slechte engels helaas).
Of via deze LO Basice IDE en je zit in het dialog-venster mode...
Op het moment dat je een object aanklik, krijg je de eigenshapen van dit object te zien.
Bij 'Label' staat de inhoud hiervan. Kan je aanpassen

Wat betreft de orginele odt-bestand te laten staan en de text-bestand als nieuw bestand aan te maken.
Daar heb ik ook aangedacht maar tot nu toe nog niet gelukt.
Vond al prima dat de LO-calc extra wordt opgestart en dat de text-bestand bleef staan
In mijn eerste macro werd de wcf.csv geopend in de bestande LO-venster die open stond.

Wat betreft "media/data"; in awk heeft de slash ook de betekenis van een scheiding teken zoals in iedere bash script
Hierbij zal je de slash moeten opvangen met vooraf een backslash "media\/data" en "Remove punctuation" (Leestekens e.d. verwijderen) wel afvinken.
Helaas de beperking van awk (bash) scripts.

Edit:
Aangezien een extensie oxt-bestandje niet meer of minder is dan een zip-bestandje.
Heb ik als noodoplossing dit bestandje manueel aangepast met de taal-ondersteuning, en & nl voor het dialoog-venster erin.
Je hoeft enkel via de LO Extensiebeheerder de oude WCF verwijderen en afsluiten.
Opnieuw het bestandje downloaden en installeren met de LO Extensiebeheerder, herstart LO.
Als het goed is, is nu de dialog-venster leesbaar.
http://users.telenet.be/x86_64/LO_Basic/Extensions/WCF-0.0.1.oxt
« Laatst bewerkt op: 2013/08/04, 21:58:47 door MauRice2 »
MvG,
MauRice
Registered Linux user: 473556

Re: Individuele woorden tellen in een tekst
« Reactie #16 Gepost op: 2013/08/05, 20:24:30 »
Heb nog een kleinigheid ontdekt ...
Als je versie van LO kleiner of gelijk aan 3.5.x wordt de uitkomst geopend met LO Writer ipv LO Calc.
Met versie van LO 3.6.x of hoger wordt LO Calc geopend zolas het hoort.

De macro was gemaakt op een Ubuntu met LO versie 4.1.x
Daar gaat dus de downgrade compabiliteit ....
MvG,
MauRice
Registered Linux user: 473556

Re: Individuele woorden tellen in een tekst
« Reactie #17 Gepost op: 2013/08/07, 21:09:22 »
Heb nog een kleinigheid ontdekt ...
Als je versie van LO kleiner of gelijk aan 3.5.x wordt de uitkomst geopend met LO Writer ipv LO Calc.
Met versie van LO 3.6.x of hoger wordt LO Calc geopend zolas het hoort.

De macro was gemaakt op een Ubuntu met LO versie 4.1.x
Daar gaat dus de downgrade compabiliteit ....

Deze kleinigheidtje is ook opgelost + het laten staan van de orginele (odt)-bestand.
Dus versie 0.0.2: http://users.telenet.be/x86_64/LO_Basic/Extensions/WCF-0.0.2.oxt

MvG,
MauRice
Registered Linux user: 473556