Werkoverleg met GvN.
Taken:
- ❏ Virtuele corpora
✔ Resultaat van zoekopdracht opslaan als virtueel corpus subcorpus
- ✔ Na zoeken naar triplets
- ✔ Na zoeken met xpath
❏ Virueel corpus Subcorpus maken op basis van selectie op metadata
- ❏ Virtueel corpus gebruiken
- ❏ pqserve
✔ Tab Zoeken
✘ Tab XPath
❏ Tab Corpora
❏ Start: virtuele corpora met status working verwijderen
- ❏ pqrmcorpus
- ✻ gewoon corpus: niet verwijderen zolang er nog afgeleide virtuele corpora zijn
- ❏ pqrmuser
- ❏ pqinit
- ❏ pqstatus
- ✻ ook weergave van niet afgeronde virtuele corpora
- ❏ pqserve
- ❏ Nieuwe tab voor telling van metadata (van gewone en virtuele corpora)
- ❏ Virtuele corpora
Stand van zaken
Geen virtuele corpora, maar compleet nieuwe corpora afgeleid van oude corpora.
Op dit moment werkt dit met zoeken naar triplet en met zoeken met XPATH.
Implementatie op basis van metadata zal niet moeilijk zijn.
Stand van zaken (oud)
Je kunt van een gewone zoekopdracht efficiënt een virtueel corpus maken. Die bestaat uit één nieuwe tabel in MySQL met rijen van corpusnaam, archiefindex en bestandsindex. En verder twee views. (In een virtueel corpus kan data uit meerdere gewone corpora zijn opgenomen.) Zie de MySQL-code lager op deze pagina.
Dat virtuele corpus kan snel doorzocht worden met een gewone zoekopdracht. Dit kan nu al, zie corpus ** Afgeleid van lassywiki en weermetmetadataa.
Problemen ontstaan wanneer je dat virtuele corpus vervolgens wilt doorzoeken met xpath. Eén probleem is dat er nogal wat verschillen zijn in naamgeving tussen de data in MySQL en in DbXML. Dit is het gevolg van de vele bronnen van de corpora, globaal of niet, ingediend met of onder labels, ingediend als tekst, als geparste zinnen in xml, of als dactbestand. Dit is met een hoop houtje-touwtje op te lossen.
Maar uiteindelijk is het doorzoeken van zo'n virtueel corpus met xpath heel tijdrovend. Je kunt in DbXML geen subset definiëren. Je moet elk broncorpus helemaal doorzoeken, en voor elk resultaat controleren of het in het virtueel corpus voorkomt.
Tot zover ben ik met de ontwikkeling.
Waar ik nog niet aan begonnen ben is het maken van een virtueel corpus op basis van een zoekopdracht met xpath. Ik verwacht dat dit lastig zal worden omdat het zoekresultaat van xpath niet goed te herleiden is tot de bijbehorende data in MySQL.
(Een virtueel corpus maken op basis van metadata zou ook via xpath kunnen. Maar voor het geval er geen DbXML beschikbaar is lijkt het me beter dat via MySQL te doen.)
Op dit moment zie ik één oplossing. Geen virtuele corpora, maar nieuwe corpora aanmaken op basis van een zoekopdracht. Alle XML-bestanden die het resultaat zijn van een zoekopdracht samenvoegen in een zipbestand, en dat aanbieden als een nieuw corpus (allemaal achter de schermen).
Voordeel is dat daarna alles gewoon werkt net als voorheen. Er hoeven niet op tientallen plaatsen in de code aanpassingen gemaakt te worden om overweg te kunnen met virtuele corpora.
Misschien moeten we het beperken. Iemand zou alleen een nieuw corpus mogen afleiden van eigen corpora, omdat ie anders de beschikking zou kunnen krijgen over de complete data van een corpus dat niet van hemzelf is.
Problemen voor gebruiker
- Een virtueel corpus (mede) afgeleid van een corpus dat gedeeld was door een andere gebruiker.
- Wat gebeurt er als die andere gebruiker het corpus verwijderd?
- Wat gebeurt er als er daarna een ander corpus wordt aangemaakt met dezelfde naam?
Oplossing: aanmaken virtueel corpus alleen toestaan op basis van algemene corpora en eigen corpora?
Aanmaken, hoe?
Na zoeken met xpath
Voor elke gevonden zin moet in MySQL de bijbehorende arch en file opgezocht worden. Dat moet werken voor alle manieren waarop de bestandsnamen zijn gecodeerd. Was de invoerdata met of zonder label?
Na zoeken naar triplet
Virtueel corpus afleiden van twee gewone corpora
INSERT INTO `wordrel_info` (`id`, `description`, `owner`, `status`, `virtual`, `msg`)
VALUES ("virtest", "TEST virtueel corpus", "p.c.j.kleiweg@rug.nl", "WORKING", "1", "virtueel corpus");
CREATE TABLE `wordrel_v_virtest` (
`corpus` VARCHAR(32),
`arch` INT(11),
`file` INT(11),
INDEX (`corpus`, `arch`, `file`));
INSERT INTO `wordrel_v_virtest` (`corpus`, `arch`, `file`)
SELECT DISTINCT "hetgeloofderkameradea", `arch`, `file`
FROM `wordrel_c_hetgeloofderkameradea_deprel`
WHERE
`word` LIKE "zon"
GROUP BY 2, 3;
INSERT INTO `wordrel_v_virtest` (`corpus`, `arch`, `file`)
SELECT DISTINCT "weerberichtmetmetadaa", `arch`, `file`
FROM `wordrel_c_weerberichtmetmetadaa_deprel`
WHERE
`word` LIKE "zon%"
GROUP BY 2, 3;
CREATE VIEW `wordrel_c_virtest_deprel` AS
SELECT `c`.*, "hetgeloofderkameradea" AS `corpus`
FROM `wordrel_c_hetgeloofderkameradea_deprel` `c`,
`wordrel_v_virtest` `v`
WHERE `c`.`file` = `v`.`file` AND `c`.`arch` = `v`.`arch` AND `v`.`corpus` = "hetgeloofderkameradea"
UNION
SELECT `c`.*, "weerberichtmetmetadaa" AS "corpus"
FROM `wordrel_c_weerberichtmetmetadaa_deprel` `c`,
`wordrel_v_virtest` `v`
WHERE `c`.`file` = `v`.`file` AND `c`.`arch` = `v`.`arch` AND `v`.`corpus` = "weerberichtmetmetadaa";
CREATE VIEW `wordrel_c_virtest_sent` AS
SELECT `c`.*, "hetgeloofderkameradea" AS `corpus`
FROM `wordrel_c_hetgeloofderkameradea_sent` `c`,
`wordrel_v_virtest` `v`
WHERE `c`.`file` = `v`.`file` AND `c`.`arch` = `v`.`arch` AND `v`.`corpus` = "hetgeloofderkameradea"
UNION
SELECT `c`.*, "weerberichtmetmetadaa" AS "corpus"
FROM `wordrel_c_weerberichtmetmetadaa_sent` `c`,
`wordrel_v_virtest` `v`
WHERE `c`.`file` = `v`.`file` AND `c`.`arch` = `v`.`arch` AND `v`.`corpus` = "weerberichtmetmetadaa";
INSERT INTO `wordrel_corpora` (`user`, `prefix`, `enabled`)
VALUES ("p.c.j.kleiweg@rug.nl", "virtest", "1")
SELECT COUNT(*) FROM `wordrel_v_virtest`;
UPDATE `wordrel_info` SET `status`="FINISHED", `msg`="", `nline`="8" WHERE `id`="virtest";
Virtueel corpus afleiden van een ander virtueel corpus
CREATE TABLE `wordrel_v_wikitest2` (
`corpus` VARCHAR(32),
`arch` INT(11),
`file` INT(11),
INDEX (`corpus`, `arch`, `file`));
INSERT INTO `wordrel_v_wikitest2` (`corpus`, `arch`, `file`)
SELECT DISTINCT `v`.`corpus`, `v`.`arch`, `v`.`file`
FROM `wordrel_c_lassywiki_deprel` `c`, `wordrel_v_wikitest` `v`
WHERE `v`.`corpus` = "lassywiki" AND `c`.`file` = `v`.`file` AND `c`.`arch` = `v`.`arch` AND
`c`.`word` LIKE "toerist%"
GROUP BY 1, 2 ,3;
INSERT herhalen voor elk gewoon corpus waarop het virtuele corpus is gebaseerd