NER og POS med Spacy

resources/images/dhlab-logo-nb.png

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.iloc[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/tita/koding/dhlab_stuff/digital_tekstanalyse/.venv/lib/python3.13/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
27 Ask PER 781
134 Daniel PER 115
281 Gud PER 84
1335 mann PER 80
196 Embla MISC 68
... ... ... ...
14 Anders Taraldsen PER 1
17 Arbeideravisen LOC 1
18 Arbeiderbevegelsen PER 1
19 Arbeiderbladet ORG 1
20 Arbeideren PER 1

1983 rows × 3 columns

1.10.2. POS – Ordklassetagging#

Finn ordklasser og dependens for en tekst med POS

res = POS(urn=urns.iloc[1], model=l.models[2], to_page=10000)
/home/tita/koding/dhlab_stuff/digital_tekstanalyse/.venv/lib/python3.13/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
106602 nu nu ADV advmod lukker lukke VERB sier sie VERB 4
4860 , , PUNCT punct lagt lægge VERB lagt lægge VERB 4
153445 » » PUNCT punct syk syk ADV syk syk ADV 4
15677 . . PUNCT punct Ja ja INTJ Ja ja INTJ 4
2067 , , PUNCT punct lykkelig lykkelig ADJ Matt Matt PROPN 4
... ... ... ... ... ... ... ... ... ... ... ...
52838 en en DET det lavvokst lavvokst NOUN inngav inngav VERB 1
52839 en en DET det vever veve VERB virket virke VERB 1
52840 en en DET det måte måte NOUN kontrasterte kontrastert NOUN 1
52841 en en DET det aura aura NOUN latiner latin NOUN 1
52832 en en DET det pung pung NOUN pung pung NOUN 1

156536 rows × 11 columns