如何解决KeyError:在 python 中使用 GingerIt 解析 Pandas 中的文本数据时出现“更正”
##!pip install gingerit
from gingerit.gingerit import GingerIt
jd = []
for txt in list(data['Job Description']):
jd.append(GingerIt().parse(txt)['result'])
data['jd'] = jd
我想更正大约 3000 行的 Pandas 数据框中文本特征/列中的拼写和语法错误。每行包含 4-5 条语句。因此,我使用了gingerit.gingerit 中的GingerIt(),但出现错误。
KeyError Traceback (most recent call last)
<ipython-input-25-ea5c757d88d2> in <module>()
5 jd = []
6 for txt in list(datajd['Job Description']):
---->7 jd.append(GingerIt().parse(txt)['result'])
/usr/local/lib/python3.7/dist-packages/gingerit/gingerit.py in parse(self,text,verify)
26 )
27 data = request.json()
---> 28 return self._process_data(text,data)
29
30 @staticmethod
/usr/local/lib/python3.7/dist-packages/gingerit/gingerit.py in _process_data(self,data)
38 corrections = []
39
---> 40 for suggestion in reversed(data["Corrections"]):
41 start = suggestion["From"]
42 end = suggestion["To"]
KeyError: 'Corrections'
解决方法
GingerIt
拥有基于 API 密钥的付费高级服务,因此免费版本无法处理超过 300 个字符的句子。
您可以使用您选择的句子分割器,在这里,您可以使用 [pysb
Pragmatic Sentence Boundary Disambiguation module][1](使用 pip install pysbd
安装)。然后,将长度小于 300 个字符的句子通过 Ginger 运行并加入结果。
如果您可以有很长的句子,但仍想处理它们,请确保对句子进行进一步细分。在这里,我建议使用像 [^;:\n•]+[;,:\n•]?\s*
这样的正则表达式,它在 ;
、:
、换行符和项目符号上进行细分,但您可以添加更多您需要的字符。
from gingerit.gingerit import GingerIt # pip install gingerit
import pandas as pd
import pysbd,re # pip install pysbd
file = r'test.csv'
segmentor = pysbd.Segmenter(language="en",clean=False)
data = pd.read_csv(file)
subsegment_re = r'[^;:\n•]+[;,:\n•]?\s*'
def runGinger(par):
fixed = []
for sentence in segmentor.segment(par):
if len(sentence) < 300:
fixed.append(GingerIt().parse(sentence)['result'])
else:
subsegments = re.findall(subsegment_re,sentence)
if len(subsegments) == 1 or any(len(v) < 300 for v in subsegments):
# print(f'Skipped: {sentence}') // No grammar check possible
fixed.append(sentence)
else:
res = []
for s in subsegments:
res.append(GingerIt().parse(s)['result'])
fixed.append("".join(res))
return " ".join(fixed)
data['jd'] = data['Job Description'].apply(lambda x: runGinger(x))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。