如何实现spaCy分句结果在Pandas DataFrame中的预期格式输出?
如何调整spaCy分句代码以得到预期的Pandas DataFrame格式?
嘿,我懂你现在的困扰——用spaCy分句后存进DataFrame,结果每个单词都被拆成了单独的列,完全不是想要的整句格式对吧?其实问题出在你直接把spaCy返回的Span对象丢进了DataFrame,Pandas会自动把这些Span拆成单个token,所以才会出现多列的情况。只需要加一步转换,把每个分句变成字符串就行啦!
问题根源
doc.sents返回的是spaCy的Span对象迭代器,每个Span代表一个分句,但它本质上是一系列token的集合。当你直接把这些Span放进DataFrame时,Pandas会把集合里的每个token拆成单独的列,这就是你看到当前输出的原因。
修正后的完整代码
# -*- coding: utf-8 -*- #!/usr/bin/env python from __future__ import unicode_literals import spacy, en_core_web_sm import pandas as pd # 加载spaCy英文小模型 nlp = en_core_web_sm.load() # 读取文本文件(用with语句更安全,避免文件未关闭) with open('o.txt', 'r') as f: text_content = f.read().decode('utf8') # 适配Python 2的编码处理 doc = nlp(unicode(text_content)) # 打印分句结果(可选步骤,验证分句是否正确) for idno, sentence in enumerate(doc.sents): print 'Sentence {}:'.format(idno + 1), sentence # 关键一步:把每个分句Span转换成字符串,存入列表 sentences_list = [str(sent) for sent in doc.sents] # 创建DataFrame,直接用字符串列表即可 df = pd.DataFrame(sentences_list) print df
代码说明
- 字符串转换:
[str(sent) for sent in doc.sents]这行代码把每个分句Span转换成完整的字符串,这样列表里的每个元素都是一整句话。 - DataFrame创建:用这个字符串列表创建DataFrame时,Pandas会自动把每个字符串作为一行的单个单元格,刚好符合你想要的格式。
- 可选优化:如果你想给列起个更有意义的名字,可以改成
df = pd.DataFrame(sentences_list, columns=['完整分句']),输出的列名就会变成你指定的内容。
运行这段代码后,你就能得到和预期完全一致的输出啦:
0 0 This is a sample sentence. 1 This is a second sample sentence. 2 This is a third sample sentence.
内容的提问来源于stack exchange,提问作者Programmer_nltk
相关产品推荐
相关产品推荐

