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
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 1
----> 1 import dhlab as dh
      2 from dhlab import Corpus
      3 from dhlab.text.parse import NER, POS, Models

ModuleNotFoundError: No module named 'dhlab'

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_1631794/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
887 Mykle PER 310
2117 s ORG 129
183 Blom PER 123
1141 Sangen om den røde rubin MISC 119
905 Mykles PER 114
... ... ... ...
988 Olav Duun PER 1
987 Olav Dalgard PER 1
986 Olav Arnulv Nygaard PER 1
985 Olaf Gosta Lagerkrantz PER 1
2564 ™ e MISC 1

2565 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_1631794/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
9167 . . PUNCT punct har have AUX har have AUX 7
7254 . . PUNCT punct mener mene VERB mener mene VERB 5
4843 , , PUNCT punct nr. nummer NOUN felles felle VERB 4
7713 . . PUNCT punct er være AUX er være AUX 4
11701 . . PUNCT punct har have VERB har have VERB 4
... ... ... ... ... ... ... ... ... ... ... ...
54409 diskusjonen diskusjon NOUN obj av av INTJ bekymret bekymre VERB 1
54410 diskusjonen diskusjon NOUN obl gav give VERB gav give VERB 1
54411 diskusjoner diskusjon NOUN conj detaljbeskriveiser detaljbeskriveise NOUN gjennom gjennom VERB 1
54412 diskusjoner diskusjon NOUN conj aviser avis NOUN angrep angrep NOUN 1
162381 VERB amod NOUN NOUN 1

162382 rows × 11 columns