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_493868/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/DHLAB/dhlab/api/dhlab_api.py:58: 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
32 Ask PER 476
3337 pa LOC 223
2911 nam PER 178
4437 v PER 133
3339 pa ORG 101
... ... ... ...
1709 dristighet PER 1
1710 dstd MISC 1
1711 dstd rorre PER 1
1712 dstren MISC 1
4649 übestikkelighet PER 1

4650 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_493868/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/DHLAB/dhlab/api/dhlab_api.py:74: 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
1759 , , PUNCT punct gjorde gøre VERB sang sang NOUN 6
5566 , , PUNCT punct kraftig kraftig ADJ kraftig kraftig ADJ 4
163936 « « PUNCT punct vxre vxre VERB vxre vxre VERB 4
9041 , , PUNCT punct nar nar VERB nar nar VERB 4
164733 « « PUNCT punct ineci ineci VERB ineci ineci VERB 4
... ... ... ... ... ... ... ... ... ... ... ...
56782 eller eller CCONJ cc inn inn PROPN tillært tillær VERB 1
56783 eller eller CCONJ cc annen annen NOUN en en DET 1
56784 eller eller CCONJ cc nar nar VERB satt satte VERB 1
56785 eller eller CCONJ cc ømt øm ADJ smilte smile VERB 1
168428 PROPN nmod:poss Frygisk frygisk NOUN Frygisk frygisk NOUN 1

168429 rows × 11 columns