TypeError: translate () принимает ровно 1 аргумент (2 дано) Python - PullRequest
0 голосов
/ 20 октября 2018

Я обнаружил, что этот код 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 в определенномdirectory?

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

1 Ответ

0 голосов
/ 20 октября 2018

Я бы предположил, что вы используете версию 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)
...