{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# NER og POS med Spacy\n", "\n", "Hent ut navn og steder fra en tekst i Nasjonalbibliotekets samling med `NER`.\n", "\n", "Finn ordklasser med `POS`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import dhlab as dh\n", "from dhlab import Corpus\n", "from dhlab.text.parse import NER, POS, Models" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Hent ut en urn" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/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]`\n", " my_urn = urns[1]\n" ] } ], "source": [ "# Bygg et korpus basert Agnar Mykle og hent ut urn-kolonnen som liste\n", "urns = Corpus(doctype=\"digibok\", author=\"mykle\", title=\"røde\").frame.urn\n", "# Hent ut en urn\n", "my_urn = urns[1]" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Oversikt over modeller: \n", "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](https://spacy.io/). \n", "\n", "`nb_core_news_sm` er et bra utgangspunkt for en norskspråklig bok eller avis." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['nb_core_news_lg',\n", " 'da_core_news_lg',\n", " 'nb_core_news_sm',\n", " 'en_core_web_lg',\n", " 'en_core_web_md',\n", " 'da_core_news_trf']" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l = Models()\n", "l.models" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## NER\n", "\n", "NER (Named Entity Recognition) brukes for å finne navngitte entiteter, som personer, steder, osv. i teksten." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/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.\n", " df = pd.read_json(r.json())\n" ] } ], "source": [ "result = NER(urn=my_urn, model=\"nb_core_news_sm\", start_page=0, to_page=1000000)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | token | \n", "ner | \n", "frekv | \n", "
---|---|---|---|
887 | \n", "Mykle | \n", "PER | \n", "310 | \n", "
2117 | \n", "s | \n", "ORG | \n", "129 | \n", "
183 | \n", "Blom | \n", "PER | \n", "123 | \n", "
1141 | \n", "Sangen om den røde rubin | \n", "MISC | \n", "119 | \n", "
905 | \n", "Mykles | \n", "PER | \n", "114 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
988 | \n", "Olav Duun | \n", "PER | \n", "1 | \n", "
987 | \n", "Olav Dalgard | \n", "PER | \n", "1 | \n", "
986 | \n", "Olav Arnulv Nygaard | \n", "PER | \n", "1 | \n", "
985 | \n", "Olaf Gosta Lagerkrantz | \n", "PER | \n", "1 | \n", "
2564 | \n", "™ e | \n", "MISC | \n", "1 | \n", "
2565 rows × 3 columns
\n", "\n", " | token | \n", "lemma | \n", "pos | \n", "dep | \n", "head | \n", "head_lemma | \n", "head_pos | \n", "head_head | \n", "head_head_lemma | \n", "head_head_pos | \n", "frekv | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|
9167 | \n", ". | \n", ". | \n", "PUNCT | \n", "punct | \n", "har | \n", "have | \n", "AUX | \n", "har | \n", "have | \n", "AUX | \n", "7 | \n", "
7254 | \n", ". | \n", ". | \n", "PUNCT | \n", "punct | \n", "mener | \n", "mene | \n", "VERB | \n", "mener | \n", "mene | \n", "VERB | \n", "5 | \n", "
4843 | \n", ", | \n", ", | \n", "PUNCT | \n", "punct | \n", "nr. | \n", "nummer | \n", "NOUN | \n", "felles | \n", "felle | \n", "VERB | \n", "4 | \n", "
7713 | \n", ". | \n", ". | \n", "PUNCT | \n", "punct | \n", "er | \n", "være | \n", "AUX | \n", "er | \n", "være | \n", "AUX | \n", "4 | \n", "
11701 | \n", ". | \n", ". | \n", "PUNCT | \n", "punct | \n", "har | \n", "have | \n", "VERB | \n", "har | \n", "have | \n", "VERB | \n", "4 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
54409 | \n", "diskusjonen | \n", "diskusjon | \n", "NOUN | \n", "obj | \n", "av | \n", "av | \n", "INTJ | \n", "bekymret | \n", "bekymre | \n", "VERB | \n", "1 | \n", "
54410 | \n", "diskusjonen | \n", "diskusjon | \n", "NOUN | \n", "obl | \n", "gav | \n", "give | \n", "VERB | \n", "gav | \n", "give | \n", "VERB | \n", "1 | \n", "
54411 | \n", "diskusjoner | \n", "diskusjon | \n", "NOUN | \n", "conj | \n", "detaljbeskriveiser | \n", "detaljbeskriveise | \n", "NOUN | \n", "gjennom | \n", "gjennom | \n", "VERB | \n", "1 | \n", "
54412 | \n", "diskusjoner | \n", "diskusjon | \n", "NOUN | \n", "conj | \n", "aviser | \n", "avis | \n", "NOUN | \n", "angrep | \n", "angrep | \n", "NOUN | \n", "1 | \n", "
162381 | \n", "■ | \n", "■ | \n", "VERB | \n", "amod | \n", "■ | \n", "■ | \n", "NOUN | \n", "■ | \n", "■ | \n", "NOUN | \n", "1 | \n", "
162382 rows × 11 columns
\n", "