我有一个大型的熊猫调查字符串响应数据框,我们想试用Spacy的NLP的一些功能。我们目前只是在探索这些功能,但正在努力解决如何将数据格式化为与空间的 nlp 函数一起使用的格式。
最终,我们希望能够根据其用户数据在字符串响应中查看热门主题。
如何在数据帧的列上运行 nlp 管道?还是我绕错了路?
首先使用语言模型调用spacy.load()
。这将根据您选择的模型,为您选择的语言加载分词器、标记器、解析器、NER 和词向量。这存储在spaCy
文档中名为nlp
的变量中。
nlp = spacy.load(language_model)
我们现在可以使用任何类型的文本字符串调用nlp()
。那么为什么不:nlp(df['column_with_strings'])
工作呢?因为df['column_with_strings']
不是字符串,所以它是一个pandas.Series
:
类型错误:参数"字符串"的类型不正确(预期的 str,得到系列(
因此,您需要做的是对pandas.Series
中的每个值调用nlp()
。您可以通过构造函数并使用df['column_with_strings'].apply()
或通过迭代序列中的每一行来执行此操作。
有一种更有效、更快速的方法可以通过 spaCy 的nlp
管道解析带有文本的系列。SpaCy 建议在处理大量文本时使用nlp.pipe()
。
按照文档中给出的说明,您可以执行以下操作:
texts = dataframe['series_with_text]
(确保已将值的类型转换为字符串,并且已移除数据框中可能存在的任何 NaN 值(。
然后:
docs = list(nlp.pipe(texts))
我在一列数据帧上使用列表推导来使用以下代码获取每行的文本向量:
tweet_text = [[nlp(token).vector_norm for token in text.split()] for text in tweet_df_multi['tweet_text']]
但问题是我用逗号(,(值值。