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[1]
/tmp/ipykernel_1596419/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/larsm/.cache/pypoetry/virtualenvs/digital-tekstanalyse-kDjkoATB-py3.10/lib/python3.10/site-packages/dhlab/api/dhlab_api.py:59: 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.
  df = pd.read_json(r.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
... ... ... ...
782 Totem und Tabu ORG 1
781 Tollbodskontorsjef Fiffolo ’ s PER 1
779 Toast-masteren MISC 1
778 Timen snile PER 1
2030 ’ t MISC 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_1596419/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/larsm/.cache/pypoetry/virtualenvs/digital-tekstanalyse-kDjkoATB-py3.10/lib/python3.10/site-packages/dhlab/api/dhlab_api.py:73: 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.
  df = pd.read_json(r.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
4914 , , PUNCT punct lagt lægge VERB lagt lægge VERB 4
4943 , , PUNCT punct kraftig kraftig ADJ kraftig kraftig ADJ 4
20215 ? ? PUNCT punct ondt ondt ADV ondt ondt ADV 4
106721 nu nu ADV advmod lukker lukke VERB sier sie VERB 4
... ... ... ... ... ... ... ... ... ... ... ...
52759 en en DET det lamaprest lamaprest ADJ hemmelighetsfullt hemmelighetsfullt NOUN 1
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
156517 X nsubj blir bli VERB blir bli VERB 1

156518 rows × 11 columns