使用Pandas和spaCy进行分词处理

17
我正在开发我的第一个Python项目,有一个相当大的数据集(数万行)。 我需要对5个文本列(每个“单元格”多个文本句子)进行一些自然语言处理(聚类、分类),并使用pandas来组织/构建数据集。 我希望使用spaCy进行所有的自然语言处理,但是无法弄清楚如何令我的列中的文本进行标记化。我已经阅读了大量的spaCy文档,并在Google上搜索,但我找到的所有示例都是针对单个句子或单词的,而不是针对pandas df中的75K行。

我尝试过像这样的东西:df['new_col'] = [token for token in (df['col'])]

但我肯定会感激一些帮助/资源。

完整的(虽然杂乱无章的)代码在此处可用


你遇到了什么具体的问题?你是否收到了错误提示? - Peter
@Peter,我没有收到错误信息,但是似乎文本没有被分词(即当我尝试进行进一步的处理,如词形还原时,我会收到一个错误,基本上是说文本仍然是字符串格式而不是标记)。 - LMGagne
2个回答

37

我从未使用过spaCy(nltk一直为我完成了工作),但从文档上看,似乎应该可以这样做:

import spacy
nlp = spacy.load('en')

df['new_col'] = df['text'].apply(lambda x: nlp(x))

请注意,默认情况下nlp会运行整个SpaCy流程,包括词性标注、分析和命名实体识别。您可以使用nlp.tokenizer(x)代替nlp(x),或在加载模型时禁用管道的某些部分,从而显著加快代码速度。例如:nlp = spacy.load('en', parser=False, entity=False)


我们如何将列中的结果更改为列表? - Ahmad

2

使用pandarallel让它更快

import spacy
from pandarallel import pandarallel

pandarallel.initialize(progress_bar=True)    
nlp = spacy.load("en_core_web_sm")

df['new_col'] = df['text'].parallel_apply(lambda x: nlp(x))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接