Sitzungsnavigation: keine Veranstaltung ausgewählt. (Veranstaltung wählen.)

Summerschool 2016: Textcorpora in relationalem Datenformat, Textanalyse mit SQL (ITG/slu)

Erzeugung von Quasi-HTML-Code:

SELECT 
 textnr, 
 satznr, 
 group_concat(
  '<span class="',pos,'">',token, '</span>' 
  order by id 
  separator ' '
 )
FROM gtokens
group by textnr, satznr
;

Häufigkeit einzelner Tokens:

SELECT 
 count(*) Anzahl, 
 token 
FROM `gtokens` a 
group by token
order by Anzahl desc
;

Verknüpfung der Tabellen gtokens und gdt_tagset:

select token, pos, description
from gtokens a
join gdt_tagset b using(pos)
order by id
;

Anzeige eines gesuchten Tokens zusammen mit dem Satz, in dem es sich befindet:

Select 
sq1.textnr,
sq1.satznr,
sq1.posnr,
sq1.token,
sq1.pos,
sq1.lemma,
sq2.satz 

FROM

(
SELECT * FROM `gtokens` a 
where a.pos like 'ADJ%'
) sq1

JOIN

(SELECT 
 textnr, 
 absnr, 
 satznr, 
group_concat(token order by posnr separator ' ') as satz 
FROM `gtokens` 
group by textnr, absnr, satznr
) sq2

using(textnr,absnr,satznr)
;

Häufigkeit von Wortarten:

SELECT 
 count(*) Anzahl, 
 pos, 
 group_concat(distinct token) 
FROM `gtokens` a 
group by pos 
order by Anzahl desc
;

Ermittlung der Type-Token-Relation:

select 
 count(*) anzahl_types, 
 round(
   count(*) / (select count(*) anzahl_tokens from gtokens) * 100,2
  ) as type_token_relation, 
 token, 
 pos 
from gtokens 
group by token, pos 
order by type_token_relation DESC
;

Ermittlung der Type-Token-Relation pro Textnr

1. Ermittlung der Anzahl von Tokens pro Textnr:

select textnr, count(*)
from gtokens
group by textnr
;

2. Ermittlung der Anzahl von Types pro Textnr:

select textnr, count(*) as Anzahl_types FROM
(
select textnr, count(*), token, pos
from gtokens a 
where pos not like '$%' -- Ausschluss von Satzzeichen
group by textnr, token, pos 
 ) sq 
group by textnr
;

3. Kombination der beiden Abfragen mittels join:

select 
*, 
round(Anzahl_types / Anzahl_tokens * 100,1) as `Type-Token-Relation`

from

(
select textnr, count(*) as Anzahl_types FROM
(
select textnr, count(*), token, pos
from gtokens a 
where pos not like '$%' -- Ausschluss von Satzzeichen
group by textnr, token, pos 
 ) sq 
group by textnr
) sq1
;

Re-Linearisierung des Textes unter Einbindung der Wortarten-Tags:

SELECT 
 textnr, 
 absnr, 
 satznr, 
group_concat(token, ' (', pos, ')' order by posnr separator ' ') as satz 
FROM `gtokens` 
group by textnr, absnr, satznr
;

Bildung von Triplen:

select 
 a.token atoken, 
 b.token btoken, 
 c.token ctoken, 
 a.pos apos, 
 b.pos bpos, 
 c.pos cpos
FROM gtokens a
join gtokens b on (a.id = b.id-1 and a.textnr=b.textnr and a.absnr = b.absnr and a.satznr = b.satznr)
join gtokens c on (b.id = c.id-1 and b.textnr=c.textnr and b.absnr = c.absnr and b.satznr = c.satznr)
;

Ermittlung der absoluten Häufigkeit von Wortartkombinationen:

select 
 count(*) Anzahl, 
 a.pos apos, 
 b.pos bpos, 
 c.pos cpos, 
 group_concat(a.token, ' ', b.token, ' ', c.token separator ' - ') as tokens
FROM gtokens a
join gtokens b on (a.id = b.id-1 and a.textnr=b.textnr and a.absnr = b.absnr and a.satznr = b.satznr)
join gtokens c on (b.id = c.id-1 and b.textnr=c.textnr and b.absnr = c.absnr and b.satznr = c.satznr)
group by apos, bpos, cpos
order by Anzahl DESC
;

Ermittlung der gewichteten Häufigkeit von Wortartkombinationen in Abhängigkeit von der Textnummer:

select 
 sq1.anzahl,
 sq2.anzahl,
 round(sq1.anzahl / sq2.anzahl * 100,2) as Prozent, 
 sq1.* 

from
(
select 
 count(*) Anzahl, 
 a.textnr, 
 a.pos apos, 
 b.pos bpos, 
 c.pos cpos, 
 group_concat(a.token, ' ', b.token, ' ', c.token separator ' - ') as tokens
FROM gtokens a
join gtokens b on (a.id = b.id-1 and a.textnr=b.textnr and a.absnr = b.absnr and a.satznr = b.satznr)
join gtokens c on (b.id = c.id-1 and b.textnr=c.textnr and b.absnr = c.absnr and b.satznr = c.satznr)
group by textnr, apos, bpos, cpos
) sq1

JOIN

(select count(*) as Anzahl, textnr from gtokens a group by textnr) sq2

using(textnr)
;

0.0.1. Update, delete

Daten können auch verändert oder gelöscht werden. Beispiele:

ACHTUNG! MySQL fragt in den seltensten Fällen nach, ob eine Aktion wirklich durchgeführt werden soll. Erzeugen Sie daher in regelmäßigen Abständen „Dumps“ Ihrer Datenbank(en). 

update gtokens set pos = 'xxx', token = 'XYZ' where token like 'Haus';
delete from gtokens where pos like 'NN';

Empfehlenswerte Client-Programme für MySQL-Datenbanken:

HeidiSQL

MySQL-Workbench

Mit MySQL-Datenbanken realisierte Projekte

Biblia Hebraica Transcripta

Höflinge der Habsburgischen Kaiser

VerbaAlpina

Übersicht über weitere Projekte der ITG (überwiegend mit Anbindung an MySQL-Datenbanken):

http://www.itg.uni-muenchen.de/projekte/oeffentlich/index.html

 

 

Schreibe einen Kommentar