2016-04-26 2 views
0
from bs4 import BeautifulSoup 
import urllib2 
# Imported libraries for future use. 
response = urllib2.urlopen('http://www.nytimes.com').read() 
soup = BeautifulSoup(response,"lxml") 

host = [] 
#created empty list to append future words extracted from data set. 
for story_heading in soup.find_all(class_="story-heading"): 
    story_title = story_heading.text.replace("\n", " ").strip() 
    new_story_title = story_title.encode('utf-8') 


    parts = new_story_title.split()[0] 

    i=['a','A','an','An','the','The','from','From','to','To','when','When','what','What','on','On','for','For'] 
    if parts not in i: 
     host.append(parts) 
    else: 
     pass 
#now i have to calculate the number of repeated words in the file and calcute the number of repeatation.  
print host 

дайте мне знать, как рассчитать количество повторяющихся слов в списке, который мы создали. На самом деле я довольно смущен о вышеуказанном коде тоже. Если кто-нибудь может объяснить, что я сделал в этом ошибка, было бы признательно.Как считать слова в списке?

+0

Вы можете сделать это с невыполнением [Счетчик] (https://docs.python.org/2/library/collections.html # collections.Counter) – r3ign

+0

Как насчет чувствительности к регистру? «Что» == «что» или они будут рассматриваться как разные значения? –

ответ

1

Вы можете сделать это с count

d = {i: host.count(i) for i in set(host)} 
print(d) 
+0

Обратите внимание, что это будет повторяться повторяющиеся элементы несколько раз. Результат будет таким же, но это займет больше времени. Вы должны перебирать набор (сбор без дубликатов) элементов хоста вместо списка узлов непосредственно для лучшей производительности, особенно если есть много элементов списка, которые происходят более одного раза. –

+0

@ByteCommander Спасибо за отзыв. Я отредактировал свой ответ – salomonderossi

2

Использование Counter метод в коллекции модуль:

from bs4 import BeautifulSoup 
from collections import Counter 
import urllib2 
# Imported libraries for future use. 
response = urllib2.urlopen('http://www.nytimes.com').read() 
soup = BeautifulSoup(response,"lxml") 

host = [] 
#created empty list to append future words extracted from data set. 
for story_heading in soup.find_all(class_="story-heading"): 
    story_title = story_heading.text.replace("\n", " ").strip() 
    new_story_title = story_title.encode('utf-8') 


    parts = new_story_title.split()[0] 

    i=['a','A','an','An','the','The','from','From','to','To','when','When','what','What','on','On','for','For'] 
    if parts not in i: 
     host.append(parts) 
    else: 
     pass 
#now i have to calculate the number of repeated words in the file and calcute the number of repeatation.  
print Counter(host) 

Выход:

>>> ================================ RESTART ================================ 
>>> 
Counter({'North': 2, 'Trump': 1, 'U.S.': 1, 'Kasich-Cruz': 1, '8': 1, 'Court': 1, 'Where': 1, 'Your': 1, 'Forget': 1}) 
>>> 
0

Вы можете увидеть ниже фрагмент кода, который не использует lis t понимание. Я чувствую, что это должно быть просто понять.

host = ['Hello','foo','bar','World','foo','Hello'] 
dict1 = {} 
host_unique = list(set(host)) 
for i in host_unique: 
    dict[i] = host.count(i) 
+0

Вам не хватает некоторых отступов. –

1

Использование словаря понимание итерация набора элементов:

  • чувствительны к регистру версии ("Что" = "что"!):

    occurrences = { item: host.count(item) for item in set(host) } 
    
  • нечувствительный к регистру вариант («Что» == «что»):

    occurrences = { item: host.count(item) for item in set(item.lower() for item in host) } 
    

    В этом случае ключи словаря также будут элементами нижнего регистра.

0

Использование:

lst = ['hi', 'Hio', 'Hi', 'hello', 'there' ] 
s = set() 
map(lambda x: s.add(x.lower()), lst) 
print(len(s)) 

ИЛИ

lst = ['hi', 'Hio', 'Hi', 'hello', 'there' ] 
s = set() 
for item in lst: 
    s.add(item.lower()) 
print(len(s))