LanguageMachines / foliautils

Command-line utilities for working with the Format for Linguistic Annotation (FoLiA), powered by libfolia (C++), written by Ko van der Sloot (CLST, Radboud University)
https://proycon.github.io/folia
GNU General Public License v3.0
4 stars 3 forks source link

FoLiA-stats enhancement towards processing text files per year (in Dutch) #34

Closed martinreynaert closed 5 years ago

martinreynaert commented 5 years ago

Hi Ko,

In het kader van TICCLAT zit ik met een probleem. En ik wil graag jouw advies en hulp richting een oplossing.

In TICCLAT willen we dus graag een databank bouwen met zoveel mogelijk gedateerde woordenschat op basis van de diverse Nederlab FoLiA-corpora.

Van bepaalde subcorpora in Nederlab is bekend van welk jaar of welke periode de teksten zijn. Die informatie is echter niet uniform beschikbaar of direct voor mij toegankelijk (bv. de Nederlab metadata databank).

Voor belangrijke subcorpora zoals DBNL en EDBO heb ik echter wel al per boek beschikbaar uit welk jaar ze zijn, in lijstvorm: bestandsnaam - jaar.

Voor een ander groot corpus (de Staten-Generaal Digitaal1814-2013) is die informatie voor een heleboel bestanden aanwezig in de bestandsnaam. Voor andere teksttypes dan weer in de metadata in het FoLiA-bestand. Hiervan zijn dus vrij vlot vergelijkbare lijsten te maken.

Jaarlijsten lijken dus 'de weg te gaan'.

Op basis van alle bestanden uit 1 jaar zouden dus per corpus de frequentielijsten moeten opgebouwd worden. Binnen TICCLAT is afgesproken dat we die ook allemaal met TICCL-unk processen. De clean-files worden uiteindelijk in de databank ingevoerd, per jaar, op basis van het jaartal in hun bestandsnaam.

Nu zijn dit ook vaak grote corpora en zijn het flinke aantallen bestanden. Die wil ik liever niet fysiek verplaatsen, bijvoorbeeld naar directories per jaar.

Mijn eerste idee was een wrapper te bouwen die op basis van zo'n jaarlijst de bestanden voor dat jaar met hun volle bestandsnaam (+ directory path) aanbiedt aan FoLiA-stats. Het resultaat zou dan echter zijn: per bestand voor een bepaald jaar een aparte frequentiefile. Dat is niet de bedoeling, echter. Dat zou het te complex maken en onnodig uitgesplitst over al te veel frequentielijsten. We kunnen weliswaar al frequentielijsten cumuleren, maar dat lijkt hierbij een liever te vermijden extra stap.

Nu is het ook zo dat voor bv. de KB kranten de bestanden wel al netjes per jaar gesorteerd en opgeslagen zijn. Die bestrijken echter de jaren 1618 tot 1940 (zoals opgenomen in Nederlab) en vereisen dus nog steeds honderden malen apart opstarten van FoLiA-stats. (Dit is echter wel al grotendeels gedaan, practisch volledig). Het zou dus fijn zijn als je oplossing ook zou kunnen werken op gedateerde subdirectories, in een lijst beschikbaar gesteld aan het programma: pad - jaartal.

Het is dus ook de bedoeling dat de outputbestanden na zeg maar de prefix het uit de jaarlijst afgeleide jaartal in de bestandsnaam meekrijgen.

Het kan zijn dat ik hier nu eea over het hoofd zie, maar dat kan ik uiteraard later dan vast wel invullen.

Ik zou graag hebben dat je kijkt of het mogelijk is FoLiA-stats (en later ook misschien TICCL-stats) aan deze use case aan te passen. Hartelijk dank, alvast!

Martin

martinreynaert commented 5 years ago

Let us examine this again and make a case for wider generic applicability and general usefulness.

Use case: the researcher has identified a range of files selected on the basis of some metadata criterion to work with. He has produced a list of file names. The files are scattered over his vast archives and for reasons of space economy, the researcher does not feel inclined to copy them to some new location, in some subdirectories that would allow the current tool to process them the way he wants to process them.

The user devises some labelling system that identifies which files should be categorized as belonging to the same batch. Depending on the granularity of his labelling system, individual files may either be processed individually or combined with other files to form a new subcorpus. He applies this labelling system to his list of file names.

FoLiA-stats then processes these files and selects the input on the basis of the labels and produces output files that combine a user specified generic prefix for the whole job with the specific labels, producing as many distinct frequency lists as there are labels.

Please consider this scenario.

kosloot commented 5 years ago

as a simple start, I would suggest the following: The user has to create create an exhaustive list of filenames and labels, (or reversed) The software (starting with FoLiA-stats) will use this list to get the files to process, and the label is used as as sub-directory and/or output-prefix for the results.

so along this line:

subdir1/file1908.01.xml     1908
subdir1/file1908.02.xml     1908
subdir2/file1908.03.xml     1908
...
subdir1/file1908.11.xml     1908
subdir8/file1908.12.xml     1908
subdir1file1909.01.xml     1909
....
subdir78/file1908.12.xml     1909

etc.

A more sophisticated solution would support wildcards:

subdir1/file1908.*.xml     1908
subdir2/file1909.*.xml     1909

But wildcards in the paths may be a problem. I would have to look into that. I suggest starting with the 'simple' solution.

martinreynaert commented 5 years ago

This would be a start, thanks!

Please do not bother to look into wildcards now.

I would much rather have a solution that actually produces an amalgamated frequency list per label, eventually.

I have let you know where in my file system I have put 32 test files ready for you, accompanied by a file specifying their full path and filenames, followed by appropriate labels (specifying when these books were written somewhere in the sixteenth century. Note that there is one label, i.e. 15XX, which specifies the actual year of writing is unknown. The system to be developed should be able to handle this too.

kosloot commented 5 years ago

well, amalgamated frequency lists are already taken care of using the --aggregate option. I assume that this option has to be used per label/output-dir in the future. And the same for the --hemp option?

kosloot commented 5 years ago

Well an first version is implemented now. It is installed on violet. For your example, start it using the parameter --inputfiles like this: --inputfiles=TESTKO.DBNL.16E.top32.txt it will create subdirectories and put statistics there.

Parallelization is weak still, all labels/subdirs are handled after each other. Multiple files in 1 dir CAN be done in parallel.

kosloot commented 5 years ago

merged this solution into the master