/dhbb-nlp

processamentos DHBB

Primary LanguageCommon LispOtherNOASSERTION

DHBB

Split meta from text

O comando abaixo identifica arquivos com BOM. Para os arquivos listados, vc pode confirmar o encoding ‘UTF-8 Unicode (with BOM) text’ com o comando file e remover com o comando dos2unix.

egrep -c "^---$" *.text | awk -F : '$2 == 1 { print }'

Para separar arquivos já limpos em um diretório:

for f in $(egrep '^cargos:' *.text | awk -F ':' '{ print $1 }'); do cp $f test/; done

Para separar textos:

for f in *.text; do
    awk 'BEGIN { text=0; } text>1 {print} /^---$/ { text = text + 1; }' $f > $(basename $f .text).raw ;
done

Para separar metadados:

for f in *.text; do
    awk 'BEGIN { text=0; } text<=1 {print} /^---$/ { text = text + 1; }' $f > $(basename $f .text).meta ;
done

Removing BOM from files

https://stackoverflow.com/questions/1068650/using-awk-to-remove-the-byte-order-mark

for f in $(find ../raw -size 0); do BN=$(basename $f .raw); awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1' $BN.text > $BN.new; done

The UDP directory

awk -F \: ‘BEGIN {OFS=”|”} {n=split($2, arr, \|); for (i=1;i<=n;++i) print $1, NR, arr[i] }’ nomes.txt > nomes-splited.txt

time find ~/work/cpdoc/dhbb/raw -name "*.raw" | xargs ./udpipe --tokenize --tag --parse --outfile=../../cpdoc/dhbb/udp/{}.conllu ../udpipe-ud-2.0-conll17-170315/models/portuguese-ud-2.0-conll17-170315.udpipe

Dictionaries

(ql:quickload :cpdoc)
(in-package :cpdoc)

(mapcar (lambda (file)
		 (let ((bd (extract-meta file)))
		   (list (pathname-name file)
			 (gethash "natureza" bd)
			 (gethash "title" bd))))
	       (directory "text/*.text"))

(with-open-file (file "dic/titles-from-meta.text" :direction :output :if-exists :supersede)
	 (format file "~{~{~a~^|~}~%~}" *))

Sentences

Tem erros nos dados também, em geral o OpenNLP foi mais robusto à estes erros, veja https://github.com/cpdoc/dhbb/commit/fb4244a3e19ec6fa4aa3383f1fec70a075b178f1 e cpdoc/dhbb#19 (comment):

% for f in fl/*.sent; do diff -q $f opennlp/$(basename $f) >> log ; done
% wc -l log
    1551 log

Links

Reports

Número de relações semânticas obtida com (see udp/golden)

awk '$0 ~ /^[0-9]+/ && $8 ~ /appos/ {split($10,a,"|"); print a[1]}' {1..35}.conllu | sort | uniq -c | sort -n
1&date-inv
1&part
1&vinculo-pers
5&other
6&loc
11&vinculo-inst
12&attrib-inv
28&vinculo-fam-inv
37&vinculo-fam
47&role
61&attrib
61&part-inv
72&date
200&ident
253&role-inv
(apply #'+ (mapcar #'car dados))

Tabela dos dados originais do diretório PAL:

fileappnpred
1.conllu42
2.conllu2125
3.conllu28
4.conllu412
5.conllu32
6.conllu1911
7.conllu1939
8.conllu4059
9.conllu818
10.conllu1915
11.conllu119
12.conllu34
13.conllu85
14.conllu57
15.conllu434
16.conllu77
17.conllu46
18.conllu1610
19.conllu1627
20.conllu43
21.conllu29
22.conllu1216
23.conllu816
24.conllu64
25.conllu2530
26.conllu1619
27.conllu43
28.conllu714
29.conllu39
30.conllu38
31.conllu26
32.conllu00
33.conllu820
34.conllu512
35.conllu37

Tabelas do diretorio ud versão inicial e versão depois das revisões:

awk '$0 ~ /^[0-9]+/ && $8 ~ /appos/ {split($10,a,"|"); print FILENAME}' {1..35}.conllu | sort | uniq -c  | sort -n
relfile
65.conllu
727.conllu
81.conllu
912.conllu
99.conllu
1031.conllu
1129.conllu
1216.conllu
1224.conllu
123.conllu
1235.conllu
1313.conllu
1317.conllu
1320.conllu
1321.conllu
1430.conllu
1511.conllu
1514.conllu
1834.conllu
244.conllu
2526.conllu
2623.conllu
2628.conllu
3019.conllu
306.conllu
3333.conllu
3810.conllu
3818.conllu
4215.conllu
5822.conllu
612.conllu
687.conllu
9125.conllu
1428.conllu
relfile
63.conllu
65.conllu
727.conllu
729.conllu
812.conllu
89.conllu
91.conllu
1017.conllu
1020.conllu
1024.conllu
1031.conllu
1114.conllu
1116.conllu
1130.conllu
1213.conllu
1221.conllu
1234.conllu
1235.conllu
1511.conllu
204.conllu
2426.conllu
246.conllu
2728.conllu
2823.conllu
3033.conllu
3119.conllu
3215.conllu
3418.conllu
3510.conllu
487.conllu
5022.conllu
542.conllu
8825.conllu
1038.conllu

tmp$X <- tmp$rel - tmp$appos tmp$Y <- tmp$rel - (tmp$app + tmp$npred)

tmp.1 <- merge(tab1,tab2, by.x = "file", by.y = "file")
tmp   <- merge(tmp.1,tab3, by.x = "file", by.y = "file")
tmp$pal <- tmp$app + tmp$npred
tmp
filerel.xrel.yappnpredpal
1.conllu89426
10.conllu3835191534
11.conllu151511920
12.conllu98347
13.conllu13128513
14.conllu15115712
15.conllu423243438
16.conllu12117714
17.conllu13104610
18.conllu3834161026
19.conllu3031162743
2.conllu6154212546
20.conllu1310437
21.conllu13122911
22.conllu5850121628
23.conllu262881624
24.conllu12106410
25.conllu9188253055
26.conllu2524161935
27.conllu77437
28.conllu262771421
29.conllu1173912
3.conllu1262810
30.conllu14113811
31.conllu1010268
33.conllu333082028
34.conllu181251217
35.conllu12123710
4.conllu242041216
5.conllu66325
6.conllu3024191130
7.conllu6848193958
8.conllu142103405999
9.conllu9881826
tmp <- colSums(dados[,-1])
tmp

Pending

  • quantas mudanças houve em cada arquivo mesmo? Os numeros refletem agregado mas podem ter sido tirados 10 e incluidas 11 somando 1 na tabela 3.
  • tambem não sabemos se as relações mudaram pais/filhos.