WordNetLemmatizer об ошибках dask.dataframe с объектом «WordNetCorpusReader» не имеет атрибута «_LazyCorpusLoader__args» - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь выполнить остановку на фрейме данных dask

wnl = WordNetLemmatizer()

def lemmatizing(sentence):
    stemSentence = ""

    for word in sentence.split():
        stem = wnl.lemmatize(word)
        stemSentence += stem
        stemSentence += " "

        stemSentence = stemSentence.strip()

    return stemSentence

df['news_content'] = df['news_content'].apply(stemming).compute()

Но я получаю следующую ошибку:

AttributeError: 'WordNetCorpusReader' object has no attribute '_LazyCorpusLoader__args'

Я уже попробовал то, что было рекомендовано здесь , но без везения.

Спасибо за помощь.

1 Ответ

0 голосов
/ 04 марта 2019

Это потому, что модуль wordnet был "лениво прочитан" и еще не оценен.

Один хак, чтобы заставить его работать, - это сначала использовать WordNetLemmatizer() один раз, прежде чем использовать его в кадре данных Dask, например,

>>> from nltk.stem import WordNetLemmatizer
>>> import dask.dataframe as dd

>>> df = dd.read_csv('something.csv')
>>> df.head()
                      text  label
0       this is a sentence      1
1  that is a foo bar thing      0


>>> wnl = WordNetLemmatizer()
>>> wnl.lemmatize('cats') # Use it once first, to "unlazify" wordnet.
'cat'

# Now you can use it with Dask dataframe's .apply() function.
>>> lemmatize_text = lambda sent: [wnl.lemmatize(word) for word in sent.split()]

>>> df['lemmas'] = df['text'].apply(lemmatize_text)
>>> df.head()
                      text  label                          lemmas
0       this is a sentence      1         [this, is, a, sentence]
1  that is a foo bar thing      0  [that, is, a, foo, bar, thing]

В качестве альтернативы, вы можете попробовать pywsd:

pip install -U pywsd

Затем в коде:

>>> from pywsd.utils import lemmatize_sentence
Warming up PyWSD (takes ~10 secs)... took 9.131901025772095 secs.

>>> import dask.dataframe as dd

>>> df = dd.read_csv('something.csv')
>>> df.head()
                      text  label
0       this is a sentence      1
1  that is a foo bar thing      0

>>> df['lemmas'] = df['text'].apply(lemmatize_sentence)
>>> df.head()
                      text  label                          lemmas
0       this is a sentence      1         [this, be, a, sentence]
1  that is a foo bar thing      0  [that, be, a, foo, bar, thing]
...