Наиболее часто встречающиеся слова из текста, исключая слова определенной длины - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблемы с поиском решения моей проблемы, может быть, кто-то сможет помочь.У меня есть стихотворение, и я могу отображать наиболее распространенные слова, хотя я хочу, чтобы все строки длиной менее 5 символов не отображались в моем, скажем, 20 самых распространенных списках.

import collections

import re

words = re.findall(r'\w+', open('some_poem.txt').read().lower())
most_common = collections.Counter(words).most_common(20)


print(most_common)

Существует ли короткий и понятный способ добавить такую ​​функциональность?Чтобы не отображать строки длиной 5 или менее символов?Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Если под "короче 5" вы имеете в виду "длиной менее 5 символов", вы можете просто изменить свое регулярное выражение, чтобы не возвращать эти слова в первую очередь, используя {5,} (пять или более) вместо + (один или несколько):

words = re.findall(r'\w{5,}', open('some_poem.txt').read().lower())

Ниже указано не , что вы просили, но в зависимости от того, что вы действительно хотите, может быть более полезным получить set из остановите слова и отфильтруйте их из списка слов, поскольку вполне могут быть «релевантные» слова, содержащие не более пяти букв, и не относящиеся к делу с большим.

stop_words = set("a,able,about,across,...,you,your".split(","))
words = re.findall(r'\w+', open('some_poem.txt').read().lower())
words = [word for word in words if word not in stop_words]

Кроме того, для полноты картины, как отмечается в комментариях, вы должны использовать привычку with открывать файлы, чтобы впоследствии убедиться, что они правильно закрыты.

with open('some_poem.txt') as f:
    words = re.findall(r'\w{5,}', f.read().lower())
0 голосов
/ 28 февраля 2019

A Counter - это просто словарь, поэтому мы можем использовать сложное понимание, чтобы отфильтровать нужные нам результаты:

{ k: v for k, v in most_common.items() if v > 5 }
...