我有一个由两列组成的dataframe,一个列有日期,另一个列有一个文本字符串。我想把课文分成几个句子,然后进行一些预处理。
下面是我所拥有的一个简单的例子:
import nltk
from nltk.corpus import stopwords
from pandarallel import pandarallel
pandarallel.initialize()
example_df=pd.DataFrame({'date':['2022-09-01'],'text':'Europa tiene un plan. Son cosas distintas. Perdón, esta es imagen dentro, y el recorte a los beneficios los ingresos totales conocimiento del uso fraudulento Además, el riesgo ha bajado. de gases nocivos, como el CO2. -La justicia europea ha confirmado se ha dado acceso al público por lo menos, intentar entrar. para reducir los contagios, vestido de chaqué. Han tenido que establecer de despido según informa que podría pasar desapercibida El Tribunal Supremo confirma en nuestra página web'})
spanish_tokenizer = nltk.data.load('tokenizers/punkt/PY3/spanish.pickle')
example_df['sentence']=example_df['text'].parallel_apply(lambda x: spanish_tokenizer.tokenize(x))如您所见,我依赖于原始文本上的nltk标记程序来创建包含句子列表的新列“句子”。
print(example_df['sentence'])
0 [Europa tiene un plan, Son cosas distintas, Perdón, esta es imagen dentro, y el recorte a los beneficios los ingresos totales conocimiento del uso fraudulento Además, el riesgo ha bajado, de gases nocivos, como el CO2, -La justicia europea ha confirmado se ha dado acceso al público por lo menos, intentar entrar, para reducir los contagios, vestido de chaqué, Han tenido que establecer de despido según informa que podría pasar desapercibida El Tribunal Supremo confirma en nuestra página web]
1 [casi todas las restricciones, Socios como Esquerra le echan un servicio público; con terrazas llenas Los voluntarios piden a todos los cuatros juntos en una semana la sentencia de cárcel para Griñán que Griñán no conoció la trama, de las hipotecas, A las afueras de Westminster]
Name: sentence, dtype: object
# Since commas might be misleading:
example_df.sentence[1]
['casi todas las restricciones',
'Socios como Esquerra le echan un servicio público; con terrazas llenas Los voluntarios piden a todos los cuatros juntos en una semana la sentencia de cárcel para Griñán que Griñán no conoció la trama, de las hipotecas',
'A las afueras de Westminster']我的下一个目标是清理那些句子。因为我需要标点符号才能让标记器工作,所以我认为我需要事后完成这个过程,这意味着,对于文本的每一个日期,每个句子都要循环。首先,我不知道如何用熊猫的结构来做这个操作,这里是我的一个尝试,以消除死胡同:
from nltk.corpus import stopwords
stop = stopwords.words('spanish')
example_df['sentence'] = example_df['sentence'].parallel_apply(lambda x: ' '.join(
[word for word in i.split() for i in x if word not in (stop)]))生成以下属性错误AttributeError: 'int' object has no attribute 'split':
是否有更有效/更优雅的方法来做到这一点?
发布于 2022-10-18 09:35:34
由于sentence列是标记文本(字符串列表),因此需要更改列表理解逻辑。
例:
sentences = ['casi todas las restricciones', 'Socios como Esquerra le echan un servicio público; con terrazas llenas Los voluntarios piden a todos los cuatros juntos en una semana la sentencia de cárcel para Griñán que Griñán no conoció la trama, de las hipotecas', 'A las afueras de Westminster']stopwords_removed = [word for word in sent.split() for sent in sentences if word not in stop]sent是列表中的句子,每个word是用空格拆分后得到的单个单词。
您的错误很可能是由于缺少axis参数而引起的。
df.Column.parallel_apply(func, axis=1)其中func是返回列表理解结果的函数。
https://stackoverflow.com/questions/74108189
复制相似问题