mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-25 17:36:30 +03:00
6de84c8757
Co-authored-by: explosion-bot <explosion-bot@users.noreply.github.com>
190 lines
7.1 KiB
Python
190 lines
7.1 KiB
Python
import pytest
|
|
from spacy.tokens import Doc
|
|
|
|
|
|
FI_NP_TEST_EXAMPLES = [
|
|
(
|
|
"Kaksi tyttöä potkii punaista palloa",
|
|
["NUM", "NOUN", "VERB", "ADJ", "NOUN"],
|
|
["nummod", "nsubj", "ROOT", "amod", "obj"],
|
|
[1, 1, 0, 1, -2],
|
|
["Kaksi tyttöä", "punaista palloa"],
|
|
),
|
|
(
|
|
"Erittäin vaarallinen leijona karkasi kiertävän sirkuksen eläintenkesyttäjältä",
|
|
["ADV", "ADJ", "NOUN", "VERB", "ADJ", "NOUN", "NOUN"],
|
|
["advmod", "amod", "nsubj", "ROOT", "amod", "nmod:poss", "obl"],
|
|
[1, 1, 1, 0, 1, 1, -3],
|
|
["Erittäin vaarallinen leijona", "kiertävän sirkuksen eläintenkesyttäjältä"],
|
|
),
|
|
(
|
|
"Leijona raidallisine tassuineen piileksii Porin kaupungin lähellä",
|
|
["NOUN", "ADJ", "NOUN", "VERB", "PROPN", "NOUN", "ADP"],
|
|
["nsubj", "amod", "nmod", "ROOT", "nmod:poss", "obl", "case"],
|
|
[3, 1, -2, 0, 1, -2, -1],
|
|
["Leijona raidallisine tassuineen", "Porin kaupungin"],
|
|
),
|
|
(
|
|
"Lounaalla nautittiin salaattia, maukasta kanaa ja raikasta vettä",
|
|
["NOUN", "VERB", "NOUN", "PUNCT", "ADJ", "NOUN", "CCONJ", "ADJ", "NOUN"],
|
|
["obl", "ROOT", "obj", "punct", "amod", "conj", "cc", "amod", "conj"],
|
|
[1, 0, -1, 2, 1, -3, 2, 1, -6],
|
|
["Lounaalla", "salaattia", "maukasta kanaa", "raikasta vettä"],
|
|
),
|
|
(
|
|
"Minua houkuttaa maalle muuttaminen talven jälkeen",
|
|
["PRON", "VERB", "NOUN", "NOUN", "NOUN", "ADP"],
|
|
["obj", "ROOT", "nmod", "nsubj", "obl", "case"],
|
|
[1, 0, 1, -2, -3, -1],
|
|
["maalle muuttaminen", "talven"],
|
|
),
|
|
(
|
|
"Päivän kohokohta oli vierailu museossa kummilasten kanssa",
|
|
["NOUN", "NOUN", "AUX", "NOUN", "NOUN", "NOUN", "ADP"],
|
|
["nmod:poss", "nsubj:cop", "cop", "ROOT", "nmod", "obl", "case"],
|
|
[1, 2, 1, 0, -1, -2, -1],
|
|
["Päivän kohokohta", "vierailu museossa", "kummilasten"],
|
|
),
|
|
(
|
|
"Yrittäjät maksoivat tuomioistuimen määräämät korvaukset",
|
|
["NOUN", "VERB", "NOUN", "VERB", "NOUN"],
|
|
["nsubj", "ROOT", "nsubj", "acl", "obj"],
|
|
[1, 0, 1, 1, -3],
|
|
["Yrittäjät", "tuomioistuimen", "korvaukset"],
|
|
),
|
|
(
|
|
"Julkisoikeudelliset tai niihin rinnastettavat saatavat ovat suoraan ulosottokelpoisia",
|
|
["ADJ", "CCONJ", "PRON", "VERB", "NOUN", "AUX", "ADV", "NOUN"],
|
|
["amod", "cc", "obl", "acl", "nsubj:cop", "cop", "advmod", "ROOT"],
|
|
[4, 3, 1, 1, 3, 2, 1, 0],
|
|
["Julkisoikeudelliset tai niihin rinnastettavat saatavat", "ulosottokelpoisia"],
|
|
),
|
|
(
|
|
"Se oli ala-arvoista käytöstä kaikilta oppilailta, myös valvojaoppilailta",
|
|
["PRON", "AUX", "ADJ", "NOUN", "PRON", "NOUN", "PUNCT", "ADV", "NOUN"],
|
|
["nsubj:cop", "cop", "amod", "ROOT", "det", "nmod", "punct", "advmod", "appos"],
|
|
[3, 2, 1, 0, 1, -2, 2, 1, -3],
|
|
["ala-arvoista käytöstä kaikilta oppilailta", "valvojaoppilailta"],
|
|
),
|
|
(
|
|
"Isä souti veneellä, jonka hän oli vuokrannut",
|
|
["NOUN", "VERB", "NOUN", "PUNCT", "PRON", "PRON", "AUX", "VERB"],
|
|
["nsubj", "ROOT", "obl", "punct", "obj", "nsubj", "aux", "acl:relcl"],
|
|
[1, 0, -1, 4, 3, 2, 1, -5],
|
|
["Isä", "veneellä"],
|
|
),
|
|
(
|
|
"Kirja, jonka poimin hyllystä, kertoo norsuista",
|
|
["NOUN", "PUNCT", "PRON", "VERB", "NOUN", "PUNCT", "VERB", "NOUN"],
|
|
["nsubj", "punct", "obj", "acl:relcl", "obl", "punct", "ROOT", "obl"],
|
|
[6, 2, 1, -3, -1, 1, 0, -1],
|
|
["Kirja", "hyllystä", "norsuista"],
|
|
),
|
|
(
|
|
"Huomenna on päivä, jota olemme odottaneet",
|
|
["NOUN", "AUX", "NOUN", "PUNCT", "PRON", "AUX", "VERB"],
|
|
["ROOT", "cop", "nsubj:cop", "punct", "obj", "aux", "acl:relcl"],
|
|
[0, -1, -2, 3, 2, 1, -4],
|
|
["Huomenna", "päivä"],
|
|
),
|
|
(
|
|
"Liikkuvuuden lisääminen on yksi korkeakoulutuksen keskeisistä kehittämiskohteista",
|
|
["NOUN", "NOUN", "AUX", "PRON", "NOUN", "ADJ", "NOUN"],
|
|
["nmod:gobj", "nsubj:cop", "cop", "ROOT", "nmod:poss", "amod", "nmod"],
|
|
[1, 2, 1, 0, 2, 1, -3],
|
|
[
|
|
"Liikkuvuuden lisääminen",
|
|
"korkeakoulutuksen keskeisistä kehittämiskohteista",
|
|
],
|
|
),
|
|
(
|
|
"Kaupalliset palvelut jätetään yksityisten palveluntarjoajien tarjottavaksi",
|
|
["ADJ", "NOUN", "VERB", "ADJ", "NOUN", "NOUN"],
|
|
["amod", "obj", "ROOT", "amod", "nmod:gsubj", "obl"],
|
|
[1, 1, 0, 1, 1, -3],
|
|
["Kaupalliset palvelut", "yksityisten palveluntarjoajien tarjottavaksi"],
|
|
),
|
|
(
|
|
"New York tunnetaan kaupunkina, joka ei koskaan nuku",
|
|
["PROPN", "PROPN", "VERB", "NOUN", "PUNCT", "PRON", "AUX", "ADV", "VERB"],
|
|
[
|
|
"obj",
|
|
"flat:name",
|
|
"ROOT",
|
|
"obl",
|
|
"punct",
|
|
"nsubj",
|
|
"aux",
|
|
"advmod",
|
|
"acl:relcl",
|
|
],
|
|
[2, -1, 0, -1, 4, 3, 2, 1, -5],
|
|
["New York", "kaupunkina"],
|
|
),
|
|
(
|
|
"Loput vihjeet saat herra Möttöseltä",
|
|
["NOUN", "NOUN", "VERB", "NOUN", "PROPN"],
|
|
["compound:nn", "obj", "ROOT", "compound:nn", "obj"],
|
|
[1, 1, 0, 1, -2],
|
|
["Loput vihjeet", "herra Möttöseltä"],
|
|
),
|
|
(
|
|
"mahdollisuus tukea muita päivystysyksiköitä",
|
|
["NOUN", "VERB", "PRON", "NOUN"],
|
|
["ROOT", "acl", "det", "obj"],
|
|
[0, -1, 1, -2],
|
|
["mahdollisuus", "päivystysyksiköitä"],
|
|
),
|
|
(
|
|
"sairaanhoitopiirit harjoittavat leikkaustoimintaa alueellaan useammassa sairaalassa",
|
|
["NOUN", "VERB", "NOUN", "NOUN", "ADJ", "NOUN"],
|
|
["nsubj", "ROOT", "obj", "obl", "amod", "obl"],
|
|
[1, 0, -1, -1, 1, -3],
|
|
[
|
|
"sairaanhoitopiirit",
|
|
"leikkaustoimintaa",
|
|
"alueellaan",
|
|
"useammassa sairaalassa",
|
|
],
|
|
),
|
|
(
|
|
"Lain mukaan varhaiskasvatus on suunnitelmallista toimintaa",
|
|
["NOUN", "ADP", "NOUN", "AUX", "ADJ", "NOUN"],
|
|
["obl", "case", "nsubj:cop", "cop", "amod", "ROOT"],
|
|
[5, -1, 3, 2, 1, 0],
|
|
["Lain", "varhaiskasvatus", "suunnitelmallista toimintaa"],
|
|
),
|
|
]
|
|
|
|
|
|
def test_noun_chunks_is_parsed(fi_tokenizer):
|
|
"""Test that noun_chunks raises Value Error for 'fi' language if Doc is not parsed.
|
|
To check this test, we're constructing a Doc
|
|
with a new Vocab here and forcing is_parsed to 'False'
|
|
to make sure the noun chunks don't run.
|
|
"""
|
|
doc = fi_tokenizer("Tämä on testi")
|
|
with pytest.raises(ValueError):
|
|
list(doc.noun_chunks)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"text,pos,deps,heads,expected_noun_chunks", FI_NP_TEST_EXAMPLES
|
|
)
|
|
def test_fi_noun_chunks(fi_tokenizer, text, pos, deps, heads, expected_noun_chunks):
|
|
tokens = fi_tokenizer(text)
|
|
|
|
assert len(heads) == len(pos)
|
|
doc = Doc(
|
|
tokens.vocab,
|
|
words=[t.text for t in tokens],
|
|
heads=[head + i for i, head in enumerate(heads)],
|
|
deps=deps,
|
|
pos=pos,
|
|
)
|
|
|
|
noun_chunks = list(doc.noun_chunks)
|
|
assert len(noun_chunks) == len(expected_noun_chunks)
|
|
for i, np in enumerate(noun_chunks):
|
|
assert np.text == expected_noun_chunks[i]
|