在Spacy中使用nlp.pipe()获取Dataframe列的doc对象



我使用Spacy nlp.pipe((为pandas Dataframe列中的文本数据获取文档对象,但解析后的文本返回为";文本";代码中的长度仅为32。然而,数据帧的形状(14640,16(。如果有人想读取数据,这里有数据链接。

nlp = spacy.load("en_core_web_sm")
for text in nlp.pipe(iter(df['text']), batch_size = 1000, n_threads=-1):
print(text)
len(text)

结果:

32

有人能帮我吗?发生了什么事?我做错了什么?

根据此处Doc对象的Spacy Documentation,__len__操作符获取"文档中的令牌数"。

数据中的最后一个文本是:

>>> df['text'].values[-1]
@AmericanAir we have 8 ppl so we need 2 know how many seats are on the next flight. Plz put us on standby for 4 people on the next flight?

运行nlp.pipe()方法后,这句话将被标记为32个标记,这正是您所要求的。为了验证这一点,请尝试在len(text)之后运行以下代码,会得到确切的结果:

>>> last_tokens = [token for token in text]
>>> last_tokens
[@AmericanAir, we, have, 8, ppl, so, we, need, 2, know, how, many, seats, are, on, the, next, flight, ., Plz, put, us, on, standby, for, 4, people, on, the, next, flight, ?]
>>> len(last_tokens)
32

编辑

您可以迭代从管道返回的每个doc的令牌,如下所示:

nlp = spacy.load("en_core_web_sm")
for text in nlp.pipe(iter(df['text']), batch_size = 1000, n_threads=-1):
for token in text:
print(token)
print('n')

最新更新