【问题标题】:Remove stopwords using spaCy from list dataframe使用 spaCy 从列表数据框中删除停用词
【发布时间】:2021-11-28 15:48:40
【问题描述】:

我想在标记化后使用 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

【问题讨论】:

    标签: python nlp spacy


    【解决方案1】:

    您正在处理一个字符串列表,而一个字符串不是 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)
    

    【讨论】:

    • 感谢您帮助我。那么,token.text 在我的代码中是什么意思?
    • @teapartyyyy SpaCy token 的文本属性。
    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 2021-02-02
    • 2021-06-13
    • 1970-01-01
    • 2018-09-28
    • 2016-09-25
    相关资源
    最近更新 更多