python - 从 Pandas 系列创建 Python Spacy NLP 对象的最佳方法
问题描述
我想从存储在 Pandas 数据框列中的 250k 字符串对象中创建 Spacy nlp 对象。有没有一种方法可以优化以下“应用”方法,即是否有某种方法可以对 spacy nlp 对象的调用进行矢量化?
import pandas as pd
import spacy
nlp = spacy.load("en_core_web_sm")
df = pd.DataFrame({"id": [1, 2, 3], "text": ["this is a text", "another easy one", "oh you come on"]})
df["nlp"] = df.apply(lambda x: nlp(x.text), axis=1)
解决方案
根据我对 29,071 个字符串的语料库的测试,这是一种比apply
使用更快的方法nlp.pipe
import pandas as pd
import spacy
from time import time
from nltk.corpus import webtext
nlp = spacy.load("en_core_web_sm")
texts = webtext.raw().split('\n')
df = pd.DataFrame({"text":texts})
#apply method
start = time()
df["nlp"] = df.apply(lambda x: nlp(x.text), axis=1)
end = time()
print(end - start)
# batch method
start = time()
df["nlp"] = [doc for doc in nlp.pipe(df["text"].tolist())]
end = time()
print(end - start)
#print(Counter([tok.dep_ for tok in doc if tok.pos_=='VERB']))
输出:
apply method: 209.74427151679993
batch method: 51.40181493759155
推荐阅读
- html - 未应用 Bootstrap 4 卡片组等高
- java - 实施国家以推动活动
- android - 如何解决我从android中的一组通知扩展时未显示的所有通知的问题
- django - 如何在本地环境中使用 Django 提供媒体文件?
- android - 在 Glide 4+ 中,转换未应用于 SVG
- html - 垂直和水平对齐输入和按钮
- autodesk-forge - Forge 查看器在其上添加 SVG 时会变慢
- c# - 具有 int 转换的 Npgsql 枚举数组在“包含”上抛出 InvalidCastException
- angular - Angular 视频验证器不要等待
- php - 在 PHP 中加密/解密特定数据