Dask: TypeError: __call __ () принимает 2 позиционных аргумента, но 3 было дано - PullRequest
0 голосов
/ 18 октября 2019

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

Я занимаюсь чтением фрейма данных и использованием stanfordnlp для токенизации текстового столбца. и затем достаньте nouns. Он работает нормально только при использовании pandas, но при использовании dask я получаю эту ошибку. Я на Ubuntu, python 3.7.3 и Dask 2.6.0.

Это моя ошибка:

Traceback (последний вызов был последним): файл "main.py",строка 56, в основной (df = data, nlp = nlp, lang = lang, wanted_pos = wp)
Файл "main.py", строка 13, в основном файле df.persist () "/ home / bertil / Envs/datascience/lib/python3.7/site-packages/dask/base.py ", строка 138, в файле persist (result,) = persist (self, traverse = False, ** kwargs)" / home / bertil / Envs/datascience/lib/python3.7/site-packages/dask/base.py ", строка 629, в постоянных результатах = расписание (dsk, ключи, ** kwargs)
Файл" / home / bertil / Envs / datascience/lib/python3.7/site-packages/dask/threaded.py ", строка 80, в файле get ** kwargs
File" /home/bertil/Envs/datascience/lib/python3.7/site-packages/dask / local.py ", строка 486, в get_async повышение_эксклюзии (без учета, tb)
Файл" /home/bertil/Envs/datascience/lib/python3.7/site-packages/dask/local.py ", строка316, в ререйз-рейсе exc
Файл "/home/bertil/Envs/datascience/lib/python3.7/site-packages/dask/local.py", строка 222,в execute_task result = _execute_task (task, data)
Файл "/home/bertil/Envs/datascience/lib/python3.7/site-packages/dask/core.py", строка 118, в _execute_task args2 = [_execute_task(a, кэш) для аргументов in]]
Файл "/home/bertil/Envs/datascience/lib/python3.7/site-packages/dask/core.py", строка 118, в args2 = [_execute_task (a, кеш) для аргументов в аргументах]
Файл "/home/bertil/Envs/datascience/lib/python3.7/site-packages/dask/core.py", строка 119, в _execute_task return func (* args2)
TypeError: call () принимает 2 позиционных аргумента, но было дано 3

Это мой код:

#!/usr/bin/env python

from pathlib import Path
import dask.dataframe as dd
import stanfordnlp
import string


def main(df, nlp, lang, wanted_pos):
    df['tagged'] = df['Message'].apply(process,
                                       args=(nlp, lang, wanted_pos,),
                                       meta=('Message', 'object'))
    df.persist()
    df.to_csv(f'output.csv')


def process(text, nlp, lang, wanted_pos):
    # Remove punctuation
    text = text.translate(str.maketrans('', '', string.punctuation))
    token = nlp(text)
    words = {word for sent in token.sentences for word in sent.words}
    wanted_words = set(filter(lambda x: x in wanted_pos, words))
    wanted_words = ','.join(word for word in wanted_words if word)
    return wanted_words


if __name__ == '__main__':
    # Choose language
    lang = 'da'

    # Chose wanted_pos
    wp = ['NOUN']

    # Read data in chunks
    data = dd.read_csv('sample.csv', quoting=3, error_bad_lines=False,
                       dtype={'Message': 'object',
                              'Action Time': 'object',
                              'ClientQueues': 'object',
                              'Country': 'object',
                              'Custom Tags': 'object',
                              'Favorites': 'object',
                              'Geo Target': 'object',
                              'Location': 'object',
                              'State': 'object'})



    # Download model for nlp.
    stanford_path = Path.home() / 'stanfordnlp_resources' / f'{lang}_ddt_models'
    if not stanford_path.exists():
        stanfordnlp.download(lang)

    # Set up nlp pipeline
    nlp = stanfordnlp.Pipeline(processors='tokenize,lemma,pos', lang=lang)

    main(df=data, nlp=nlp, lang=lang, wanted_pos=wp)

Обновление: я думалЯ исправил это, но не сделал, поэтому я снова удалил свой ответ. Я все еще испытываю проблему

...