python - SpaCy lemmatizer 删除大写
问题描述
我想对匈牙利语中的一些文本数据进行词形还原,并在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 和东芝笔记本电脑 (Portégé Z830-10R i3-2367M)。
解决方案
小写是 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 .
推荐阅读
- python - matplotlib 中的 Python 轴缩放
- android - Android Recycler View(网格布局管理器)
- php - Laravel 8:多选选项发送空请求
- php - 是的,我在 wordpress edit.php 中面临一个问题
- http - 请求标头中的 Sec-Fetch-Mode、Sec-Fetch-Dest、Sec-Fetch-Site 创建 CORS 问题
- google-sheets - 计算相关复选框
- python - 在 VSCode 中运行脚本时找不到 bson 模块,在终端的相同 conda 环境中工作正常
- html - 烧瓶 | HTML 不呈现通过 render_template 发送的数据
- google-cloud-firestore - Firestore add 为两个文档生成相同的文档 ID?
- r - 如何将多元丰度矩阵转换为R中的出现表?