Счетчик Python 3, который игнорирует строки длиной менее x символов - PullRequest
0 голосов
/ 16 октября 2019

У меня есть программа, которая считает слова текстового файла. Теперь я хочу ограничить счетчик строками из более чем x символов

from collections import Counter
input = 'C:/Users/micha/Dropbox/IPCC_Boox/FOD_v1_ch15.txt'

Counter = {}
words = {}
with open(input,'r', encoding='utf-8-sig') as fh:
  for line in fh:
    word_list = line.replace(',','').replace('\'','').replace('.','').lower().split()
    for word in word_list:
      if word not in Counter:
        Counter[word] = 1
      else:
        Counter[word] = Counter[word] + 1
N = 20
top_words = Counter(Counter).most_common(N)
for word, frequency in top_words:
    print("%s %d" % (word, frequency))

Я попробовал код re, но он не работал.

    re.sub(r'\b\w{1,3}\b')

Я не знаю, какреализовать это ...

В конце я хотел бы получить вывод, который игнорирует все короткие слова, такие как и, вы, быть и т. д.

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Несколько заметок.

1) Вы импортируете Counter, но не используете его должным образом (вы делаете Counter = {}, перезаписывая таким образом импорт).

from collections import Counter

2) Вместо нескольких replace с использованием понимания списка с set, он быстрее и выполняет только одну (две с объединением) итераций вместо нескольких:

sentence = ''.join([char for char in line if char not in {'.', ',', "'"}])
word_list = sentence.split()

3) Используйте счетчик исписок компов для длины:

c = Counter(word for word in word_list if len(word) > 3)

Вот так.

0 голосов
/ 16 октября 2019

Счетчик уже делает то, что вы хотите. Вы можете «кормить» его итеративным, и это будет работать. https://docs.python.org/2/library/collections.html#counter-objects Вы также можете использовать функцию фильтра https://docs.python.org/3.7/library/functions.html#filter Может выглядеть так:

counted = Counter(filter(lambda x: len(x) >= 5, words))

0 голосов
/ 16 октября 2019

Вы можете сделать это проще с:

  for word in word_list:
      if len(word) < 5:   # check the length of each word is less than 5 for example
          continue        # this skips the counter portion and jumps to next word in word_list
      elif word not in Counter:
          Counter[word] = 1
      else:
          Counter[word] = Counter[word] + 1
...