2017-01-23 1 views
-1

Привет Я пишу код для получения тегов из текстовой статьи с помощью python. Я отлично работаю, но когда я пытаюсь сортировать эти слова, python дает мне «TypeError». Я просмотрел эту ошибку, но не могу понять, что делать Это мой код:ТипError: плохой тип операнда для унарного -: 'type'; при извлечении ключевых слов из текстового файла

выше проблема решена сейчас, но прямо сейчас я хочу получить наиболее употребленное слово из этого текста. Статья и в внешнем выражении if проверьте, что если слово существует в файле commen.txt, ваш текст не должен включать в word_dic. но когда я запускаю этот код, он дал мне и те слова, которые уже существуют в файле common.txt. ПРИМЕЧАНИЕ. В Common.txt содержится большинство слов английского языка. например, (а, в, из, то), которые я не хочу включать в word_dic

#Loading Libraries 
import urllib 
import os 
from urllib.parse import urlparse 
from urllib.parse import urljoin 
import urllib.request 
from bs4 import BeautifulSoup 
id= 1 
url='http://scitechdaily.com/new-technique-reveals-internal-characteristics-of-photonic-crystals/' 
def getKeywords(articletext): 
    common = open('C:\\Users\\Hassan Raza\\Desktop\\Mozilla tech article\\common.txt').read().split('\n') 
    word_dict = {articletext:float} 
    word_list = articletext.lower().split() 
    for word in word_list: 
     if word not in common: 
      if word not in word_dict: 
       word_dict[word] = 1 
      if word in word_dict: 
       word_dict[word] +=1 

    sorteddata = Counter(word_dict).most_common() 
    #print(sorted(word_dict.items(),key=lambda kv: (-kv[1], kv[0]),reverse=True)) 


def GetArticles(url,id): 
    file = open('C:\\Users\\Hassan Raza\\Desktop\\Mozilla tech article\\Article'+'.txt', 'w') 
    req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) 
    html = urllib.request.urlopen(req).read() 

    soup = BeautifulSoup(html,"html.parser") 

    title= soup.find_all('h1', {'class','title'}) 
    for titles in title: 
     print(titles.text) 
    text = soup.find_all('div' , {'class', 'entry'}) 
    for pg in text: 
     articletext=(pg.text.encode('utf8')) 
     getKeywords(articletext) 

    file.close() 

GetArticles(url,id) 

здесь является то, что я получаю в терминах ошибки:

Line 18 in print(sorted(word_dict.items(),key=lambda kv: (-kv[1], kv[0]),reverse=True)) TypeError: bad operant type for unary -: 'type'

Помогите мне решить эту проблему problem :)

+3

Пожалуйста, не публикуйте ссылки на скриншоты. Скопируйте и вставьте здесь ошибку как текст. –

ответ

1

Вам не нужно указывать типы при инициализации словаря в Python. Когда вы пытаетесь сделать это здесь:

word_dict = {articletext:float} 

Фактически вы создаете этот словарь с уже существующей парой ключ-значение. Ключ - это оригинал articletext, а значение - тип данных float. Просто создайте пустой словарь:

word_dict = {} 
+0

^это решит вашу проблему. Кроме того, я бы рекомендовал вам проверить класс 'Counter', который предназначен для такой задачи, как ваш. https://docs.python.org/2/library/collections.html#collections.Counter. 'defaultdict' также очень удобен, проверьте, что тоже – yedpodtrzitko

+0

Спасибо @ TigerhawkT3, он работает для меня, как его идеальный – hbrothers