如何用SpaCy解决西班牙语柠檬化问题?

2024-05-16 05:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

当尝试用西班牙语将csv的单词数超过60000个时,SpaCy无法正确书写某些单词,我理解该模型并非100%准确。但是,我没有找到任何其他解决方案,因为NLTK没有带来西班牙语核心

一位朋友试图用西班牙语问这个问题,但是,与这个社区相比,这个社区相当小,我们没有得到任何答案

代码:

nlp = spacy.load('es_core_news_sm')

def lemmatizer(text):  
  doc = nlp(text)
  return ' '.join([word.lemma_ for word in doc])

df['column'] = df['column'].apply(lambda x: lemmatizer(x))

我试图将我发现错误的某些词进行逻辑化,以证明SpaCy做得不对:

text = 'personas, ideas, cosas' 
# translation: persons, ideas, things

print(lemmatizer(text))
# Current output:
personar , ideo , coser 
# translation:
personify, ideo, sew

# The expected output should be:
persona, idea, cosa

# translation: 
person, idea, thing

Tags: textdfoutputdocnlpspacycolumn单词
3条回答

你可以使用spacy节。它有spaCy的API和Stanza的模型:

import stanza
from spacy_stanza import StanzaLanguage

text = "personas, ideas, cosas"

snlp = stanza.Pipeline(lang="es")
nlp = StanzaLanguage(snlp)
doc = nlp(text)
for token in doc:
    print(token.lemma_)

与英语柠檬化器不同,spaCy的西班牙语柠檬化器根本不使用PoS信息。它依赖于屈折动词和引理的查找列表(例如ideo-idear、ideas-idear、idea-idear、ideamos-idear等)。它将只输出列表中的第一个匹配项,而不管其位置如何

实际上,我为spaCy开发了新的基于规则的西班牙语柠檬化器,它考虑了词性和形态信息(如时态、性别、数字)。这些细粒度规则使其比当前的查找柠檬化程序精确得多。很快就要发布了

同时,你也可以使用斯坦福大学的CoreNLP或FreeLing

一个选择是自己制作柠檬汁

这听起来可能很可怕,但不要害怕!做一件事其实很简单

我最近做了一个关于如何制作柠檬化器的教程,链接如下:

https://medium.com/analytics-vidhya/how-to-build-a-lemmatizer-7aeff7a1208c

作为总结,您必须:

  • 使用POS标记器(您可以使用spaCy标记器)标记输入的单词
  • 获取单词及其引理的语料库-在这里,我建议您下载西班牙语的Universal Dependencies Corpus-只需按照上面提到的教程中的步骤操作即可
  • 从语料库中提取的单词创建引理dict
  • 保存dict并生成一个包装函数,该函数同时接收单词及其位置

在代码中,它如下所示:

def lemmatize(word, pos):
   if word in dict:
      if pos in dict[word]:
          return dict[word][pos]
   return word

很简单,对吧

事实上,简单的柠檬化并不像人们想象的那样需要大量的处理。难点在于词性标注,但这是免费的。无论哪种方式,如果您想自己做标记,您可以看到我制作的另一个教程:

https://medium.com/analytics-vidhya/part-of-speech-tagging-what-when-why-and-how-9d250e634df6

希望你能解决它

相关问题 更多 >