【发布时间】:2020-03-04 21:30:46
【问题描述】:
当尝试 lemmatize in Spanish 超过 60,000 个单词的 csv 时,SpaCy 无法正确写入某些单词,我知道该模型并非 100% 准确。但是,我没有找到任何其他解决方案,因为 NLTK 没有带来西班牙语核心。
一位朋友尝试用西班牙语 Stackoverflow 提出这个问题,但是与这个社区相比,这个社区很小,我们没有得到任何答案。
代码:
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
【问题讨论】:
-
我对 SpaCy 不是很熟悉,但您是在数据上重新训练它还是直接使用它?
-
有一次我尝试用西班牙语进行词形还原,但我发现唯一有用的是使用来自 NLTK 的
SnowBallStemmer进行词干提取。 -
我不会说西班牙语,但对于英语词形还原,SpaCy 依赖于知道每个单词的词性。它在
nlp(text)的标记步骤中获取此信息,但它看起来不像您的文本是真实的句子,因此它可能使 POS 标签错误很多。这将导致错误。顺便说一句... SpaCy 对于英语词形还原只有大约 85% 的正确率。您可能想查看斯坦福的 CoreNLP 或 CLiPS/pattern.en,尽管所有这些解决方案都只能达到 90% 的低准确率,并且都需要知道单词的 POS。 -
如果您知道每个单词的词性(即...如果它们都是名词),您可以跳过标记步骤 (
nlp(text)) 并直接使用POS 类型。这将显着加快流程,并可能提高准确性。 -
如果您知道每个单词的词性,请尝试直接调用词形还原器并传入词性。如果您不知道每个单词的词性,那么词干提取可能是您唯一的选择。
标签: python spacy lemmatization