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

时间:2019-11-13 16:57:10

标签: python pandas dataframe nlp spacy

我正在使用Spacy nlp.pipe()获取pandas Dataframe列中文本数据的doc对象,但是代码中作为“文本”返回的已解析文本的 length 32 。但是,数据框的形状(14640,16)。 如果有人要读取数据,则为数据link

  

代码:

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

有人可以帮我解决这个问题吗?我在做什么错了?

1 个答案:

答案 0 :(得分:0)

根据Doc对象here的Spacy文档,__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')