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