使用 spaCy 从列表数据框中删除停用词

Remove stopwords using spaCy from list dataframe

我想在分词后使用 spaCy 删除停用词。但是,给我一个错误,错误是 AttributeError: 'str' object has no attribute 'is_stop' 我想要做的数据是标记化过程之后的数据,它位于名为 'tokenizing' 的列中 如何解决?

import pandas as pd
from spacy.lang.id import Indonesian

nlp = Indonesian()

data = [
    'Aku suka sekali beradai di wilayah yang dingin',
    'Kembali jika terjadi sesuatu di sana',
    'Sampai berapa lama kamu akan pergi dari sini',
]
df = pd.DataFrame({'text': data})
df['text'] = df['text'].str.lower()
df.head()

#Tokenizing
def tokenize(word):
  return [token.text for token in nlp(word)]

df['tokenizing'] = df['text'].apply(tokenize)
df.head()

#Remove stopwords
def stopwords_remover(words):
  return [stopwords for stopwords in words if not stopwords.is_stop]

df['stopwords'] = df['tokenizing'].apply(stopwords_remover)
df

您正在处理一个字符串列表,而字符串不是 SpaCy 标记,因此它没有 is_stop 属性。

您需要在 tokenizing 列中保留 SpaCy 令牌列表,将 def tokenize(word) 更改为:

def tokenize(word):
    return [token for token in nlp(word)]

输出:

如果您需要在 tokenizing 列中填充标记文本并从头开始制作 stopwords,请使用

def stopwords_remover(words):
    return [stopwords for stopwords in nlp(words) if not stopwords.is_stop]

df['stopwords'] = df['text'].apply(stopwords_remover)