Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Valgte tags:

Filtrering:

NoReC-øving 1

Les gjennom NoReC-øving 0 og svar på oppgavene under. Bruk de fire første metodene til disse oppgavene.

Oppgave 1)

Hvor mange dokumenter er det i korpuset?

Oppgave 2)

Hvis vi tokeniserer på mellomrom, hva er det gjennomsnittlige antallet ord i korpuset? Hva er medianen? Hvor mange ord har det lengste dokumentet? Hvor mange ord har det minste? Hva tenker du om forskjellen?

Oppgave 3)
Ved å bruke metoden i oppgave 2, hvor mange ordforekomster (tokens) har vi, og hvor mange ordformer (typer) har vi? Hvilke ord er de 10 vanligste blant alle dokumentene? Er det mange hapax legomena (ord som bare forekommer én gang). Hva tenker du? Er det bare den dårlige tokeniseringen som er skylden her?

Oppgave 4)
Hvis vi bare deler opp på punktum, hvor mange setninger har dokumentene i gjennomsnitt? Hva er medianen? Hvor mange setninger har det lengste dokumentet? Hvor mange setninger har det korteste? Tror du svaret blir helt rett? Hva er det vi eventuelt får med som vi ikke vil ha med, eller motsatt?

Løsningsforslag:

Oppgave 1

from in2110.corpora import norec

docs = norec.document_list()
print("Antall dokumenter:",len(docs))

utskrift:

Antall dokumenter: 35188

Oppgave 2

from in2110.corpora import norec
from statistics import mean,median

docs = norec.document_list()

# tokenisering på mellomrom
antall_ord = [len(norec.get_document(doc).split(" ")) for doc in docs]

# gjennomsnitt
print("Gjennomsnitt, ord:", mean(antall_ord))

# median
print("Median, ord:", median(antall_ord))

# det lengste
print("Flest ord:", max(antall_ord))

# det korteste
print("Færrest ord:",min(antall_ord))

Utskrift:

Gjennomsnitt, ord: 361.40707059224735
Median, ord: 314.0
Flest ord: 3819
Færrest ord: 1

Det er noen dokumenter som bare har overskrifter, da blir de veldig korte.

Oppgave 3

from collections import Counter
docs = norec.document_list()

counter = Counter()

for doc in docs:
    for word in norec.get_document(doc).split(" "):
        counter[word] += 1

# antall ordforekomster (tokens)
print("Antall ordforekomster:", sum(counter.values()))

# antall ordformer (types)
print("Antall ordformer:",len(counter))

# de ti vanligste ordene
print("10 most common words: \n\t{}".format("\n\t".join([x[0] for x in counter.most_common(10)])))

# antall hapax legomena
print("Antall hapaxer:",len([x for x in counter.most_common() if x[1] == 1]))

Counter-klassen er en underklasse av ordbøker, derfor kan vi bruke .values() for å få tak i alle tellingene. Det er en veldig praktisk klasse når vi skal gjøre denne typen tellinger.

Utskrift:

Antall ordforekomster: 12717192
Antall ordformer: 1078898
10 most common words:
        og
        er
        i
        som
        en
        
        det
        å
        av
        med
Antall hapaxer: 792330

Den dårlige tokeniseringen hjelper selvsagt ikke på antall hapaxer, men tekstene i NoReC er kreative, og det er mange sammensetninger og andre ord som ikke forekommer mange ganger. I tilleg har vi en stor mengde engelske ord som forekommer i titler, og veldig mange egennavn, som for eksempel på produktene som anmeldes.

Oppgave 4

from in2110.corpora import norec
from statistics import mean,median

docs = norec.document_list()
# tokenisering på punktum
antall_setninger = [len(norec.get_document(doc).split(".")) for doc in docs]

# gjennomsnitt
print("Gjennomsnitt, setninger:", mean(antall_setninger))

# median
print("Median, setninger:", median(antall_setninger))

# det lengste
print("Flest setninger:", max(antall_setninger))

# det korteste
print("Færrest setninger:",min(antall_setninger))

Utskrift:

Gjennomsnitt, setninger: 21.689013299988634
Median, setninger: 18.0
Flest setninger: 194
Færrest setninger: 1

De dokumentene som bare hadde ett ord i oppgave 2 får selvsagt også bare 1 setning. Generelt sett er gjennomsnittet vi får her litt lavere enn det faktiske gjennomsnittet, siden vi ikke tar hensyn til at overskrifter og underoverskrifter ikke skilles av punktum, men av linjeskift.