2017-01-26 3 views
-1

Я написал код для подсчета слов в python.Счетчик слов с использованием python

Я хотел бы получить текст и частоту каждого слова из следующей страницы: http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99

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

Пожалуйста, помогите мне в этом.


import requests 
from bs4 import BeautifulSoup 
import operator 


def start(url): 
    word_list = [] 
    source_code = requests.get(url).text 
    soup = BeautifulSoup(source_code, "html.parser") 
    for bible_text in soup.findAll('font', {'class': 'tk4l'}): 
     content = bible_text.get_text() 
     words = content.lower().split() 
     for each_word in words: 
      word_list.append(each_word) 
     clean_up_list(word_list) 


def clean_up_list(word_list): 
    clean_word_list = [] 
    for word in word_list:         
     symbols = "[email protected]#$%^&*()_+`{}|\"?><`-=\][';/.,']" 
     for i in range(0, len(symbols)): 
      word = word.replace(symbols[i], "")    
     if len(word) > 0:  
      clean_word_list.append(word) 
    create_dictionary(clean_word_list) 


def create_dictionary(clean_word_list): 
    word_count = {} 
    for word in clean_word_list: 
     if word in word_count: 
      word_count[word] += 1 
     else: 
      word_count[word] = 1 
    for key, value in sorted(word_count.items(),key=operator.itemgetter(0)): 
     print(key, value)     


start('http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99') 

ответ

0

Вы строите свежий word_count словарь для каждого стиха, а затем вы распечатав word_count только для этого стиха. Вместо этого вам нужно иметь только один экземпляр word_count.

Update: Были и другие проблемы с кодом, а также вы должны использовать регулярные выражения, чтобы удалить все не алфавитно-цифровые символы, а также вы должны использовать collections.Counter, как это делает ваш код намного короче, и, как хороший побочный эффект, давайте вы получите наиболее распространенные слова:

import requests 
import re 
from bs4 import BeautifulSoup 
from collections import Counter 


def parse(url): 
    html = requests.get(url).text 
    soup = BeautifulSoup(html, "html.parser") 
    count = Counter() 
    for bible_text in soup.findAll('font', {'class': 'tk4l'}): 
     text = re.sub("[^\w0-9 ]", "", bible_text.get_text().lower()) 
     count.update(text.split(" ")) 
    return count 

word_count = parse('http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99') 
print(word_count.most_common(10)) 

Выход:

[('the', 83), ('and', 71), ('god', 30), ('was', 29), ('to', 22), ('it', 17), ('of', 16), ('there', 16), ('that', 15), ('in', 15)] 
+0

Спасибо, но почему бы вам избежать рассчитывать глобальное слово? –

+0

это, как правило, плохая практика, см., Например, [Здесь] (http://stackoverflow.com/questions/19158339/why-are-global-variables-evil). В вашем примере вы можете столкнуться с проблемами, как только начнете использовать потоки для ускорения – hansaplast

+0

Теперь, похоже, частота каждого слова добавляется к частоте тех же самых слов, которые уже появились. Например, предположим, что в стихе 2 появилось слово «отец», а в стихе 5 появился еще один «отец». Затем он дал мне 3 «отцов» стих 2 [отец] стих 3 [отец ] стих 4 [отец] стих 5 [отец, отец] -------- так всего 5 это трудно объяснить, но цифры неточны ... –

Смежные вопросы