
1.10. NER og POS med Spacy#
Hent ut navn og steder fra en tekst i Nasjonalbibliotekets samling med NER.
Finn ordklasser med POS.
import dhlab as dh
from dhlab import Corpus
from dhlab.text.parse import NER, POS, Models
Hent ut en urn
# Bygg et korpus basert Agnar Mykle og hent ut urn-kolonnen som liste
urns = Corpus(doctype="digibok", author="mykle", title="røde").frame.urn
# Hent ut en urn
my_urn = urns[1]
/tmp/ipykernel_10820/3202258208.py:4: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
my_urn = urns[1]
Oversikt over modeller:
Dhlab støtter Per januar 2023 språkene norsk, dansk og engelsk. Tilgjengelige modeller finnes ved å bruke Models. Man kan lese mer om de enkelte modellene på Spacys hjemmesider.
nb_core_news_sm er et bra utgangspunkt for en norskspråklig bok eller avis.
l = Models()
l.models
['nb_core_news_lg',
'da_core_news_lg',
'nb_core_news_sm',
'en_core_web_lg',
'en_core_web_md',
'da_core_news_trf']
1.10.1. NER#
NER (Named Entity Recognition) brukes for å finne navngitte entiteter, som personer, steder, osv. i teksten.
result = NER(urn=my_urn, model="nb_core_news_sm", start_page=0, to_page=1000000)
/home/ingeridd/prosjekter/digital_tekstanalyse/.venv/lib/python3.12/site-packages/dhlab/api/dhlab_api.py:80: FutureWarning: Passing literal json to 'read_json' is deprecated and will be removed in a future version. To read from a literal string, wrap it in a 'StringIO' object.
return pd.read_json(resp.json())
result.ner
| token | ner | frekv | |
|---|---|---|---|
| 31 | Ask | PER | 785 |
| 137 | Daniel | PER | 115 |
| 300 | Gud | PER | 83 |
| 1388 | mann | PER | 82 |
| 203 | Embla | MISC | 70 |
| ... | ... | ... | ... |
| 778 | Timen snile | PER | 1 |
| 777 | Tillat | PER | 1 |
| 776 | Tiger Rag | ORG | 1 |
| 775 | Théatre Frangais | PER | 1 |
| 790 | Tuileri-haven | LOC | 1 |
2031 rows × 3 columns
1.10.2. POS – Ordklassetagging#
Finn ordklasser og dependens for en tekst med POS
res = POS(urn=urns[1], model=l.models[2], to_page=10000)
/tmp/ipykernel_10820/4208546902.py:1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
res = POS(urn=urns[1], model=l.models[2], to_page=10000)
/home/ingeridd/prosjekter/digital_tekstanalyse/.venv/lib/python3.12/site-packages/dhlab/api/dhlab_api.py:100: FutureWarning: Passing literal json to 'read_json' is deprecated and will be removed in a future version. To read from a literal string, wrap it in a 'StringIO' object.
return pd.read_json(resp.json())
res.pos
| token | lemma | pos | dep | head | head_lemma | head_pos | head_head | head_head_lemma | head_head_pos | frekv | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 3543 | , | , | PUNCT | punct | skamme | skamme | VERB | henne | henne | ADV | 5 |
| 4943 | , | , | PUNCT | punct | kraftig | kraftig | ADJ | kraftig | kraftig | ADJ | 4 |
| 4914 | , | , | PUNCT | punct | lagt | lægge | VERB | lagt | lægge | VERB | 4 |
| 20215 | ? | ? | PUNCT | punct | ondt | ondt | ADV | ondt | ondt | ADV | 4 |
| 106721 | nu | nu | ADV | advmod | lukker | lukke | VERB | sier | sie | VERB | 4 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 52760 | en | en | DET | det | mann | mann | NOUN | lar | lar | VERB | 1 |
| 52761 | en | en | DET | det | visdom | visdom | NOUN | utstråler | utstråler | VERB | 1 |
| 52762 | en | en | DET | det | kunnskap | kunnskap | NOUN | visdom | visdom | NOUN | 1 |
| 52763 | en | en | DET | det | undring | undring | NOUN | komme | komme | VERB | 1 |
| 52754 | en | en | DET | det | musikkens | musikk | NOUN | hadde | hadde | VERB | 1 |
156518 rows × 11 columns