Как вывести частоту каждого уникального слова из строки с циклом for в python - PullRequest
0 голосов
/ 10 октября 2018

В этом абзаце должны быть пробелы и произвольная пунктуация, я удалил их в цикле for, выполнив .replace.Затем я превратил абзац в список с помощью .split (), чтобы получить ['the', 'title', 'etc'].Затем я сделал две функции подсчета слов для подсчета каждого слова, но я не хотел, чтобы он подсчитывал каждое слово, поэтому я сделал другую функцию для создания уникального списка.Тем не менее, мне нужно создать цикл for, чтобы распечатать каждое слово и сколько раз оно было сказано с выводом примерно так:

The word The appears 2 times in the paragraph.
The word titled appears 1 times in the paragraph.
The word track appears 1 times in the paragraph.

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

    paragraph = """  The titled track “Heart Attack” does not interpret the 
    feelings of being in love in a serious way, 
    but with Chuu’s own adorable emoticon like ways. The music video has 
    references to historical and fictional 
    figures such as the artist Rene Magritte!!....  """


for r in ((",", ""), ("!", ""), (".", ""), ("  ", "")):
    paragraph = paragraph.replace(*r)

paragraph_list = paragraph.split()


def count_words(word, word_list):

    word_count = 0
    for i in range(len(word_list)):
        if word_list[i] == word:
            word_count += 1
    return word_count

def unique(word):
    result = []
    for f in word:
        if f not in result:
            result.append(f)
    return result
unique_list = unique(paragraph_list)

Ответы [ 3 ]

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

Лучше, если вы используете re и get со значением по умолчанию:

paragraph = """  The titled track “Heart Attack” does not interpret the
feelings of being in love in a serious way,
but with Chuu’s own adorable emoticon like ways. The music video has
references to historical and fictional
figures such as the artist Rene Magritte!!....  c c c c c c c ccc"""

import re

word_count = {}
for w in re.split(' |,|“|”|!|\?|\.|\n', paragraph.lower()):
    word_count[w] = word_count.get(w, 0) + 1
del word_count['']

for k, v in word_count.items():
    print("The word {} appears {} time(s) in the paragraph".format(k, v))

Выходной:

The word the appears 4 time(s) in the paragraph
The word titled appears 1 time(s) in the paragraph
The word track appears 1 time(s) in the paragraph
...

Это дискуссионными, что делать с Chuu’s, Я решил не разбивать на , но вы можете добавить это позже, если хотите.

Обновление:

Следующая строка разбивается paragraph.lower() с помощьюрегулярное выражение.Преимущество состоит в том, что вы можете описать несколько разделителей

re.split(' |,|“|”|!|\?|\.|\n', paragraph.lower()

По отношению к этой строке:

word_count[w] = word_count.get(w, 0) + 1

word_count - словарь.Преимущество использования get заключается в том, что вы можете определить значение по умолчанию, если w еще нет в словаре.Строка в основном обновляет счет для слова w

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

Осторожно, ваш пример текста прост, но правила пунктуации могут быть сложными или не соблюдаются правильно.Какой текст содержит 2 соседних пробела (да, это неправильно, но часто)?Что если писатель более привык к французскому языку и пишет пробелы до и после двоеточия или точки с запятой?

Я думаю, что конструкция 's нуждается в специальной обработке.Как насчет: """John has a bicycle. Mary says that her one is nicer that John's.""" ИМХО слово John встречается здесь дважды, в то время как ваш алгоритм будет видеть 1 John и 1 Johns.

Кроме того, текст Unicode теперь распространен на веб-страницах, вам следуетбудьте готовы найти высокие коды эквивалентов пробелов и знаков препинания:

“ U+201C LEFT DOUBLE QUOTATION MARK
” U+201D RIGHT DOUBLE QUOTATION MARK
’ U+2019 RIGHT SINGLE QUOTATION MARK
‘ U+2018 LEFT SINGLE QUOTATION MARK
  U+00A0 NO-BREAK SPACE

Кроме того, в соответствии с этим более старый вопрос наилучшим способом устранения пунктуации является translate.Связанный вопрос использует синтаксис Python 2, но в Python 3 вы можете сделать:

paragraph = paragraph.strip()                   # remove initial and terminal white spaces
paragraph = paragraph.translate(str.maketrans('“”’‘\xa0', '""\'\' '))  # fix high code punctuations
paragraph = re.replace("\w's\s", "", paragraph)  # remove 's
paragraph = paragraph.translate(str.maketrans(None, None, string.punctuation) # remove punctuations
words = paragraph.split()
0 голосов
/ 10 октября 2018

Пожалуйста, попробуйте это:

paragraph = """  The titled track “Heart Attack” does not interpret the 
feelings of being in love in a serious way, 
but with Chuu’s own adorable emoticon like ways. The music video has 
references to historical and fictional 
figures such as the artist Rene Magritte!!....  c c c c c c c ccc"""

characterToRemove = (",","!",".","?",'“','”')
for i in paragraph:
    if i in characterToRemove:
         paragraph = paragraph.replace(i,"")

paragraph=paragraph.split()
uniqueWords=set(paragraph)
dictionartWords={}
for i in uniqueWords:
    dictionartWords[i]=0

for i in paragraph:
    if i in dictionartWords.keys():
        dictionartWords[i]+=1

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

 print(dictionartWords)

{'The': 2, 'like': 1, 'серьезно': 1, 'озаглавлено': 1, 'Rene': 1, 'a': 1, 'artist': 1, 'video':1, «c»: 7, «with»: 1, «track»: 1, «to»: 1, «fictional»: 1, «чувства»: 1, «ccc»: 1, «но»: 1,«не»: 1, «имеет»: 1, «интерпретировать»: 1, «путь»: 1, «как»: 1, «из»: 1, «смайлик»: 1, «сердце»: 1, «в»': 2,' очаровательны ': 1,' любовь ': 1,' ссылки ': 1,' бытие ': 1,' Магритт ': 1,' Чуу ': 1,' исторический ': 1,' такой ':1, 'и': 1, 'did': 1, 'music': 1, 'the': 2, 'figure': 1, 'Attack': 1, 'own': 1, 'way': 1}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...