Создание программы, которая возвращает счет с помощью ключа в списке - PullRequest
1 голос
/ 15 апреля 2019

Я в основном пытаюсь прочитать текстовый файл, удалить все символы и знаки препинания, отсутствующие в алфавите (AZ), а затем создать вывод, который перечисляет все слова в файле с партитурой рядом друг с другом , Чтобы получить оценку, я пытаюсь сравнить каждую букву слова с ключом. Этот ключ показывает, сколько стоит письмо. Суммируя все буквенные значения для данного слова, я получу общую оценку для этого слова.

alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
         'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
         'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
         's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
         'y': 2, 'z': 9}

Это то, что я имею до сих пор, но я полностью застрял.

with open("hunger_games.txt") as p:
    text = p.read()
    text = text.lower()

text = text.split()
new = []
for word in text:
    if word.isalpha() == False:
        new.append(word[:-1])
    else:
        new.append(word)

class TotalScore():

    def score():
        total = 0
        for word in new:
            for letter in word:
                total += alphakey[letter]
            return total

Я пытаюсь получить что-то вроде:

   you 5
   by 4
   cool 10

т. Д. .. для всех слов в списке. Заранее спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Знаки препинания должны быть удалены?Или вы делаете это, чтобы вы могли сопоставить ключи словаря?Если у вас все в порядке с пунктуацией, то это можно решить в несколько строк:

alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
     'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
     'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
     's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
     'y': 2, 'z': 9}

with open("hunger_games.txt") as p:
    text = p.read()
    text = text.lower()

    words = text.split()
    uniqueWords = {}

    for word in words:
        if not word in uniqueWords:
            uniqueWords[word] = sum([alphakey[letter] for letter in word if letter.isalpha()])

    print(uniqueWords)

Эта последняя строка может потребовать небольшого пояснения.Во-первых,

[alphakey[letter] for letter in word if letter.isalpha()]

- это пример того, что называется «списком».Это очень полезная функция Python, которая позволяет нам создавать весь список в одну строку.Тот, который я только что перечислил, будет проходить через каждую букву в «слове» и, если он алфавитный, будет возвращать значение из «альфа-ключа».Например, если слово было:

"hello"

, оно вернуло бы список:

[5, 7, 2, 2, 1]

Если бы слово было:

"w4h&t"

, понимание списка игнорировалось бы«4» и «&» и возвращаем список:

[2, 5, 7]

Чтобы превратить их в одно значение, мы заключаем в понимание функцию sum.Таким образом, окончательное значение 17 для слова "привет" и 14 для "w4h & t".

1 голос
/ 16 апреля 2019

Как отмечено в комментариях, вам не нужно иметь класс для этого, и ваш возврат будет пропущен, в противном случае я думаю, что ваша функция score делает то, что вам нужно для вычисления общего балла.

Если вам нужно иметь оценку за слово, вы можете использовать словарь (снова), чтобы сохранить их:

def word_score(word):
  return sum(alphakey[l] for l in word)

def text_scores(filename):
  with open(filename) as p:
    text = p.read()
  text = re.sub(r'[^a-zA-Z ]', '', text.lower())
  return {w: word_score(w) for w in text.split()}

print(text_scores("hunger_games.txt"))

Если hunger_games.txt содержит "ты круто", то это печатает:

{'you': 8, 'by': 9, 'cool': 8}
0 голосов
/ 16 апреля 2019

Я предлагаю вам использовать nltk для манипулирования текстом. Вот мое решение (вы можете сократить некоторые куски кода, я просто сделал его визуально более простым для понимания).

По сути, вы разбиваете текст на список слов, затем мы можем удалить все дубликаты, используя функцию set (), и затем мы перебираем все слова, вычисляя оценку. Я надеюсь, что код достаточно ясен.

import nltk

alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
         'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
         'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
         's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
         'y': 2, 'z': 9}

text = """
boy girl girl boy dog Dog car cAr dog girl you by cool 123asd .asd; 12asd
"""

words = []
results = {}

sentences = nltk.sent_tokenize(text)
for sentence in sentences:
    words += nltk.word_tokenize(sentence)

words = list(set([word.lower() for word in words]))

for word in words:
    if word.isalpha():
        total = 0
        for letter in word:
            total += alphakey[letter]
        results[word] = total


for val in results:
    print(f"{val} {results[val]}")

выход:

dog 7
you 8
by 9
boy 10
cool 8
car 13
girl 11
...