J'ai téléchargé le modèle Spacy English et trouve le lemme en utilisant ce code.
Two 11711838292424000352 two apples 8566208034543834098 apple
Sortie:
import spacy nlp = spacy.load('en') doc = nlp(u'Two apples') for token in doc: print(token, token.lemma, token.lemma_)
Maintenant, je voulais faire la même chose pour la langue russe . Mais Spacy n'a pas de modèles pour la langue russe. Mais je vois leur code GitHub pour la langue russe et je pense ce code pourrait être utilisé pour trouver un lemme.
Je suis nouveau sur Spacy. Will avait besoin d'un point de départ pour les langages qui n'ont pas de modèles. J'ai également noté que pour certaines langues, disons pour URDU, ils ont fourni un recherchez le dictionnaire pour la lemmatisation.
Je veux étendre cette chose à toutes les langues qui n'ont pas de modèles.
Remarque: Dans le code ci-dessus, je Je pense que cela pourrait être encore amélioré car dans mon cas, je n'avais besoin que de lemme, alors quelles sont les choses que je peux désactiver et comment?
4 Réponses :
- spaCy a récemment lancé un wrapper pratique sur Stanford NLP, afin que vous puissiez utiliser les goodies StanfordNLP de manière transparente dans les pipelines spaCy:
https://github.com/explosion/spacy-stanfordnlp
Le code ressemblerait à ceci (non testé):
import stanfordnlp from spacy_stanfordnlp import StanfordNLPLanguage stanfordnlp.download("ru") snlp = stanfordnlp.Pipeline(lang="ru") nlp = StanfordNLPLanguage(snlp) doc = nlp("ÐÑÐ¸Ð²ÐµÑ Ð¼Ð¸Ñ, ÑÑо РоÑÑиÑ") for token in doc: print(token.text, token.lemma_, token.pos_, token.dep_)
Stanford CoreNLP prend en charge le lemme pour la langue anglaise uniquement. Consultez ce lien: stanfordnlp.github.io/CoreNLP/human-languages.html
Les résultats de l'analyse comparative indiquent que les modèles de langue russe prennent en charge le lemme -> stanfordnlp.github.io/stanfordnlp/ performance.html
Merci d'avoir partagé. J'ai également découvert ce lien plus tard.
Vous pouvez maintenant utiliser Stanza (anciennement StandfordNLP) pour ce
import stanza from spacy_stanza import StanzaLanguage stanza.download('ru') # will take a while snlp = stanza.Pipeline(lang="ru") nlp = StanzaLanguage(snlp) text = "ÐндÑеÌй СеÑгеÌÐµÐ²Ð¸Ñ ÐÑÑаÌвин (Ñод. 29 Ð¼Ð°Ñ 1981[4], ÐенингÑад) â ÑоÑÑийÑкий ÑÑÑболиÑÑ, бÑвÑий капиÑан ÑбоÑной РоÑÑии, заÑлÑженнÑй маÑÑÐµÑ ÑпоÑÑа РоÑÑии (2008)." doc = nlp(text) for token in doc: print(token, token.lemma, token.lemma_)
Tous les modèles disponibles sont répertoriés ici https://stanfordnlp.github.io/stanza/models.html
J'obtiens ImportError: Le lemmatizer russe nécessite la bibliothèque pymorphy2
. La strophe est-elle juste un wrapper pour la bibliothèque pymorphy2?
Vous pouvez utiliser le lemmatizer russe de spaCy. Suite à ce tutoriel , le résultat sera:
'андÑÐµÌ ÑеÑгеÌÐµÐ²Ð¸Ñ Ð°ÑÑаÌвин (Ñод. 29 ма 1981[4], ленингÑад) â ÑоÑÑийÑк ÑÑÑболиÑÑ, бÑÐ²Ñ ÐºÐ°Ð¿Ð¸Ñа ÑбоÑн ÑоÑÑии, заÑлÑжен маÑÑÐµÑ ÑпоÑÑ ÑоÑÑ (2008).'
import nltk from nltk.stem.snowball import SnowballStemmer stemmer = SnowballStemmer(language='russian') tokenizer = nltk.tokenize.WhitespaceTokenizer() def stemming(text): tokens = [stemmer.stem(w) for w in tokenizer.tokenize(text)] return " ".join(tokens) stemming(text)
Il peut également être utile d'utiliser la racine après la lemmatisation:
'ÐндÑеÌй ÑеÑÐ³ÐµÌ ÐÑÑаÌвин ( Ñод . 29 Ð¼Ð°Ñ 1981[4 ] , ÐенингÑад ) â ÑоÑÑийÑкий ÑÑÑболиÑÑ , бÑвÑий капиÑан ÑбоÑной РоÑÑии , заÑлÑженнÑй маÑÑÐµÑ ÑпоÑÑ Ð Ð¾ÑÑии ( 2008 ) .'
from spacy.lang.ru import Russian nlp = Russian() def lemmatization(text): doc = nlp(text) for token in doc: print(token, token.lemma, token.lemma_) tokens = [token.lemma_ for token in doc] return " ".join(tokens) text = "ÐндÑеÌй СеÑгеÌÐµÐ²Ð¸Ñ ÐÑÑаÌвин (Ñод. 29 Ð¼Ð°Ñ 1981[4], ÐенингÑад) â ÑоÑÑийÑкий ÑÑÑболиÑÑ, бÑвÑий капиÑан ÑбоÑной РоÑÑии, заÑлÑженнÑй маÑÑÐµÑ ÑпоÑÑа РоÑÑии (2008)." lemmatization(text)
L'utilisation peut utiliser le package Spacy multilingue et voir la précision
@RahulAgarwal J'ai vérifié que ce n'était pas utile.
Est-ce que convertir le russe en anglais à l'aide de Google Translate, puis trouver le lemme et le reconvertir en anglais ...
Pas une solution réalisable dans mon cas.
Hmm Ils ont donné du code sur GitHub, j'ai du mal à savoir comment l'utiliser. Si vous voyez ci-dessus le code GitHub et que vous pouvez partager un exemple de code simple qui vous sera utile.