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