From a341b4ef09c99225421db2f21c1e4c18885ac779 Mon Sep 17 00:00:00 2001 From: holubvl3 <47881982+holubvl3@users.noreply.github.com> Date: Fri, 21 Aug 2020 16:17:53 +0200 Subject: [PATCH] Adding support for Czech language (#5826) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create lex_attrs.py Hello, I am missing a CZECH language in SpaCy. So I would like to help to push it a little. This file is base on others lex_attrs.py files just with translation to Czech. * Update __init__.py Updated for use with new Czech Lex_attrs file * Update stop_words.py * Create test_text.py Co-authored-by: Vladimír Holubec --- spacy/lang/cs/__init__.py | 2 + spacy/lang/cs/lex_attrs.py | 64 +++++++++++++++++++ spacy/lang/cs/stop_words.py | 118 +++++++++++++++++++++++++++++++++--- spacy/lang/cs/test_text.py | 0 4 files changed, 176 insertions(+), 8 deletions(-) create mode 100644 spacy/lang/cs/lex_attrs.py create mode 100644 spacy/lang/cs/test_text.py diff --git a/spacy/lang/cs/__init__.py b/spacy/lang/cs/__init__.py index 5b1397ba2..baaaa162b 100644 --- a/spacy/lang/cs/__init__.py +++ b/spacy/lang/cs/__init__.py @@ -4,10 +4,12 @@ from __future__ import unicode_literals from .stop_words import STOP_WORDS from ...language import Language from ...attrs import LANG +from .lex_attrs import LEX_ATTRS class CzechDefaults(Language.Defaults): lex_attr_getters = dict(Language.Defaults.lex_attr_getters) + lex_attr_getters.update(LEX_ATTRS) lex_attr_getters[LANG] = lambda text: "cs" stop_words = STOP_WORDS diff --git a/spacy/lang/cs/lex_attrs.py b/spacy/lang/cs/lex_attrs.py new file mode 100644 index 000000000..368cab6c8 --- /dev/null +++ b/spacy/lang/cs/lex_attrs.py @@ -0,0 +1,64 @@ +# coding: utf8 +from __future__ import unicode_literals + +from ...attrs import LIKE_NUM + +_num_words = [ + "nula", + "jedna", + "dva", + "tři", + "čtyři", + "pět", + "šest", + "sedm", + "osm", + "devět", + "deset", + "jedenáct", + "dvanáct", + "třináct", + "čtrnáct", + "patnáct", + "šestnáct", + "sedmnáct", + "osmnáct", + "devatenáct", + "dvacet", + "třicet", + "čtyřicet", + "padesát", + "šedesát", + "sedmdesát", + "osmdesát", + "devadesát", + "sto", + "tisíc", + "milion", + "miliarda", + "bilion", + "biliarda", + "trilion", + "triliarda", + "kvadrilion", + "kvadriliarda", + "kvintilion", + ] + + +def like_num(text): + if text.startswith(("+", "-", "±", "~")): + text = text[1:] + text = text.replace(",", "").replace(".", "") + if text.isdigit(): + return True + if text.count("/") == 1: + num, denom = text.split("/") + if num.isdigit() and denom.isdigit(): + return True + if text.lower() in _num_words: + return True + return False + + +LEX_ATTRS = {LIKE_NUM: like_num} diff --git a/spacy/lang/cs/stop_words.py b/spacy/lang/cs/stop_words.py index 59d3c102e..9277772fb 100644 --- a/spacy/lang/cs/stop_words.py +++ b/spacy/lang/cs/stop_words.py @@ -1,18 +1,26 @@ # coding: utf8 from __future__ import unicode_literals - # Source: https://github.com/Alir3z4/stop-words +# Source: https://github.com/stopwords-iso/stopwords-cs/blob/master/stopwords-cs.txt STOP_WORDS = set( """ -ačkoli +a +aby ahoj +ačkoli ale +alespoň anebo +ani +aniž ano +atd. +atp. asi aspoň +až během bez beze @@ -25,12 +33,14 @@ budeš budete budou budu +by byl byla byli bylo byly bys +být čau chce chceme @@ -39,14 +49,21 @@ chcete chci chtějí chtít -chut' +chuť chuti co +což +cz +či +článek +článku +články čtrnáct čtyři dál dále daleko +další děkovat děkujeme děkuji @@ -54,6 +71,7 @@ den deset devatenáct devět +dnes do dobrý docela @@ -61,9 +79,15 @@ dva dvacet dvanáct dvě +email +ho hodně +i já jak +jakmile +jako +jakož jde je jeden @@ -73,25 +97,39 @@ jedno jednou jedou jeho +jehož +jej její jejich +jejichž +jehož +jelikož jemu jen jenom +jenž +jež ještě jestli jestliže +ještě +ji jí jich jím +jim jimi jinak -jsem +jiné +již jsi jsme +jsem jsou jste +k kam +každý kde kdo kdy @@ -100,10 +138,13 @@ ke kolik kromě která +kterak +kterou které kteří který kvůli +ku má mají málo @@ -114,8 +155,10 @@ máte mé mě mezi +mi mí mít +mne mně mnou moc @@ -138,6 +181,7 @@ nás náš naše naši +načež ne ně nebo @@ -145,6 +189,7 @@ nebyl nebyla nebyli nebyly +nechť něco nedělá nedělají @@ -154,6 +199,7 @@ neděláš neděláte nějak nejsi +nejsou někde někdo nemají @@ -161,15 +207,22 @@ nemáme nemáte neměl němu +němuž není nestačí +ně nevadí +nové +nový +noví než nic nich +ní ním nimi nula +o od ode on @@ -183,22 +236,37 @@ pak patnáct pět po +pod +pokud pořád +pouze potom pozdě +pravé před +přede přes -přese +přece pro proč prosím prostě +proto proti +první +právě protože +při +přičemž rovně +s se sedm sedmnáct +si +sice +skoro +sic šest šestnáct skoro @@ -207,41 +275,69 @@ smí snad spolu sta +svůj +své +svá +svých +svým +svými +svůj sté sto +strana ta tady tak takhle taky +také +takže tam -tamhle -tamhleto +támhle +támhleto tamto tě tebe tebou -ted' +teď tedy ten +tento +této ti +tím +tímto tisíc tisíce to tobě tohle +tohoto +tom +tomto +tomu +tomuto toto třeba tři třináct trošku +trochu +tu +tuto tvá tvé tvoje tvůj ty +tyto +těm +těma +těmi +u určitě už +v vám vámi vás @@ -251,13 +347,19 @@ vaši ve večer vedle +více vlastně +však +všechen všechno všichni vůbec vy vždy +z +zda za +zde zač zatímco ze diff --git a/spacy/lang/cs/test_text.py b/spacy/lang/cs/test_text.py new file mode 100644 index 000000000..e69de29bb