SpaCy lemmatizer删除大写字母

时间:2020-09-01 18:29:10

标签: python nlp spacy

我想用匈牙利语对一些文本数据进行词法化处理,并在spaCy中遇到了一个奇怪的功能。 token.lemma_函数在复数形式方面效果很好,但是,它返回的某些句子中没有首字母大写。这很烦人,因为我的下一个函数unnest_stences(R)需要首字母大写才能识别文本并将其分解为单个句子。

首先,我认为问题在于自从收到警告以来,我使用了最新版本的spaCy

用户警告:[W031]模型“ hu_core_ud_lg”(0.3.1)需要spaCy v2.1 并且与当前的spaCy版本(2.3.2)不兼容。这可能 导致意外结果或运行时错误。为了解决这个问题, 下载更新的兼容模型或使用以下方法重新训练您的自定义模型 当前的spaCy版本。

所以我继续并安装了spacy 2.1,但是问题仍然存在。

我的数据来源是一些我无法在此处共享的电子邮件,但这是一个小小的人工示例:

# pip install -U spacy==2.1 # takes  9 mins
# pip install hu_core_ud_lg # takes 50 mins

import spacy
from spacy.lemmatizer import Lemmatizer
import hu_core_ud_lg
import pandas as pd
nlp = hu_core_ud_lg.load()

a = "Tisztelt levélíró!"
b = "Köszönettel vettük megkeresését."
df = pd.DataFrame({'text':[a, b]})

output_lemma = []

for i in df.text:
    mondat = ""
    doc = nlp(i)    
    for token in doc:
        mondat = mondat + " " + token.lemma_
    output_lemma.append(mondat)

output_lemma

产生

[' tisztelt levélíró !', ' köszönet vesz megkeresés .']

但我希望

[' Tisztelt levélíró !', ' Köszönet vesz megkeresés .']

当我将原始数据传递给该函数时,它将返回一些句子的首字母大写,另一些句子则小写。由于某些奇怪的原因,我无法在上面重现该模式,但我想要点是可见的。该功能无法正常工作。

有什么想法我可以解决这个问题吗?

我正在使用Jupyter Notebook,Python 2.7,Win 7和Toshiba笔记本电脑(PortégéZ830-10R i3-2367M)。

1 个答案:

答案 0 :(得分:0)

小写字母是spaCy lemmatizer对于非专有名词标记的预期行为。

一种解决方法是检查每个标记是否用大写字母表示,并在定格后转换为原始大小写(仅适用于第一个字符)。

import spacy

nlp = spacy.load('en_core_web_sm')

text = 'This is a test sentence.'
doc = nlp(text)
newtext = ' '.join([tok.lemma_.title() if tok.is_title else tok.lemma_ for tok in doc])
print(newtext)
# This be a test sentence .