Подсчет частоты слов в питоне - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь убрать пунктуацию и посчитать частоту слов. Часть моего кода работает, но мои коды кажутся неполными.

def word_distribution(text_string):    
words_list = text_string.split()
words_list = [words_list[i].lower() for i in range(len(words_list))]

for i in range(len(words_list)):
    if not words_list[i].isalpha():
        word = words_list[i]
        for j in word:
            if j != "\'" and  not j.isalpha():
                id = word.find(j)
                words_list[i] = word.replace(word[id],"")

words_dict = {}
for word in words_list:
    if word in words_dict:
        words_dict[word] += 1
    else:
        words_dict[word] = 1    
result = words_dict
return result

word_distribution("Hello,, hello, hi, Hurray!!!, Hurray,  What's up!,Today 
 is Saturday, Saturday, saturday. Funday.")

Я пытаюсь получить слова вроде {'привет': 2,' привет ': 1} и так далее.Это работает для привет слова, но для Ура это дает мне вывод, как ура !!! ': 1,' Ура ': 1 вместо Ура: 2.Я не могу понять, почему он так себя ведет.

Любые отзывы о том, почему он так поступает, ценятся.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019
import re
from collections import Counter

def word_distribution(text_string):
    regex = re.compile('[^a-zA-Z]')
    return Counter(regex.sub('', word.lower()) for word in text_string.split())


s = "Hello,, hello, hi, Hurray!!!, Hurray,  What's up!,Today is Saturday, Saturday, saturday. Funday."

print(word_distribution(s)) #Counter({'saturday': 3, 'hello': 2, 'hurray': 2, 'whats': 1, 'funday': 1, 'is': 1, 'hi': 1, 'uptoday': 1})
0 голосов
/ 28 сентября 2019

Вы можете использовать регулярное выражение для разделения предложения с не-буквенными символами.и может получить результат

import re

def word_distribution(s):
    res = re.split(r'\W+', s)
    counter = {}
    for word in res:
        if not counter.get(word):
            counter[word] = 1
        else:
            counter[word] += 1
    return counter
s = "Hello,, hello, hi, Hurray!!!, Hurray,  What's up!,Today is Saturday, Saturday, saturday. Funday."
print(word_distribution(s))```
#Output:
#{'Hello': 1, 'hello': 1, 'hi': 1, 'Hurray': 2, 'What': 1, 's': 1, 'up': 1, 'Today': 1, 'is': 1, 'Saturday': 2, 'saturday': 1, 'Funday': 1, '': 1}
...