Здравствуйте, я играл с простой программой, которая читает текст и определяет ключевые слова, где заглавная буква. У меня проблема в том, что программа не удалит пунктуацию из слов, что я имею в виду, Фродо Фродо. Фродо, появляются как разные записи, а не как один и тот же. Я пытался использовать строку импорта и играть с пунктуацией, но это не сработало.

Ниже приведены мой код и текст, который я использовал с http://www.angelfire.com /rings/theroaddownloads/fotr.pdf (скопировано в текстовый документ с именем novel.txt). Спасибо еще раз

by_word = {}
with open ('novel.txt') as f:
  for line in f:
    for word in line.strip().split():
      if word[0].isupper():
        if word in by_word:
          by_word[word] += 1
        else:
          by_word[word] = 1

by_count = []
for word in by_word:
  by_count.append((by_word[word], word))

by_count.sort()
by_count.reverse()

for count, word in by_count[:100]:
  print(count, word)
0
Joshua Robertson 24 Апр 2017 в 05:08

2 ответа

Лучший ответ

Надеюсь, что это ниже будет работать для вас, как ожидалось:

import string
exclude = set(string.punctuation)

by_word = {}
with open ('novel.txt') as f:
  for line in f:
    for word in line.strip().split():
      if word[0].isupper():
        word = ''.join(char for char in word if char not in exclude)
        if word in by_word:
          by_word[word] += 1
        else:
          by_word[word] = 1

by_count = []
for word in by_word:
  by_count.append((by_word[word], word))

by_count.sort()
by_count.reverse()

for count, word in by_count[:100]:
  print(count, word)

Это удалит все

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 

Из word.

1
Claudio 24 Апр 2017 в 02:24

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

for word in line.strip().split():

Можно изменить на

for word in re.split('[,.;]',line.strip()):

Где первый аргумент в [] содержит все знаки препинания. Для этого используется модуль re, https: // docs. python.org/2/library/re.html#re.split.

0
Pbd 24 Апр 2017 в 02:15