如何将spaCy生成的spacy.tokens.doc.Doc存入Pandas DataFrame?
解决方法
你的问题出在两个核心点:一是误用了pd.DataFrame.add()(这是用于数据帧算术相加的方法,并非添加行的工具);二是直接将spacy.tokens.doc.Doc对象传入DataFrame,这类对象需要先转换为字符串才能被DataFrame识别。
正确的做法是先把所有生成的文本收集到列表中,最后一次性转换为DataFrame,这种方式不仅避免报错,运行效率也更高:
- 初始化一个空列表存储生成的文本
- 循环中将每个
Doc对象通过doc.text(或str(doc))转换为字符串,追加到列表 - 最后用列表直接创建DataFrame
修改后的完整代码
import spacy import pandas as pd import augmenty nlp = spacy.load('en_core_web_sm') # 初始化空列表存增强后的文本 augmented_texts = [] docs = nlp.pipe(df['Text']) syn_augmenter = augmenty.load('random_synonym_insertion.v1', level=0.1) for doc in augmenty.docs(docs, augmenter=syn_augmenter, nlp=nlp): # 将Doc对象转为字符串后加入列表 augmented_texts.append(doc.text) # 把列表转为DataFrame newDataSet = pd.DataFrame({'Augmented_Text': augmented_texts})
进阶:保留原文本与增强文本的对应关系
如果需要同时存储原文本和生成的增强文本,可以这样写:
augmented_data = [] # 同时遍历原文本和增强后的Doc对象 for original_text, doc in zip(df['Text'], augmenty.docs(nlp.pipe(df['Text']), augmenter=syn_augmenter, nlp=nlp)): augmented_data.append({ 'Original_Text': original_text, 'Augmented_Text': doc.text }) newDataSet = pd.DataFrame(augmented_data)
内容的提问来源于stack exchange,提问作者DiegoIE
相关产品推荐
相关产品推荐

