TypeError: translate () принимает ровно 1 аргумент (2 задано) Python

Я нашел этот код Python для выполнения стемминга текстовых файлов.

import nltk
import string
from collections import Counter


def get_tokens():
    with open('/Users/MYUSERNAME/Desktop/Test_sp500/A_09.txt', 'r') as shakes:
        text = shakes.read()
        lowers = text.lower()
        no_punctuation = lowers.translate(None,string.punctuation)
        tokens = nltk.word_tokenize(no_punctuation)
        return tokens


tokens = get_tokens()
count = Counter(tokens)
print
count.most_common(10)

from nltk.corpus import stopwords

tokens = get_tokens()
filtered = [w for w in tokens if not w in stopwords.words('english')]
count = Counter(filtered)
print
count.most_common(100)

from nltk.stem.porter import *


def stem_tokens(tokens, stemmer):
    stemmed = []
    for item in tokens:
        stemmed.append(stemmer.stem(item))
    return stemmed


stemmer = PorterStemmer()
stemmed = stem_tokens(filtered, stemmer)
count = Counter(stemmed)
print
count.most_common(100)

Когда я пытаюсь запустить эту программу, я получаю следующую ошибку:

Traceback (most recent call last):
  File "/Users/MYUSERNAME/Desktop/stemmer.py", line 15, in <module>
    tokens = get_tokens()
  File "/Users/MYUSERNAME/Desktop/stemmer.py", line 10, in get_tokens
    no_punctuation = lowers.translate(None,string.punctuation)
TypeError: translate() takes exactly one argument (2 given)

Теперь мои вопросы:

  1. Как я могу это исправить?
  2. Когда эта программа работает, как я могу запустить этот сценарий не только для одного файла .txt, но и для всех файлов .txt в определенном каталоге?

Примечание. Обычно мне не нужно программировать, поэтому я знаю только абсолютные основы Python.


person paschy96    schedule 20.10.2018    source источник
comment
lowers.translate(None,string.punctuation) передается два аргумента, но он принимает только один. Прочтите документацию translate и выясните, что следует передать в качестве аргумента   -  person Sheldore    schedule 20.10.2018


Ответы (1)


Я предполагаю, что вы используете версию Python> = 3.

В Python 2.7 функция translate принимает 2 аргумента, но в Python 3 и новее, принимает только 1 аргумент . По сути, поэтому вы получаете сообщение об ошибке.

Я не уверен, что вы пытаетесь сделать с аргументом None, потому что в Python 2.7 это все равно не имело бы никакого смысла, вы в основном пытаетесь перевести string.punctuation в None.

Вместо этого вам нужно будет создать таблицу перевода, а затем передать ее функции перевода.

translator = str.maketrans('', '', string.punctuation)
no_punctuation = lowers.translate(translator)
person Johan    schedule 20.10.2018