Escolar Documentos
Profissional Documentos
Cultura Documentos
Maring-Paran 2012
Trabalho de Graduao do Curso de Cincia da Computao, do Centro de Tecnologia, da Universidade Estadual de Maring. Orientador: Prof. Dr. Srgio Roberto Pereira da Silva
i Maring-Paran 2012
Este exemplar corresponde redao final da monografia aprovada como requisito parcial para obteno do grau de Bacharel em Cincia da Computao da Universidade Estadual de Maring, pela Banca Examinadora formada pelos seguintes membros:
____________________________________ Orientador: Prof. Dr. Srgio Roberto Pereira da Silva Departamento de Informtica, CTC, DIN ____________________________________ Prof. Me. Marco Aurlio Lopes Barbosa Departamento de Informtica, CTC, DIN
____________________________________ Profa. Dr. Valria Delisandra Feltrim Departamento de Informtica, CTC, DIN
Agradecimentos
Agradeo aos meus pais, por terem aceitado minha deciso em fazer este curso de graduao e tambm por terem me apoiado durante minha caminhada. Agradeo a Deus, por ter me guiado durante no s a execuo deste trabalho de concluso de curso, mas durante toda minha jornada na graduao. Agradeo por fim ao meu orientador Prof. Dr. Srgio Roberto Pereira da Silva por ter compartilhado seus conhecimentos e experincias ao longo de minha orientao, sendo fundamental para a elaborao deste trabalho.
iii
Resumo
A recomendao de notcias uma subrea da rea de recomendao de informao, sendo que a principal diferena entre elas o aspecto temporal da notcia, ou seja, sua perda de relevncia com o decorrer do tempo. Um problema destacado nessa rea a dificuldade em encontrar um equilbrio entre a qualidade dos resultados gerados e a eficincia do processamento dos dados. Para tentar obter uma boa relao entre desempenho e qualidade utilizado nesse trabalho um classificador Naive Bayes para separar as notcias em classes de interesse do usurio, bem como a tcnica de similaridade pelo cosseno para a criao de um ranking de notcias a serem apresentadas. Por fim, tambm realizada a personalizao da apresentao das notcias, por meio da criao de um modelo de interesse do usurio com o uso de feedback explicito.
Palavras-chave
Recomendao de Notcias, Modelagem do interesse do usurio, Recuperao de Informao.
iv
Abstract
News recommendation is a subarea of information recommendation. The mainly difference between them is the temporal aspect of news, i.e., its loss of relevance after some time. A highlighted problem in this area is the difficulty to find a balance between the quality of the results and the efficiency of the data processing. Trying to get a good trade-off between performance and quality, a Nave Bayes classifier was used in this paper to sort out the news in categories according to the users interest. The cosine similarity technique was used in order to create a ranking of news to be showed. Finally, a personalization of the news display is also made through the creation of the users interest model with the use of explicit feedback.
Key-words
News Recommendation, User Interesting Modeling, Information Retrieval.
Sumrio
1 2 2.1 2.2 2.2.1 2.2.2 2.3 2.3.1 2.3.2 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.9.1 3.9.2 3.9.3 3.9.4 3.9.5 4 4.1 4.2 4.3 INTRODUO ......................................................................................................................... 1 REVISO BIBLIOGRFICA................................................................................................. 3 A Recuperao de Informao .................................................................................................... 3 Classificao de novas notcias ................................................................................................... 4 Pr-processamento do Texto .................................................................................................. 4 Tcnicas para classificao de documentos ........................................................................... 6 Personalizao ............................................................................................................................ 6 Clculo de Similaridade entre Documentos ........................................................................... 6 Relevance Feedback ............................................................................................................... 7 DESENVOLVIMENTO ........................................................................................................... 9 O Pr-Processamento .................................................................................................................. 9 O Treinamento do Classificador ............................................................................................... 11 A classificao .......................................................................................................................... 12 A apresentao .......................................................................................................................... 14 Modelagem do Interesse do Usurio ......................................................................................... 16 Relevance Feedback.................................................................................................................. 16 Recomendao .......................................................................................................................... 18 As Classes do Sistema .............................................................................................................. 20 Bibliotecas e Frameworks Utilizados ....................................................................................... 23 BeautifulSoup ....................................................................................................................... 23 CherryPy............................................................................................................................... 23 Feedparser ............................................................................................................................ 24 NLTK .................................................................................................................................... 24 Reverend ............................................................................................................................... 24 ANLISE DOS RESULTADOS............................................................................................ 25 Modelos de Representao........................................................................................................ 25 Qualidade do Ranking de Notcias ............................................................................................ 25 Custo de Processamento do Sistema ......................................................................................... 27
vi
4.4 4.5 5 6 7 7.1 7.2 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8
Desempenho de 20% e 100% de Termos Utilizados at a Classificao .................................. 28 Representao de Notcias por meio de Ttulos e Sumrios ..................................................... 30 CONCLUSES ....................................................................................................................... 33 REFERNCIAS BIBLIOGRFICAS .................................................................................. 35 APNDICE.............................................................................................................................. 38 Websites utilizados para recuperar notcias ............................................................................... 38 Cdigo Fonte ............................................................................................................................. 40 Main...................................................................................................................................... 40 NewsSearch .......................................................................................................................... 41 ClassifierTrainer .................................................................................................................. 44 PreProcessing ....................................................................................................................... 48 Scorer ................................................................................................................................... 50 User ...................................................................................................................................... 54 News ..................................................................................................................................... 57 Web ....................................................................................................................................... 58
vii
Lista de Figuras
Figura 1. Componentes de um sistema recuperador de informao (Cardoso, 2000). 3 Figura 2. Equao para o clculo da similaridade pelo cosseno (Huang, 2008). ....... 7 Figura 3. Equao para o clculo do coeficiente de Jaccard (Huang, 2008). ............. 7 Figura 4. Viso geral do sistema. ................................................................................ 9 Figura 5. Pr-processamento das notcias. ................................................................ 11 Figura 6. Treinamento do classificador Naive Bayes. .............................................. 12 Figura 7. Classificao de novas notcias. ................................................................ 13 Figura 8. Equao de decaimento de relevncia de uma notcia. ............................. 13 Figura 9. Interface da tela inicial do prottipo. ......................................................... 14 Figura 10. Interface da tela de notcias de tecnologia. .............................................. 15 Figura 11. Feedback positivo e interesse do usurio. ............................................... 17 Figura 12. Feedback negativo e o interesse do usurio. ........................................... 17 Figura 13. Pgina de notcias recomendadas ao usurio........................................... 19 Figura 14. Diagrama de classe do sistema. ............................................................... 21 Figura 15. Ranking das notcias por categorias utilizando 100% dos termos para representao de notcias. ......................................................................................... 27 Figura 16. Custo de processamento do sistema utilizando 100% de termos do texto. .................................................................................................................................. 28 Figura 17. Ranking das notcias por categorias utilizando ttulo e sumrio para representao de documentos. .................................................................................. 31
viii
Lista de Tabelas
Tabela 1. Quantidade de websites vistoriados para a aprendizagem do classificador Naive Bayes. ............................................................................................................. 12 Tabela 2. Algumas funcionalidades da biblioteca Feedparser. ................................ 24 Tabela 3. Resultado do teste de qualidade do ranking de notcias. .......................... 26 Tabela 4. Resultado do teste de desempenho do sistema.......................................... 27 Tabela 5. Comparao de desempenho entre 20% e 100% de termos de documentos utilizados. .................................................................................................................. 29 Tabela 6. Comparao de desempenho entre a utilizao de ttulo e sumrio e de 100% de termos de documentos........................................................................... 30 Tabela 7. Resultado do teste de qualidade do ranking de notcias com a utilizao de ttulo e sumrio como forma de representao de documentos. ........................ 31
ix
Introduo
A Internet um sistema pblico mundial ao qual qualquer pessoa possui acesso por
meio de um computador. A inveno da Internet possibilitou que a informao fosse registrada em um domnio de acesso pblico (Surface Web) (Meng & Yu, 2010), facilitando a visualizao desse contedo. O incio da era da Internet foi composto por poucos websites, consequentemente pouca informao estava disponvel na rede de computadores. Atualmente a World Wide Web Size (2012), website mantido pela Tilburg University, garante que a Internet possui ao menos 8,23 bilhes de pginas indexadas na Surface Web e, segundo Meng & Yu (2010), estima-se mais de 900 bilhes de websites contidos na Deep Web (poro de websites que no so pblicos). Com essas informaes percebe-se que h uma quantidade excessiva de informao disponvel na Internet, fenmeno que torna a pesquisa do usurio, por um assunto especfico, desgastante e muitas vezes demorada. Esse problema conhecido como sobrecarga de informao (information overload) e ocorre quando o usurio possui muita informao ao seu alcance, porm, no tem condies de trat-la e encontrar o que realmente deseja ou lhe interessa (Chen, 1994). A Internet est repleta de pginas que apresentam notcias (news), na maioria das vezes dirias, divulgando acontecimentos sobre diversos temas. Um ponto que diferencia essas pginas das demais que as notcias tm um forte aspecto temporal, ou seja, depois de passado determinado tempo, elas j no apresentam o mesmo valor informativo. Outro problema importante a distino entre notcias relevantes e no relevantes. Essa distino pode ser feita obtendo notcias apenas de fontes que possuam autoridade nos assuntos publicados (Rieh, 2002), ou seja, que informem notcias de qualidade. Apesar dessa distino poder ser feita, identificar quais dessas informaes so relevantes no uma tarefa simples para o usurio. Para isso pode ser utilizada a recomendao de informao. A recomendao de notcias pode ser formulada como um problema de classificao. Conforme citado por Marmanis & Babenko (2009), Jannach, Janker, Felfernig, & Friedrich (2011), Owen, Anil, Dunning, & Friedman (2012) e Alag (2009), sobre a criao de sistemas recomendadores de informao, o uso de aprendizagem de mquina um meio de se classificar a informao, tornando mais rpido o acesso aos 1
dados. Em particular, as tcnicas de aprendizagem supervisionada baseiam-se em um contedo de treinamento existente, o qual, neste trabalho, so os documentos que definem cada uma das categorias de notcias que possam vir a ser utilizadas. O objetivo deste trabalho desenvolver um sistema recomendador de informao, focado em notcias em lngua inglesa, que considere o aspecto temporal de tal contedo. Para tanto, so acessados websites que possuam autoridade na publicao de notcias. A partir do acesso a essas pginas feita a extrao e o processamento da informao contida, a aplicao de tcnicas de aprendizagem de mquina para classificar os dados em classes que melhor os representem e, por fim, a personalizao e o armazenamento das notcias classificadas. As sees que seguem sero divididas da seguinte maneira: na Seo 2 sero apresentados os conceitos relevantes ao desenvolvimento do trabalho, que so: recuperao de informao, o pr-processamento dessa informao, a classificao de notcias e a utilizao de relevance feedback na personalizao da recuperao de informao. Na Seo 3 apresentado o corpo do trabalho, que consiste no desenvolvimento de um sistema de recomendao de notcias recuperadas da Web. Na Seo 4 apresentada a anlise dos resultados provenientes de diversos testes. Por fim, na Seo 5 so apresentadas concluses acerca deste trabalho.
Reviso Bibliogrfica
Para entender os problemas inerentes recuperao de notcias, preciso entender o
conceito de Recuperao de Informao (RI) e como ele pode ser aplicado no escopo de notcias. Tambm necessrio estudar tcnicas que possibilitem a criao de um classificador que filtre as notcias em suas devidas categorias. Alm disso, interessante estudar meios para modelar o interesse do usurio e como essa modelagem pode ser empregada na recomendao de informao. Com estas tcnicas, possvel personalizar a recomendao de notcias para apresentar as de maior relevncia ao usurio.
Um sistema recuperador de informao pode ser estruturado como apresentado na Figura 1. Do lado esquerdo da figura se tem os documentos buscados e indexados pelo sistema. De outro lado, encontra-se o usurio e sua necessidade de informao, especificada no sistema na forma de uma consulta. Fazendo-se uso de tcnicas que relacionem o interesse do usurio com os documentos indexados pelo sistema, pode-se recuperar as informaes de interesse do usurio.
A diferena entre a recuperao de notcias e a recuperao de informao est no aspecto temporal da notcia. A informao, na maioria das vezes, no perde seu valor informativo com o passar do tempo, j a notcia sim. Uma notcia que poderia ser relevante h uma semana, hoje pode no ser mais. Esse aspecto temporal influencia diretamente a maneira como a relevncia de uma notcia deve ser calculada, produzindo um resultado que decaia com o passar do tempo. Aps ser feita a recuperao de notcias preciso agrupar os documentos resultantes em reas de interesse, de forma a possibilitar uma melhor visualizao deste contedo por parte do usurio. Para este trabalho foram escolhidas as reas de interesse: esporte, cincia, mundo, negcios, sade e tecnologia. A classificao das notcias nas reas de interesse escolhidas pode ser feita com o uso de tcnicas de classificao.
(Jannach, Janker, Felfernig, & Friedrich, 2011). Em geral, aplica-se a filtragem das stop words logo aps a extrao do texto de sua fonte. O termo stemming, ou conflation, consiste na substituio de palavras pelos seus radicais (root word), com o intuito de reduzir o conjunto de termos de trabalho e aumentar a frequncia das palavras que representam um mesmo termo. Essa tcnica comumente utiliza anlises morfolgicas, como por exemplo o algoritmo Porters suffix-stripping (Porter, 1980) e a busca de palavras em bases como a WordNet (Fellbaum, 1998). Um problema com o stemming que essa tcnica pode reduzir duas palavras com funes lingusticas diferentes (e.g. substantivo e verbo) ao mesmo radical, mas que na prtica no se referem ao mesmo termo (Jannach, Janker, Felfernig, & Friedrich, 2011). Uma soluo para este problema a utilizao da tcnica de lematizao, a qual difere do stemming por no perder a funo lingustica das palavras analisadas (Manning, Raghavan, & Schtze, 2008). Em geral a lematizao produz melhores resultados do que o stemming, porm com uma carga maior de processamento. Neste trabalho, foi escolhido utilizar a tcnica de stemming, visando obter um melhor desempenho do sistema. A reduo do nmero de elementos a serem trabalhados um mtodo que busca, por meio da reduo de dimensionalidade do documento, reduzir os rudos contidos nos dados e tambm melhorar o desempenho do seu processamento, utilizando apenas os termos mais relevantes do contedo (Jannach, Janker, Felfernig, & Friedrich, 2011). Segundo o princpio 80/20 de Vilfredo Pareto, 80% dos resultados so provenientes de 20% dos esforos utilizados (Koch, 2000). Esta tcnica j foi empregada por (Marchi, 2010) na tarefa de RI, produzindo uma boa relao entre ganho de desempenho e perda de qualidade dos resultados. A relao de ganhos de desempenho versus a perda na qualidade dos resultados abordada na Seo 4 deste trabalho. As tcnicas de stemming, eliminao de stop words e reduo do nmero de elementos, foram empregadas neste trabalho visando melhorar o desempenho da classificao de novas notcias recuperadas da Internet.
2.2.2 Tcnicas para classificao de documentos Existem diversas tcnicas para classificao de documentos como, por exemplo, o algoritmo probabilstico Naive Bayes (Segaran, 2007) e as tcnicas matemticas de similaridade pelo cosseno e o coeficiente de Jaccard (Marmanis & Babenko, 2009). O classificador Naive Bayes (Bayesiano Ingnuo) um classificador estatstico comumente utilizado, sendo uma de suas caractersticas a aprendizagem supervisionada de atributos classificadores, que representam conjuntos aprendidos pelo classificador. Neste trabalho, os conjuntos aprendidos pelo classificador so as reas de interesse de notcias. Para o classificador Naive Bayes, as probabilidades dos atributos classificadores so incondicionais, ou seja, no dependem umas das outras. Deste modo, o resultado de uma classificao pode ser calculado pela multiplicao das probabilidades individuais de cada atributo classificador por uma rea de interesse, ou seja, ( ) ( ). ( )
2.3 Personalizao
A recomendao de notcias uma forma de personalizao da recuperao de informao. O foco da rea de recomendao de informao a localizao e a apresentao da informao relevante a um tpico especfico. Em geral, sistemas recomendadores servem a dois propsitos: estimular o usurio h realizar uma tarefa (como comprar um livro ou assistir um filme), ou tratar a sobrecarga de informao, por meio da seleo, em um conjunto extenso de itens, do contedo mais relevante ao usurio (Jannach, Janker, Felfernig, & Friedrich, 2011). A recomendao de informao pode ser feita com o uso de tcnicas que calculam a similaridade entre documentos como, por exemplo, a similaridade pelo cosseno e o coeficiente de Jaccard (Marmanis & Babenko, 2009). Essas tcnicas j foram empregadas com sucesso por Marmanis & Babenko (2009) e Segaran (2007) na construo de sistemas recomendadores. Estas tcnicas so descritas a seguir. 2.3.1 Clculo de Similaridade entre Documentos A tcnica de similaridade pelo cosseno consiste no clculo do cosseno do ngulo entre dois vetores n-dimensionais de termos, e , que representam documentos,
conforme a equao apresentada na Figura 2. A equao calcula a diviso entre os resultados da multiplicao entre os vetores e e a multiplicao da norma desses vetores, | | e | |. A similaridade entre os dois documentos estar no intervalo [0,1] em que valores prximos a 1 indicam uma similaridade forte e valores prximos a 0, indicam uma similaridade fraca (Jannach, Janker, Felfernig, & Friedrich, 2011).
A similaridade entre documentos por meio do uso da tcnica do coeficiente de Jaccard consiste na diviso entre a interseco dos vetores e , que representam documentos, e tambm a unio destes vetores, resultando na poro similar de termos entre os dois documentos, como apresentado na Figura 3. O intervalo de valores resultantes desta tcnica est entre [0,1], em que valores prximos a 1 indicam uma similaridade forte e, valores prximos a 0, uma similaridade fraca (Huang, 2008).
Para utilizar as equaes apresentadas na Figura 2 e na Figura 3 para clculo de similaridade a fim de recomendar notcias aos usurios, necessrio modelar vetorialmente as notcias e tambm o interesse do usurio. Com a utilizao da representao vetorial dos dados possvel recomendar notcias com uso das tcnicas descritas. Para um sistema automatizado aprender sobre o interesse do usurio podem ser utilizadas as tcnicas de relevance feedback. 2.3.2 Relevance Feedback Existem duas maneiras de um sistema automatizado identificar o interesse de um usurio: requisitar a sua opinio implicitamente ou explicitamente. O feedback implcito captura o interesse do usurio de forma transparente, utilizando tcnicas como o monitoramento das aes do usurio. Essa forma de coleta de feedback muitas vezes gera dados equivocados, por causa da interpretao erronia das intenes do usurio (Jannach, Janker, Felfernig, & Friedrich, 2011). O feedback explcito, por sua vez, 7
consiste em capturar o interesse do usurio de maneira explcita, requerendo sua avaliao sobre um dado elemento. Esse provavelmente o mtodo mais preciso para se coletar o feedback do usurio, pois sua inteno explicitada de maneira espontnea, dificilmente havendo equvocos quanto ao seu interesse. O principal problema do feedback explicito , alm de requerer esforos do usurio na avaliao de um dado elemento, existir a possibilidade do usurio no estar disposto a faz-lo. Portanto, o nmero de avaliaes realizadas pode ser pequeno, tornando a recomendao pobre. Uma soluo para esse problema fazer com que o usurio pontue tantos itens quanto forem necessrios no prlogo do fluxo de execuo do recomendador. Assim o sistema passa a ter condies de iniciar sua recomendao de dados baseado no interesse do usurio (Jannach, Janker, Felfernig, & Friedrich, 2011). O feedback implcito, por sua vez, pode ser coletado constantemente sem requerer esforos do usurio, porm no se h certeza de que a ao do usurio tenha sido interpretada corretamente pelo recomendador. Por exemplo, se um usurio compra vrios livros, o recomendador deve interpretar que o usurio se interessa por esses livros. Essa avaliao pode ser equivocada, uma vez que um ou mais livros sejam destinados outra pessoa. Apesar de ambas as tcnicas terem suas vantagens, coletar feedback explicitamente resulta em uma melhor preciso do que colet-lo implicitamente (Jannach, Janker, Felfernig, & Friedrich, 2011). Portanto, neste trabalho, optou-se pelo uso do feedback explcito, por se entender que o esforo dos usurios em indicar se uma notcia lhe agrada ou no compensador em funo da filtragem de informao que isso proporciona.
Desenvolvimento
Com base na anlise dos problemas levantados, foi elaborada uma arquitetura para
um sistema recomendador de notcias. A Figura 4 representa a arquitetura de alto nvel do sistema recomendador de notcias desenvolvido.
Esta arquitetura consiste de um processo de cinco etapas. Primeiramente feito o pr-processamento do contedo extrado da Web. Ento esse contedo classificado entre as reas de interesse escolhidas para serem abordadas no sistema. Aps a classificao, o contedo submetido ao mdulo de recomendao (o qual modela os interesses do usurio) que gera a apresentado dos resultados ao usurio, possibilitando a interao do usurio com o sistema, por meio de feedback positivo e/ou negativo.
3.1 O Pr-Processamento
Para classificar ou recomendar notcias ao usurio, primeiramente deve ser realizado o pr-processamento dessas informaes, a fim de prepar-las para serem trabalhadas. Para tanto, foi utilizado o mecanismo de RSS (Rich Site Summary), o qual um padro que consiste em arquivos com extenso XML e permite a distribuio de notcias e outros contedos Web a usurios (elikba, 2004). Fazendo uso da estrutura RSS e tendo acesso a um conjunto de websites que apresentam suas notcias nesse formato, possvel recuperar a informao da Web de forma rpida e estruturada, permitindo o processamento dessa informao e, por consequncia, sua recomendao. Para o desenvolvimento deste trabalho foi escolhida a linguagem de programao Python (Lutz, 2006), verso 2.7.3, por se entender que a mesma possui facilidades para trabalhar com o desenvolvimento Web e por esta possuir diversas bibliotecas que podem
auxiliar o desenvolvimento da ferramenta proposta, como por exemplo as bibliotecas para extrao de contedo RSS. Na fase de pr-processamento, foi utilizada uma lista de websites que trabalham com a estrutura de RSS e que apresentam notcias diariamente. As pginas desses websites foram processadas a partir de seus arquivos RSS, sendo todas suas notcias extradas, como apresentado na Figura 5. Aps a extrao do contedo RSS, foi realizado um prprocessamento dessa informao, retirando termos insignificantes sua classificao e recomendao e tambm reduzindo as palavras aos seus radicais. Nessa fase foram utilizadas as tcnicas de eliminao de stop words e o stemming. Com a aplicao dessas tcnicas, obtm-se um conjunto mais compacto de dados, o que implica em um melhor desempenho na recomendao de notcias, segundo Marchi (2010). Aps a aplicao do stemming e a eliminao de stop words calculada a frequncia de todas as palavras do documento e montado um vetor termo-frequncia que representa formalmente o documento. importante gerar uma boa estrutura de representao de um documento, pois quanto mais coerente essa estrutura for, melhores resultados so apresentados na recomendao de informao. Aps montado o vetor termo-frequncia, pode-se ainda fazer um corte no nmero de termos que representam o documento aplicando, por exemplo, o princpio 80/20 de Pareto (Jannach, Janker, Felfernig, & Friedrich, 2011). Neste trabalho, foi escolhido realizar este corte visando o desempenho do sistema, fazendo uso de somente 20% dos termos mais relevantes de um documento, ou seja, aqueles que possuem maior frequncia no vetor termo-frequncia. Este valor pode ser alterado futuramente para um processo de otimizao. Por fim, a estrutura criada foi salva em uma base de dados, para que no fosse necessrio reprocessar o contedo.
10
Aps o pr-processamento do contedo, passa-se etapa de classificao das notcias recuperadas da Web dentre as reas de interesse escolhidas para este trabalho, que so: cincia, esporte, mundo, negcios, sade e tecnologia. Classificando as notcias, pode-se apresentar o contedo de maneira categorizada, facilitando ao usurio a busca por notcias de seu interesse.
11
Na Tabela 1 apresentada a quantidade de websites publicadores de notcias de uma rea de interesse vistoriados durante duas semanas, a fim de tornar o classificador Naive Bayes apto a identificar a rea de interesse de uma dada notcia. A quantidade de pginas no uniforme entre as categorias de notcias porque este detalhe no foi planejado previamente ao treinamento do classificador, porm interessante para testes futuros que sejam coletadas amostras com quantidades similares de notcias de cada rea de interesse.
Tabela 1. Quantidade de websites vistoriados para a aprendizagem do classificador Naive Bayes.
Cincia 6
Esporte 12
Mundo 22
Negcios 8
Sade 8
Tecnologia 14
Uma vez treinado, o classificador estar apto a classificar notcias entre reas de interesse. O treinamento do classificador tambm pode ser contnuo, ou seja, continuar a ocorrer durante o processo de uso do sistema.
3.3 A classificao
Conforme apresentado na Figura 7, para a classificao de uma nova notcia, primeiramente carregada a base pr-processada de notcias. Em seguida, realizada a limpeza das notcias que no so mais consideradas relevantes dentro de uma janela de tempo estabelecida. Esta janela o intervalo de tempo que uma notcia pode ter valor
12
para o usurio, pois as notcias perdem seu valor informativo ao passar do tempo. A janela considerada neste trabalho foi de sete dias. A eliminao de notcias antigas, alm de retirar da base pr-processada de notcias aqueles elementos que no so relevantes, reduz a dimenso da base de dados, melhorando o desempenho de seu processamento.
Aps remover as notcias consideradas antigas, inicia-se a pontuao das novas por meio do classificador Naive Bayes. Por meio de uma consulta ao classificador, uma notcia pontuada para cada rea de interesse, por meio da probabilidade desta notcia pertencer rea especfica. Vale ressaltar que neste ponto a base de dados contm notcias novas, que foram buscadas da Web e ainda no classificadas, e tambm notcias j classificadas, mas que ainda se encontram na janela de tempo estabelecida. Aps ser determinada a pontuao, o conjunto de novas notcias mesclado ao conjunto antigo e, ento, realizado um decaimento das notas para cada dia de envelhecimento da notcia, pois ao passar de cada dia, a notcia perde relevncia, at sair de sua janela de vida e no ser mais considerada relevante. Para o clculo do decaimento da nota de uma notcia utilizada a equao da Figura 8.
A equao da Figura 8 decrementa 15% da nota atribuda pelo classificador a uma notcia para cada dia de envelhecimento da mesma, o que faz com que a noticia perca seu valor em torno de uma semana. Esse intervalo de tempo e o valor de decremento
13
foram considerados como valores iniciais a serem utilizados, mas devem ser otimizados em um prximo trabalho para garantir melhores resultados. Aps o decaimento das notas, as notcias podem ser ordenadas para cada rea de interesse. Desta forma, tm-se as notcias ordenadas pela significncia referente rea de interesse da qual fazem parte. Esta tarefa conhecida na literatura como ranking das notcias. Por fim, esse conjunto ordenado salvo em uma base de resultados pronto para ser apresentado ao usurio.
3.4 A apresentao
Aps a classificao, as notcias podem ser apresentadas ao usurio. A Figura 9 exibe o prottipo da tela inicial do sistema proposto.
No centro da tela inicial do sistema existem sete botes, os seis primeiros referentes s categorias de notcias e o ltimo ao contedo personalizado, baseado na modelagem do interesse do usurio, a ser discutida adiante. A tela inicial permite tambm que o usurio se cadastre no sistema, definindo um nome de usurio e senha, para ter acesso personalizado apresentao das notcias. A Figura 10 exemplifica a apresentao de notcias referentes rea de interesse de tecnologia.
14
A tela de apresentao de notcias, mostrada na Figura 10, contm os 10 itens considerados mais relevantes em suas categorias pelo algoritmo de ranking utilizado na fase de classificao. Esta tela no foi otimizada para aspectos de usabilidade, sendo construda somente para fins de experimentao. Desde que o usurio esteja conectado no sistema com suas credenciais, ele pode interagir com o sistema de recomendao por meio de dois botes localizados a direita de cada notcia: o primeiro possibilitando o usurio atribuir um feedback positivo e o segundo um feedback negativo em relao a notcia referida. A possibilidade de o usurio interagir com o sistema, por meio do uso de feedback, permite ao sistema
15
capturar o interesse do usurio. Por meio da modelagem deste interesse, uma recomendao personalizada de notcias pode ser apresentada ao usurio.
16
O feedback negativo, por sua vez, age de forma decremental. As frequncias das palavras contidas no documento que o usurio demonstrou desinteresse so decrementadas do modelo de interesse do usurio, como exemplificado na Figura 12. O intervalo dos possveis valores das frequncias dos termos o dos nmeros inteiros, ou seja, podem-se ter valores negativos e positivos. Percebe-se assim que se for aplicado um feedback negativo e um termo do documento vinculado ao feedback ainda no estiver contido no modelo de interesse do usurio, ou ento se esse documento possuir uma frequncia maior do que a contida no modelo de interesse do usurio, a frequncia deste termo ser negativa. Isto est correto, pois caso a frequncia fosse limitada inferiormente a zero, haveria uma limitao quanto expressividade do desinteresse do usurio, no sendo perceptvel a dimenso da falta de interesse do usurio por um documento.
17
Por fim, capturando o interesse do usurio, pode-se recomendar notcias a ele, tomando como base este interesse. Assim, acessando o stimo boto da tela inicial do sistema, apresentada na Figura 9, o usurio ter acesso a uma apresentao personalizada de notcias, criada por meio da recomendao de informao.
3.7 Recomendao
A fase de recomendao consiste em, por meio da utilizao dos mecanismos de relevance feedback, obter o interesse do usurio e recomendar notcias baseado nesse interesse. Como j foi descrito, existe um modelo que representa o interesse do usurio e toda vez que o usurio do sistema realiza um feedback esse modelo sofre uma alterao, de forma a convergir ao interesse real do usurio. A recomendao de notcias no sistema proposto neste trabalho consistem em uma apresentao personalizada da informao. Aps buscar as notcias na Web e classificlas conforme sua rea de interesse, o clculo de similaridade entre o modelo de cada notcia e o modelo de interesse do usurio efetuado, com o propsito de listar as notcias em ordem de relevncia ao modelo de interesse do usurio. Desta forma, em uma pesquisa personalizada podem aparecer notcias de reas de interesse distintas, como exemplificado na Figura 13.
18
Para realizar a tarefa de recomendao de notcias foi utilizada, primeiramente, a tcnica do coeficiente de Jaccard para calcular a similaridade entre os modelos de uma notcia e do usurio. Nessa abordagem, o interesse do usurio foi determinado por meio de um conjunto de palavras, sem considerar suas frequncias, o que resultou em problemas ao modelar o interesse do usurio e ao calcular a similaridade entre os documentos. Primeiramente percebeu-se que o resultado obtido do clculo da similaridade entre documentos era limitado. Isto ocorreu por serem levadas em considerao apenas a unio e a interseo entre os documentos que consistiam em termos, sem considerar as suas frequencias, resultando em similaridades errneas. O segundo problema a ser destacado foi quanto ao uso de relevance feedback. Quando o usurio realizava um feedback positivo, as novas palavras eram adicionadas ao seu modelo de interesse e,
19
quando um feedback negativo era efetuado, as novas palavras eram retiradas do modelo de interesse do usurio. O problema ocorre quando um termo realmente significativo na representao do interesse do usurio retirado do seu modelo de interesse por aparecer em um documento que o usurio no se interessou. Este fenmeno torna o modelo de interesse do usurio inconsistente, o que afeta os resultados apresentados. Com essas concluses foi decidido modificar os mtodos de representao de documentos e do interesse do usurio e tambm modificar a tcnica para clculo de similaridade entre documentos. A tcnica de similaridade pelo cosseno obteve bons resultados quando utilizada juntamente com o modelo termo-frequncia para representao de documentos e dos interesses dos usurios. Nessa abordagem os documentos so representados por um vetor de tuplas termo-frequncia, o que no gerou os mesmos problemas da tcnica anterior, devido utilizao das frequncias dos termos. Agora, o clculo de similaridade leva em considerao uma equao matemtica que calcula a similaridade entre dois documentos e no apenas a semelhana de conjuntos, como feita anteriormente. Por fim, o mecanismo de relevance feedback incrementa ou decrementa as frequncias dos termos do documento, no ocorrendo o problema de descarte de termos relevantes devido a ocorrncia de um feedback negativo do usurio em um documento que contm esses termos.
20
21
Foram criadas oito classes para modelar o sistema. A classe Web modela a parte do sistema Web com a qual o usurio interage, fazendo-se uso da biblioteca CherryPy, apresentada na Subseo 3.9. Por meio desta classe o usurio possui acesso s notcias classificadas (Figura 10) e tambm s notcias recomendadas (Figura 13). A classe NaiveBayes representa o classificador Naive Bayes, importado da biblioteca Python Reverend (Reverend B, 2012), que foi utilizada para classificar as notcias entre as categorias do sistema. A classe ClassifierTrainer utilizada para treinar o classificador Naive Bayes, a fim de torn-lo apto a classificar corretamente uma notcia em uma das reas de interesse escolhidas para este trabalho. Esta classe faz uso da classe NewsSearch para buscar notcias da Web e faz uso dos termos gerados pela classe PreProcessing, que contm mtodos para a etapa de pr-processamento, utilizada na extrao das notcias da Web. A classe NewsSearch tambm faz uso da classe Scorer, que efetua a etapa de pontuao das notcias, eliminao das notcias antigas e tambm o ranking das notcias por reas de interesse. A classe User representa o usurio, seu login e senha de acesso ao sistema, os websites que ele gosta ou no no sistema e os termos que representam seu interesse. Esta classe relaciona-se diretamente com a classe News, que modela uma notcia extrada de documentos RSS, contendo seu ttulo, descrio, data de acesso, o endereo de acesso notcia e os termos que a representam. A classe NewsSearch pode ser considerada o corao do sistema. Percebe-se por meio da Figura 14, que esta a classe com o maior nmero de relacionamentos do sistema. A classe NewsSearch varre as pginas Web escolhidas (ver Apndice) a fim de buscar notcias e classific-las. Ou seja, esta classe utiliza a classe PreProcessing, a Naive Bayes, a News e a Scorer, enfim, por meio desta classe que o sistema, em sua maior parte, funciona. Diversas bibliotecas foram utilizadas no desenvolvimento das classes do sistema. Uma das principais vantagens de se utilizar bibliotecas o reuso de cdigo. Assim se ganha tempo no desenvolvimento do sistema e tambm confiabilidade, uma vez que essas bibliotecas j foram testadas pela comunidade que as utilizam.
22
23
3.9.3 Feedparser A biblioteca Feedparser (Feedparser B, 2012) uma biblioteca Python que fornece suporte ao tratamento do contedo RSS. Dada uma estrutura RSS possvel acessar os dados de cada item contido nessa estrutura como exemplificado na Tabela 2 (a qual contm algumas das funcionalidades disponibilizadas pela biblioteca Feedparser) segundo (RSS Libraries - PythonInfo Wiki).
Tabela 2. Algumas funcionalidades da biblioteca Feedparser.
Item[date]
item[ "date_parsed" ] (2004,02,13,14,28,23,4,44,0) item[ "title" ] item[ "summary" ] item[ "link" ] Ttulo do item RSS Sumrio do item RSS Link para o contedo original do item RSS
Neste trabalho foi utilizada a verso 5.1.2 da biblioteca Feedparser. 3.9.4 NLTK A NLTK (Natural Language Toolkit) (Natural Language Toolkit - NLTK 2.0 documentation) uma biblioteca Python para processamento de linguagem natural e tambm uma ferramenta para ensinar e trabalhar a lingustica computacional. A NLTK prov suporte classificao, tokenizao, stemming, tagging, parsing e anlise semntica para linguagem natural. Neste trabalho a biblioteca foi utilizada no prprocessamento de texto por meio da eliminao de stop words, a aplicao do stemming e a criao de tuplas termo-frequncia. A verso da biblioteca utilizada foi a 2.0. 3.9.5 Reverend O Reverend um classificador Naive Bayes, de propsito geral, desenvolvido em Python (Feedparser A, 2012). Esse classificador foi desenvolvido para ser facilmente estendido para qualquer domnio de aplicao, apenas havendo de adapt-lo aos dados de entrada (Feedparser B, 2012). Utilizado na forma de uma biblioteca, o Reverend foi escolhido para a classificao de notcias neste trabalho. A verso utilizada foi a 0.4.
24
apresentados, com a eficincia no processamento dos dados e com sua apresentao. O principal problema dessa rea unir esses dois pontos: qualidade e eficincia. Quando o foco a recomendao de notcias esses problemas se agravam, pois notcias so postadas diariamente em websites, o que implica em uma busca constante pela informao e um processamento pesado desses dados.
25
Esporte 1 1 1 1 1
Tecnologia 1 1 1 0,9 1
A Figura 15 apresenta graficamente o desempenho do classificador durante o teste para cada uma das categorias do sistema. As notcias apresentadas na categoria Mundo e na categoria Esporte foram corretamente classificadas ao longo dos cinco dias de avaliao, obtendo 100% de corretude com suas reas de interesse. As notcias apresentadas na categoria Tecnologia obtiveram 98% de compatibilidade com esta categoria, com apenas uma notcia erroneamente classificada. As categorias Cincia e Sade obtiveram 90% e 94% de compatibilidade, respectivamente. Por fim, a categoria Negcios obteve 86% de compatibilidade com as notcias apresentadas, sendo o pior ranking entre as reas de interesse. A mdia da qualidade do ranking das notcias apresentadas nas seis reas de interesse durante os cinco dias de avaliao foi de 94.6%, sendo um resultado satisfatrio para o prottipo.
26
Figura 15. Ranking das notcias por categorias utilizando 100% dos termos para representao de notcias.
J foi dito neste trabalho, que uma boa relao entre qualidade dos resultados e eficincia de processamento buscada. A fim de verificar esta relao, foi realizado um teste quanto ao custo de processamento do sistema.
PrProcessamento
Remoo
Pontuao Ordenao
Tempo Total
Com a formulao dos dados apresentados na Tabela 4, pde-se elaborar o grfico da Figura 16, que representa a distribuio do tempo em funo das etapas de
27
0,053%
Com os dados apresentados na Figura 16, percebe-se que o gargalo do sistema est na etapa de pr-processamento das notcias, que gasta 99,056% do tempo de processamento do sistema. Como j era esperado, o processamento de linguagem natural mostrou-se uma atividade custosa, como j citado na literatura por Marchi (2010) e, para obter um melhor desempenho do sistema, necessrio atacar esta fase buscando otimiz-la. Uma alternativa para a melhoria do processamento de linguagem natural a reduo de dimensionalidade do documento a ser trabalho. Assim, pode-se utilizar o princpio 80/20 de Pareto (Koch, 2000).
28
foram inseridos na Tabela 5, a qual apresenta as mdias do tempo de processamento (em segundos) de cada etapa do sistema.
Tabela 5. Comparao de desempenho entre 20% e 100% de termos de documentos utilizados.
20% 100%
O tempo obtido na fase de pr-processamento, apresentado na Tabela 5, foi relativamente similar entre a utilizao de 20% e 100% dos termos. Isto se d porque o corte no nmero de termos ocorre apenas ao final da fase de pr-processamento, ou seja, ambos os testes processaram 100% dos termos nessa fase. A fase de remoo obteve-se o mesmo tempo de processamento tanto na utilizao de 20% de termos quanto na utilizao de 100% de termos, uma vez que foi utilizada a mesma base de notcias durante os testes e tambm foram consideradas apenas as notcias dirias, zerando-se a base de notcias a cada dia. Desta maneira no houve remoo de notcias antigas. A fase de pontuao foi 60% mais eficiente com a utilizao de 20% dos termos para representao das notcias, pois menos termos foram testados no classificador Naive Bayes, o que lhe permite uma melhor aprendizagem. A fase de ordenao teve tempo de processamento prximo entre os dois testes realizados, pois ambos possuem a mesma complexidade de ordenao nesta fase. Por fim, concluiu-se que a diferena de tempo de processamento entre a utilizao de 20% dos termos e 100% dos termos pouca e, como ainda no foram analisadas as implicaes de um corte no nmero de termos durante a fase de recomendao de notcias, o sistema continuar a adotar 100% de termos na representao de documentos. Ainda em busca de uma soluo para o tempo de processamento do sistema, decidiu-se testar um novo mtodo de extrao das pginas Web, coletando um menor nmero de termos.
29
162,86 4.661,19
1,86 1,46E-06
16,57 27,29
2,24 1,762
183,54 4.690,24
100%
Em termos de desempenho percebe-se uma acentuada mudana no tempo de processamento do sistema com a nova abordagem. Enquanto no teste com a utilizao de 100% dos termos das notcias obteve-se um tempo mdio de 4.690,24 segundos (78,17 minutos) de processamento, no teste atual, com a utilizao apenas do ttulo e do sumrio das notcias, chegou-se apenas 183,54 segundos (3,07 minutos) de processamento, uma melhoria de 94,9% no tempo de processamento, cujo resultado extremamente significativo. Porm, ainda se deve analisar a qualidade dos resultados obtidos com a utilizao da nova abordagem. A qualidade do ranking das notcias, obtida pelo teste realizado com a utilizao de ttulo e sumrio para representar notcias, segue apresentado na Tabela 7.
30
Tabela 7. Resultado do teste de qualidade do ranking de notcias com a utilizao de ttulo e sumrio como forma de representao de documentos.
Mundo 1 1 1 1 1
Esporte 1 1 1 1 1
Tecnologia 1 1 1 1 1
Com os dados apresentados na Tabela 7, pde-se elaborar um grfico comparativo entre a qualidade do ranking das notcias com a utilizao desta nova abordagem. O grfico segue apresentado na Figura 17.
Figura 17. Ranking das notcias por categorias utilizando ttulo e sumrio para representao de documentos.
Como apresentado na Figura 17, a qualidade do ranking das notcias apresentadas nas categorias Mundo, Esporte e Tecnologia foi de 100%, resultado pouco superior ao teste com a utilizao de 100% de termos. A categoria Cincia teve 58% de notcias corretamente classificadas, a categoria Sade 68% e, a categoria Negcios, teve 54% de notcias corretamente classificadas. Como nota geral, para o caso de teste com a utilizao do ttulo e do sumrio para representao de notcias, a qualidade do ranking das notcias nas seis reas de interesse do sistema foi de 80%, uma 31
perda de 14,6% na qualidade dos resultados apresentados em comparao utilizao de 100% dos termos das notcias para represent-las. Em termos gerais o resultado obtido neste ltimo teste satisfatrio, pois o ganho de desempenho muito grande e a perda na qualidade dos resultados satisfatria para o propsito do sistema. Entretanto, na Tabela 7 percebemos que enquanto as categorias Mundo, Esporte e Tecnologia tiveram suas notcias bem classificadas, as demais categorias tiveram resultados inferiores ao teste da Subseo 4.2, tendo a categoria Negcios apenas 54% de corretude nas notcias apresentadas. Pensa-se que com um melhor treinamento do classificador Naive Bayes esse problema seja corrigido, atingindo melhores resultados.
32
Concluses
A excessiva sobrecarga de informao contida na Web nos levou a desenvolver este
trabalho visando tornar mais hbil o acesso do usurio a informao de seu interesse. A notcia, sendo apenas um subconjunto da informao, foi o nicho escolhido a ser trabalhado e, dentro deste grupo, optou-se por criar um sistema recomendador de notcias pertencentes a um conjunto restrito de reas de interesse: esporte, cincia, mundo, negcios, sade e tecnologia. Os resultados obtidos ao longo deste trabalho foram satisfatrios. Chegou-se ao valor mdio de 1.227 notcias recuperas diariamente. Foi analisada a aplicao de tcnicas distintas para a modelagem das notcias e tambm para sua recomendao. Percebeu-se que o modelo composto pela utilizao em conjunto da tcnica do coeficiente de Jaccard (para clculo de similaridade entre os interesses de um usurio e documentos) e de um conjunto de termos, sem considerar suas frequncias (para representar os documentos), no se mostrou adequado, devido a uma inconsistente modelagem do interesse do usurio. Para contornar esse problema, adotou-se o modelo de representao termo-frequncia na modelagem das notcias e do interesse do usurio e, tambm, o uso da tcnica de similaridade pelo cosseno para o clculo de similaridade entre documentos e o modelo do usurio, contornando os problemas apresentados pelo modelo anterior. Por meio de testes, foi avaliado o ranking das notcias nas reas de interesse do sistema. Inicialmente utilizou-se de 100% dos termos das notcias, obtendo uma preciso de 94,6%. Porm, a eficincia do processamento do sistema foi baixa, com valor mdio de 4.690,24 segundos (78,17 minutos) de processamento. A fim de se obter uma boa relao entre ganho de desempenho e qualidade dos resultados, testou-se a utilizao do princpio 80/20 de Pareto, reduzindo a quantidade de termos aos 20% mais frequentes. Este experimento no produziu resultados melhores que o uso de 100% dos termos. Por meio de testes, percebeu-se que o gargalo do sistema encontrava-se na fase de pr-processamento das notcias e, como a reduo do nmero de termos de um documento realizada ao final desta fase, o ganho de desempenho irrisrio nas fases seguintes.
33
Ainda na tentativa de otimizar o processamento do sistema, testou-se a utilizao apenas do ttulo e do sumrio na representao das notcias. Em relao utilizao de 100% dos termos extrados das notcias, a nova modelagem obteve ganho de desempenho de 94,9% e perca de 14,6% na qualidade dos resultados. Esse resultado foi considerado satisfatrio, pois o ganho de desempenho muito grande e a perca na qualidade dos resultados aceitvel para o propsito do sistema. Como esse trabalho no est concludo, tem-se como metas futuras, a fim de otimizar os resultados gerados: o estabelecimento de um bom valor de decaimento temporal para as notcias; a definio de uma janela de tempo adequada para a relevncia das notcias; a criao de uma nova equao para o clculo da relevncia do feedback do usurio; e ainda a utilizao do modelo TF-IDF para a representao do interesse do usurio e de documentos. Entende-se, que um sistema recuperador de notcias de utilidade conhecida, haja vista que se encontram inmeros portais de notcias na Internet. Um sistema que alm de recuperar notcias ainda tem a capacidade de recomend-las ao usurio em funo de seus interesses vem agregar Web.
34
Referncias Bibliogrficas
Alag, S. (2009). Collective Intelligence in Action. Manning. Beautiful Soup, 2012. Beautiful Soup: We called him Tortoise because he taught us. Acesso em 24 de 09 de 2012, disponvel em Beautiful Soup: We called him Tortoise because he taught us:
http://www.crummy.com/software/BeautifulSoup/ Cardoso, O. N. P. (2000). Recuperao de Informaao. Infocomp, Revista de Computao da UFLA, v.1, pp. 33-38, Minas Gerais. elikba, Z. What is RSS and how can it serve libraries?, 2004. In First International Conference on Innovations in Learning for the Future: e-Learning, stanbul (Turkey), 26-27 October 2004. Istanbul University. pp. 277-292. Chen, H. (1994). The vocabulary problem in collaboration. IEEE Computer, v.27, n.5. CherryPy, 2012. Cherrypy - A Minimalist Python Web Framework. Acesso em 12 de 11 de 2012, disponvel em http://www.cherrypy.org/: http://www.cherrypy.org/ CherryPy 3.2.0 Documentation. Acesso em 20 de 09 de 2012, disponvel em CherryPy 3.2.0 Documentation: http://docs.cherrypy.org/stable/index.html Feedparser, 2012. Feedparser 5.1.2 : Python Package Index. Acesso em 12 de 11 de 2012, disponvel em http://pypi.python.org/pypi/feedparser/:
http://pypi.python.org/pypi/feedparser/ Fellbaum, C. A. (1998). WordNet: An Electronic Lexical Database. MIT Press. Ferneda, E. (2003). Recuperao de Informao: Anlise sobre a contribuio da Cincia da Computao para a Cincia da Informao. Tese de Doutorado. Huang, A. (2008). Similarity Measures for Text Document Clustering. Computer Science Research Student Conference, NZCSRSC2008, pp. 49-56, New Zealand, Department of Computer Science, The University of Waikato, Hamilton, NewZealand.. Jannach, D., Janker, M., Felfernig, A., & Friedrich, G. (2011). Recommender Systems An Introduction. Cambridge University Press.
35
Koch, R. (2000). O Princpio 80/20: o segredo de se realizar mais com menos. Traduo de Nivaldo Montingelli Jr. Rio de Janeiro: Rocco. Lutz, M. (2006). Programming Python. O'Reilly. Manning, C. D., Raghavan, P., & Schtze, H. (2008). Introduction to Information Retrieval. Cambridge: Cambridge University Press. Marchi, K. R. (2010). Uma Abordagem para Personalizao de Resultados de Busca na Web. Dissertao de Mestrado. PCC/UEM. Marmanis, H., & Babenko, D. (2009). Algorithms of the Intelligent Web. Manning. Meng, W., & Yu, C. (2010). Web Search Technology for Text Documents. In H. Bidgoli, The Handbook of Technology Management (pp. 466-481). New Jersey: Editor-in-Chief. Natural Language Toolkit - NLTK 2.0 documentation. Acesso em 09 de 24 de 2012, disponvel em Natural Language Toolkit - NLTK 2.0 documentation: http://nltk.org/ Owen, S., Anil, R., Dunning, T., & Friedman, E. (2012). Mahout in Action. Manning. Porter, M. F. (1980). An algorithm for suffix stripping, Program: electronic library and information systems, Vol. 40:3, pp.211 - 218. Reverend A, 2012. Python's Reverend Thomas library is a naive Bayes classifier library. Acesso em 24 de 09 de 2012, disponvel em Python's Reverend Thomas library is a naive Bayes classifier library.:
http://news.ycombinator.com/item?id=1363862 Reverend B, 2012. Reverend 0.4: Python Package Index. Acesso em 24 de 09 de 2012, disponvel em Reverend 0.4: Python Package Index:
http://pypi.python.org/pypi/Reverend Rieh, S. Y. (2002). Judgment of information quality and cognitive authority in the Web. In: Journal of the American Society for Information Science and Technology (pp. 145-161). Redwood City. RSS Libraries - PythonInfo Wiki. Acesso em 24 de 09 de 2012, disponvel em RSS Libraries - PythonInfo Wiki: http://wiki.python.org/moin/RssLibraries
36
Segaran, T. (2007). Programming Collective Intelligence. O'Reilly. World Wide Web Size. Acesso em 5 de outubro de 2012, disponvel em http://www.worldwidewebsize.com/
37
Apndice
Nesta seo sero apresentados os websites que foram utilizados para recuperar
38
http://feeds.bbci.co.uk/news/world/latin_america/rss.xml http://feeds.news.com.au/public/rss/2.0/ndp_sci_nat_347.xml http://feeds.bbci.co.uk/news/business/rss.xml http://feeds.nytimes.com/nyt/rss/Hockey http://feeds.nytimes.com/nyt/rss/Africa http://feeds.bbci.co.uk/news/world/us_and_canada/rss.xml http://feeds.news.com.au/public/rss/2.0/tech_cameras_509.xml http://feeds.news.com.au/public/rss/2.0/tech_gaming_511.xml http://news.google.com/news/section?pz=1&cf=all&ned=us&topic=w&ict= ln&output=rss http://feeds.gawker.com/Lifehacker/full http://feeds.nytimes.com/nyt/rss/Views http://feeds.bbci.co.uk/news/uk/rss.xml http://feeds.nytimes.com/nyt/rss/Environment http://news.google.com/news/section?pz=1&cf=all&ned=us&topic=b&ict= ln&output=rss http://feeds.nytimes.com/nyt/rss/Baseball http://feeds.nytimes.com/nyt/rss/business-computing http://news.yahoo.com/rss/sports http://feeds1.nytimes.com/nyt/rss/Sports http://feeds.nytimes.com/nyt/rss/AsiaPacific http://feeds.nytimes.com/nyt/rss/HealthCarePolicy http://feeds.bbci.co.uk/news/world/africa/rss.xml http://feeds.nytimes.com/nyt/rss/SmallBusiness http://feeds.news.com.au/public/rss/2.0/tech_reviews_812.xml http://feeds.nytimes.com/nyt/rss/companies http://feeds.nytimes.com/nyt/rss/Health http://feeds.news.com.au/public/rss/2.0/tech_homeent_510.xml http://feeds.nytimes.com/nyt/rss/Golf http://feeds.nytimes.com/nyt/rss/Europe http://feeds.nytimes.com/nyt/rss/Soccer http://feeds.feedburner.com/newscomauworldnewsndm
39
1 2 3 4 5 6
40
7.2.2 NewsSearch
1 2 3 4 5 6 7 8 9 10
from reverend.thomas import Bayes from includes.Scorer import * import pickle import time
class NewsSearch():
chnology','http://feeds.nytimes.com/nyt/rss/companies', 'http://feeds.nytimes.com/nyt/rss/businesscomputing','http://feeds.nytimes.com/nyt/rss/PersonalTech','http://feeds.bbci .co. uk/news/technology/rss.xml','http://news.google.com/news/section?pz=1 &cf=all&ned=us&topic=tc&ict=ln&output=rss','http://feed s.gawker.com/Lifehacker/full','http://feeds.news.com.au/public/rss/2. 0/tech_cameras_509.xml','http://feeds.news.com.au/publi c/rss/2.0/tech_homeent_510.xml','http://feeds.news.com.au/public/rss/ 2.0/tech_reviews_812.xml','http://feeds.news.com.au/pub lic/rss/2.0/tech_computers_508.xml','http://feeds.news.com.au/public/ rss/2.0/tech_gaming_511.xml','http://feeds.news.com.au/ public/rss/2.0/tech_mobiles_507.xml','http://feeds1.nytimes.com/nyt/r ss/Sports','http://feeds.nytimes.com/nyt/rss/Soccer','h ttp://feeds.nytimes.com/nyt/rss/Golf','http://feeds.nytimes.com/nyt/r ss/Hockey','http://feeds.nytimes.com/nyt/rss/Baseball', 'http://news.google.com/news/section?pz=1&cf=all&ned=us&topic=s&ict=l n&output=rss','http://news.yahoo.com/rss/sports','http: //feeds.nytimes.com/nyt/rss/World','http://feeds.nytimes.com/nyt/rss/ Africa','http://feeds.nytimes.com/nyt/rss/Americas','ht tp://feeds.nytimes.com/nyt/rss/AsiaPacific','http://feeds.nytimes.com /nyt/rss/Europe','http://feeds.nytimes.com/nyt/rss/Midd leEast','http://feeds.bbci.co.uk/news/uk/rss.xml','http://feeds.bbci. co.uk/news/world/africa/rss.xml','http://feeds.bbci.co. uk/news/world/asia/rss.xml','http://feeds.bbci.co.uk/news/world/europ
41
e/rss.xml','http://feeds.bbci.co.uk/news/world/latin_am erica/rss.xml','http://feeds.bbci.co.uk/news/world/middle_east/rss.xm l','http://feeds.bbci.co.uk/news/world/us_and_canada/rs s.xml','http://news.google.com/news/section?pz=1&cf=all&ned=us&topic= w&ict=ln&output=rss','http://feeds.feedburner.com/newsc omauworldnewsndm','http://feeds.nytimes.com/nyt/rss/Science','http:// feeds.nytimes.com/nyt/rss/Space','http://feeds.nytimes. com/nyt/rss/Environment','http://feeds.bbci.co.uk/news/science_and_en vironment/rss.xml','http://feeds.news.com.au/public/rss /2.0/ndp_sci_nat_347.xml','http://feeds.nytimes.com/nyt/rss/Business' ,'http://feeds.nytimes.com/nyt/rss/EnergyEnvironment',' http://www.nytimes.com/services/xml/rss/nyt/GlobalBusiness.xml','http ://feeds.nytimes.com/nyt/rss/SmallBusiness','http://fee ds.nytimes.com/nyt/rss/Economy','http://feeds.bbci.co.uk/news/busines s/rss.xml','http://news.google.com/news/section?pz=1&cf =all&ned=us&topic=b&ict=ln&output=rss','http://feeds.nytimes.com/nyt/ rss/Health','http://feeds.nytimes.com/nyt/rss/Research' ,'http://feeds.nytimes.com/nyt/rss/Nutrition','http://feeds.nytimes.c om/nyt/rss/HealthCarePolicy','http://feeds.nytimes.com/ nyt/rss/Views','http://feeds.bbci.co.uk/news/health/rss.xml','http:// news.google.com/news/section?pz=1&cf=all&ned=us&topic=m &ict=ln&output=rss','http://feeds.news.com.au/public/rss/2.0/ndp_hlth _nlivng_317.xml']) 11 12 13 14 15 16 #PERCORRE AS NEWS DOS WEBSITES E CASO A NOTICIA SEJA #CARREGA O SCORER self.scorer = Score() self.scorer.load()
NOVA, ADICIONA AO CONJUNTO DE NEWS DO SISTEMA 17 18 19 20 21 22 23 24 #PONTUA AS NEWS PARA CADA CATEGORIA self.scorer.scoreNews() #REMOVE NEWS ANTIGAS self.scorer.cleanNews() self.scorer.searchNews(self.news)
42
25 26 27 28 29 30 31 32
43
7.2.3 ClassifierTrainer
1 2 3 4 5 6 7 8 9 10
from reverend.thomas import Bayes from BeautifulSoup import BeautifulSoup as bs from includes.PreProcessing import * import feedparser import nltk import urllib2
class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler): def http_error_302(self, req, fp, code, msg, headers): return urllib2.HTTPRedirectHandler.http_error_302(self, req,
16 17 18 19 20 21 22 23 24 25 26 27 28
urllib2.install_opener(opener)
class ClassifierTrainer():
44
ss.xml','http://news.google.com/news/section?pz=1&cf=al l&ned=us&topic=tc&ict=ln&output=rss','http://feeds.gawker.com/Lifehac ker/full','http://feeds.news.com.au/public/rss/2.0/tech _cameras_509.xml','http://feeds.news.com.au/public/rss/2.0/tech_homee nt_510.xml','http://feeds.news.com.au/public/rss/2.0/te ch_reviews_812.xml','http://feeds.news.com.au/public/rss/2.0/tech_com puters_508.xml','http://feeds.news.com.au/public/rss/2. 0/tech_gaming_511.xml','http://feeds.news.com.au/public/rss/2.0/tech_ mobiles_507.xml'] 29 self.dicNews['sports'] = ['http://feeds1.nytimes.com/nyt/rss/
Sports','http://rss.cnn.com/rss/edition_sport.rss','http:// feeds.nytimes.com/nyt/rss/Soccer','http://feeds.nytimes.com/nyt/rss/G olf','http://feeds.nytimes.com/nyt/rss/Hockey','http:// feeds.nytimes.com/nyt/rss/Baseball','http://rss.cnn.com/rss/edition_f ootball.rss','http://rss.cnn.com/rss/edition_golf.rss', 'http://rss.cnn.com/rss/edition_motorsport.rss','http://rss.cnn.com/r ss/edition_tennis.rss','http://news.google.com/news/sec tion?pz=1&cf=all&ned=us&topic=s&ict=ln&output=rss','http://news.yahoo .com/rss/sports'] 30 self.dicNews['world'] = ['http://rss.cnn.com/rss/edition_worl
d.rss','http://feeds.nytimes.com/nyt/rss/World','http://fee ds.nytimes.com/nyt/rss/Africa','http://feeds.nytimes.com/nyt/rss/Amer icas','http://feeds.nytimes.com/nyt/rss/AsiaPacific','h ttp://feeds.nytimes.com/nyt/rss/Europe','http://feeds.nytimes.com/nyt /rss/MiddleEast','http://rss.cnn.com/rss/edition_africa .rss','http://rss.cnn.com/rss/edition_americas.rss','http://rss.cnn.c om/rss/edition_asia.rss','http://rss.cnn.com/rss/editio n_europe.rss','http://rss.cnn.com/rss/edition_meast.rss','http://rss. cnn.com/rss/edition_us.rss','http://feeds.bbci.co.uk/ne ws/uk/rss.xml','http://feeds.bbci.co.uk/news/world/africa/rss.xml','h ttp://feeds.bbci.co.uk/news/world/asia/rss.xml','http:/ /feeds.bbci.co.uk/news/world/europe/rss.xml','http://feeds.bbci.co.uk /news/world/latin_america/rss.xml','http://feeds.bbci.c o.uk/news/world/middle_east/rss.xml','http://feeds.bbci.co.uk/news/wo rld/us_and_canada/rss.xml','http://news.google.com/news /section?pz=1&cf=all&ned=us&topic=w&ict=ln&output=rss','http://feeds. feedburner.com/newscomauworldnewsndm'] 31 self.dicNews['science'] = ['http://rss.cnn.com/rss/edition_sp
45
ealth','http://feeds.nytimes.com/nyt/rss/Research','http:// feeds.nytimes.com/nyt/rss/Nutrition','http://feeds.nytimes.com/nyt/rs s/HealthCarePolicy','http://feeds.nytimes.com/nyt/rss/V iews','http://feeds.bbci.co.uk/news/health/rss.xml','http://news.goog le.com/news/section?pz=1&cf=all&ned=us&topic=m&ict=ln&o utput=rss','http://feeds.news.com.au/public/rss/2.0/ndp_hlth_nlivng_3 17.xml'] 34 35 36 37 38 39 40 41 42 43 44 45 46 47 -8') 48 49 try: self.page = bs(urllib2.urlopen(self.item['lin #TREINA O CLASSIFICADOR for self.key,self.values in self.dicNews.items(): for self.url in self.values: self.feed = feedparser.parse(self.url) self.items = self.feed['items'] for self.item in self.items: print self.item['link'] self.item['link'] = self.item['link'].encode('utf def run(self): #CARREGA O PR-PROCESSADOR self.preProcessor = PreProcessing()
46
iption']).getText().encode('utf-8')) 53 54 55 56 57 58 59 self.guesser.save() self.text = '' self.tuples = self.preProcessor.getTuples() for self.tuple in self.tuples: self.text += self.tuple[0] + ' ' self.guesser.train(self.key,self.text)
47
7.2.4 PreProcessing
1 2 3 4 5 6 7 8 9
self.__tuples = None
emming''' 10 11 12 13 14 15 16 17 18 return [self.wnl.lemmatize(self.tk.lower()) for self.tk in to self.filterList = nltk.corpus.stopwords.words('english') self.wnl = nltk.WordNetLemmatizer() self.minLenght = 2 self.ASC2=["lt","gt","amp","quot"] import re import nltk
kensList if self.tk.lower() not in self.filterList and len(self.tk) > self.minLenght and self.tk not in self.ASC2 and not se lf.tk.isdigit() and not re.match(r"&(\#?\w+);",self.tk) ] 19 20 21 ermo-frequncia''' 22 23 24 25 26 27 28 29 ## normaliza tokens do corpo self.bodyTokens = self.filter(self.bodyRawTokens) # Tokeniza corpo e titulo self.bodyRawTokens = nltk.word_tokenize(bodyRaw) import nltk def extract(self,bodyRaw): '''Extrai um texto html e retorna um conjunto de tuplas t
48
30 31 Tokens) 32 33 34 35 36
self.__tuples = self.bodyTokensDist.items()
49
7.2.5 Scorer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
from datetime import datetime from PreProcessing import PreProcessing from News import News from reverend.thomas import Bayes import urllib2, httplib import feedparser from BeautifulSoup import BeautifulSoup as bs import nltk
class Score():
def sortNews(self,valor):
50
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
valor2 = valor[:] news2 = self.news[:] for i in range(len(valor2)-1, 0, -1): for j in range(i): if valor2[j] < valor2[j+1]: valor2[j],valor2[j+1] = valor2[j+1],valor2[j] news2[j],news2[j+1] = news2[j+1],news2[j] return news2
def searchNews(self,news): PreProcessor = PreProcessing() time = datetime.now() for url in news: feed = feedparser.parse(url) items = feed['items'] for item in items: print item['link'] item['link'] = item['link'].encode('utf-8') try: page = bs(opener.open(item['link']).read()) PreProcessor.extract(nltk.clean_html(" ".join([st
r(x) for x in page.findAll("body")]))) 57 58 ext().encode('utf-8')) 59 60 61 62 63 64 65 66 67 68 69 text = PreProcessor.getTuples() novo = News() tuples = {} for key,value in text: tuples[key] = value novo.setTitle(item['title']) novo.setDescription(item['description']) novo.setLink(item['link']) novo.setDate(item['published_parsed']) novo.setTokens(tuples) if novo not in self.news and novo.getTitle() not in [ except: PreProcessor.extract(bs(item['description']).getT
51
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 def scoreNews(self): time = datetime.now() guesser = Bayes() guesser.load() self.score = [[],[],[],[],[],[]] for i in self.news: string = '' for j in i.getTokens().keys(): string += j + ' ' nota = guesser.guess(string) ano = abs(time.year - i.getDate().tm_year)*365 mes = abs(time.month - i.getDate().tm_mon)*30 dia = abs(time.day - i.getDate().tm_mday) result = ano+mes+dia for j in nota: j = list(j) j[1] = j[1] - (j[1]*result*15/100) if j[0] == 'world': world = j[1] elif j[0] == 'sports': sports = j[1] elif j[0] == 'technology': technology = j[1] elif j[0] == 'science': science = j[1] def cleanNews(self): time = datetime.now() blacklist = [] for i in self.news: ano = abs(time.year - i.getDate().tm_year)*365 mes = abs(time.month - i.getDate().tm_mon)*30 dia = abs(time.day - i.getDate().tm_mday) if ano+mes+dia > 7: blacklist+=[i] for i in blacklist: self.news.remove(i)
52
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
elif j[0] == 'business': business = j[1] elif j[0] == 'health': health = j[1] self.score[0].append(world) self.score[1].append(sports) self.score[2].append(technology) self.score[3].append(science) self.score[4].append(business) self.score[5].append(health)
def sortScore(self): self.result = {} self.result['world'] = self.sortNews(self.score[0]) self.result['sports'] = self.sortNews(self.score[1]) self.result['technology'] = self.sortNews(self.score[2]) self.result['science'] = self.sortNews(self.score[3]) self.result['business'] = self.sortNews(self.score[4]) self.result['health'] = self.sortNews(self.score[5])
53
7.2.6 User
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 from reverend.thomas import Bayes from datetime import datetime from math import sqrt class User(): def __init__(self,login=None,password=None): self.login = login self.password = password self.tokens = dict() self.like = [] self.dislike = [] self.preprocessed = [] def setTokens(self,tokens): for key,value in tokens.items(): if key in self.tokens.keys(): self.tokens[key] += value else: self.tokens[key] = value if self.tokens[key] == 0: self.tokens.pop(key) def removeTokens(self,tokens): for key,value in tokens.items(): if key in self.tokens.keys(): self.tokens[key] -= value else: self.tokens[key] = 0 - value if self.tokens[key] == 0: self.tokens.pop(key) def setLike(self,link): self.like.append(link)
def setDislike(self,link): self.dislike.append(link) def treatLike(self,tokens,link): if link in self.dislike: self.dislike.remove(link) else: if link not in self.like: self.setLike(link) self.setTokens(tokens)
54
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 s)
def treatDislike(self,tokens,link): if link in self.like: self.like.remove(link) else: if link not in self.dislike: self.setDislike(link) self.removeTokens(tokens) def scalar(self,collection): total = 0 for coin, count in collection.items(): total += count * count return sqrt(total) def similarity(self,A,B): # A and B are coin collections total = 0 for kind in A: # kind of coin if kind in B: total += A[kind] * B[kind] try: result = float(total) / (self.scalar(A) * self.scalar(B)) except: result = 0 return result def cosineDistance(self,news): try: if len(self.like) == 0 and len(self.dislike) == 0: self.preprocessed = [] else: time = datetime.now() similarity = [] news2 = news[:] for i in range(len(news2)): nota = self.similarity(self.tokens,news2[i].token
83 ano = abs(time.year news2[i].date_parsed.tm_year)*365 84 mes = abs(time.month news2[i].date_parsed.tm_mon)*30 85 dia = abs(time.day news2[i].date_parsed.tm_mday) 86 result = ano+mes+dia 87 nota = nota - (nota*result*15/100) 88 if news2[i].link in self.like or news2[i].link in self.dislike: 89 nota = -999 90 similarity.append(nota)
55
91 92 93 94 y[j+1],similarity[j] 95 96 97 98
for i in range(len(similarity)-1, 0, -1): for j in range(i): if similarity[j] < similarity[j+1]: similarity[j],similarity[j+1] = similarit news2[j],news2[j+1] = news2[j+1],news2[j]
56
7.2.7 News
1 2 3 4 5 6 7
class News(): def __init__(self): self.title = None self.description = None self.date_parsed = None self.link = None self.tokens = None
57
7.2.8 Web
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# -*- coding: utf-8 -*import os.path import time import cherrypy import pickle from cherrypy.lib.static import serve_file from includes.User import * import ast #converter string para dict
class Web():
le>body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,for m,fieldset,input,textarea,p,blockquote,th,td {margin:0;padding:0;}tab le {border-collapse:collapse;border-spacing:0;}fieldset ,img {border:0;}address,caption,cite,code,dfn,em,strong,th,var {fontstyle:normal;font-weight:normal;}ol,ul {list-style:none ;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6 {fontsize:100%;font-weight:normal;}q:before,q:after {content:'';}abbr,acro nym {border:0;}.clearfix:after { content: ".";display: block;c
lear: both;visibility: hidden;line-height: 20px;height: 0;}.clearfix {display: inlineblock;}html[xmlns] .clearfix {display: block;fontfamily: Verdana, Arial, Helvetica, sans-ser if;}* html .clearfix {height: 1%;}#limit{width:1000px;margin:0 auto;d isplay:block;}#news{width:1000px;margin:0 auto;display: block;border:1px solid gray;border-radius:1em;}#footer{textalign:center;padding:50px 0 0 0;}#title{text-align:center;displa y:block;font:bold 60px Helvetica, Arial, sansserif;margin: 0 0 20px 0;}#listaTitulo{textalign:center;display:block;font:bo ld 30px Helvetica, Arial, sansserif;margin: 0 0 20px 0;}.item{width:800px;margin: 0 auto;borderbottom:solid 1px #EFEFEF;}.
58
item a{marginbottom: 10px;display: block;}.item form input{position:relative;left:800px;pa dding:5px;margin:3px;}#botao{posi tion:relative;left:800px;width:200px;top:-70px;}form input{fontsize:15px;}#botao input{font-size:15px;}#gsii{position:relat ive;}#header{height:200px;}#flagLink{position:absolute;width:50px;hei ght:50px;top:100px}#flagImg{position:absolute;width:50p x;height:50px;}.bloco{border:1px solid gray;margin:10px;padding:10px; border-radius:1em; }</style></head><body><div id="limit "><div id="header"><a id="flagLink" href="/"><img id="flagImg"src="ht tp://www.veryicon.com/icon/png/System/Fresh%20Addon/Arr ow%20left.png" alt="arrow"/></a><img id="gsii" src="http://din.uem.br /gsii/logo.gif" alt="gsii"/><div id="botao"><label>Welc ome '+cherrypy.session.get('user').login+'</label><br/><button onclic k="javascript:location.href = \'logout\'">Log out</butt on><button onclick="javascript:location.href = \'account\'">Account</ button></div></div>'] 15 16 o">Likes</label>'] 17 18 '+i+'</a></div>'] 19 20 21 if len(user.like) == 0: webText += ['You dont have likes yet!'] webText += ['</div><div class="bloco"><label id="list for i in user.like: webText += ['<div class="item"><a href='+i+'> webText += ['<label id="title">Account</label>'] webText += ['<div class="bloco"><label id="listaTitul
aTitulo">Dislikes</label>'] 22 23 '+i+'</a></div>'] 24 25 26 27 28 29 30 31 def dislike(self,link=None,tokens=None,page=None): news = cherrypy.session.get('news') user = cherrypy.session.get('user') if len(user.dislike) == 0: webText += ['You dont have likes yet!'] webText += ['</div>'] return webText for i in user.dislike: webText += ['<div class="item"><a href='+i+'>
59
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 y.go(-1);</script>" 54 55 56
user.treatDislike(ast.literal_eval(tokens),link) user.cosineDistance(news) file = open("users/"+user.login,'w') pickle.dump(user,file) file.close() cherrypy.session['user'] = user return "<script>location.href = '"+page+"'</script>"
def like(self,link=None,tokens=None,page=None): news = cherrypy.session.get('news') user = cherrypy.session.get('user') user.treatLike(ast.literal_eval(tokens),link) user.cosineDistance(news) file = open("users/"+user.login,'w') pickle.dump(user,file) file.close() cherrypy.session['user'] = user return "<script>location.href = '"+page+"'</script>"
ts!');history.go(-1);</script>" 57 58 59 60 61 62 except: user = User(login,senha) file = open('users/'+login,'w') pickle.dump(user,file) file.close() cherrypy.session['user'] = user
63
60
66
Type' content='text/html; charset=utf-8'/><style>body,div, dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea, p,blockquote,th,td {margin:0;padding:0;}table {border-c ollapse:collapse;borderspacing:0;}fieldset,img {border:0;}address,caption,cite,code,dfn,em,strong,th ,var {font-style:normal ;font-weight:normal;}ol,ul {list-style:none;}caption,th {textalign:left;}h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:norm al;}q:before,q:after {content:'';}abbr,acronym {border:0;}.clearfix:a fter { content: '.';display: block;clear: both;visi bility: hidden;lineheight: 20px;height: 0;}.clearfix {display: inlineblock;}html[xmlns] .clearfix {display: block;font-fam ily: Verdana, Arial, Helvetica, sansserif;}* html .clearfix {height: 1%;}#title{textalign:center;position:relative;font-si ze:60px;border-bottom: 1px solid black;left:250px;}#footer{textalign:center;padding:50px 0 0 0;}#limit{width:1000px;margin: 0 auto;display:block;}#header{height:200px;}#botao button{fontsize:15px;}form{display:block;margin:0 auto;width:470;}#gsii{ position:relative;display:block;}#flagLink{position:absolute;width:50 px;height:50px;top:100px}#flagImg{position:absolute;wid th:50px;height:50px;}</style><title>TCC Nathan</title></head><body><d iv id='limit'><div id='header'><img id='gsii' src='http ://din.uem.br/gsii/logo.gif' alt='gsii'/><a id='flagLink' href='/'><i mg id='flagImg'src='http://www.veryicon.com/icon/png/Sy stem/Fresh%20Addon/Arrow%20left.png' alt='arrow'/></a></div>"] 67 webText += ["<form method='post' id='signinForm' acti
on='signin'>User:<input name='login' type='text'/>Passw ord:<input name='senha' type='password'/> <input type='submit' value= 'Sign in'/></form>"] 68 webText += ["<div id='footer'><label>Developed by Nat
69 70 71
return webText
def login(self,login=None,senha=None,page=None):
61
72 73 74 75 76 77 78 79 80 81 82 83 ge+"'</script>" 84 85
try: user = pickle.load(open('users/'+login,'r')) if user.password == senha: cherrypy.session['user'] = user news = cherrypy.session.get('news') user = cherrypy.session.get('user') user.cosineDistance(news) file = open("users/"+user.login,'w') pickle.dump(user,file) file.close() cherrypy.session['user'] = user return "<script>location.href = '"+pa
rd!');history.go(-1);</script>" 86 87 istory.go(-1);</script>" 88 89 90 91 92 93 94 def result(self,category=None): webText = ['<html><head><title>TCC Nathan</title><sty def logout(self): cherrypy.session['user'] = None return '<script>location.href = "/"</script>' except: return "<script>alert('User doesnt exist!');h
le>body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,for m,fieldset,input,textarea,p,blockquote,th,td {margin:0;padding:0;}tab le {border-collapse:collapse;border-spacing:0;}fieldset ,img {border:0;}address,caption,cite,code,dfn,em,strong,th,var {fontstyle:normal;font-weight:normal;}ol,ul {list-style:none ;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6 {fontsize:100%;font-weight:normal;}q:before,q:after {content:'';}abbr,acro nym {border:0;}.clearfix:after { content: ".";display: block;c
lear: both;visibility: hidden;line-height: 20px;height: 0;}.clearfix {display: inlineblock;}html[xmlns] .clearfix {display: block;fontfamily: Verdana, Arial, Helvetica, sans-ser
62
if;}* html .clearfix {height: 1%;}#limit{width:1000px;margin:0 auto;d isplay:block;}#news{width:1000px;margin:0 auto;display: block;border:1px solid gray;border-radius:1em;}#footer{textalign:center;padding:50px 0 0 0;}#title{text-align:center;displa y:block;font:bold 60px Helvetica, Arial, sansserif;margin: 0 0 20px 0;}.item{width:800px;padding:10px 30px;borderbottom:so lid 1px #EFEFEF;}.item .date{color:gray;display:block;padding:0 5px 5 px 5px;}.item .title{font-size:24px}.item .description{ display: block; width:500px;padding:5px 20px;}.item form input{positi on:relative;left:800px;padding:5px;margin:3px;}#botao{p osition:relative;left:800px;width:200px;top:-70px;}form input{fontsize:15px;}#botao input{font-size:15px;}#gsii{position:re lative;}#header{height:200px;}#flagLink{position:absolute;width:50px; height:50px;top:100px}#flagImg{position:absolute;width: 50px;height:50px;}</style></head><body><div id="limit"><div id="heade r"><a id="flagLink" href="/"><img id="flagImg"src="http ://www.veryicon.com/icon/png/System/Fresh%20Addon/Arrow%20left.png" a lt="arrow"/></a><img id="gsii" src="http://din.uem.br/g sii/logo.gif" alt="gsii"/>'] 95 96 if cherrypy.session.get('user') == None: webText+=['<div id="botao"><form method="post
" id="login" action="login"><input name="page" type="hi dden" value="result?category='+category+'"/>User:<input name="login" type="text"/>Password:<input name="senha" type="passwor d"/><input type="submit" value="Log in"/></form><button onclick = "ja vascript:location.href = \'signinForm\';">Sign in</butt on></div>'] 97 98 else: webText+=['<div id="botao"><label>Welcome '+c
herrypy.session.get('user').login+'</label><br/><button onclick="javascript:location.href = \'logout\'">Log out</button><but ton onclick="javascript:location.href = \'account\'">Ac count</button></div>'] 99 100 ed 101 else: if category == 'user': dic = cherrypy.session.get('user').preprocess
63
dic = cherrypy.session.get('preprocessed')[ca
webText+=['</div><label id="title">'+category.capital
ize()+'</label><div id="news">'] 104 105 106 107 try: for i in range(10): webText+=['<div class="item">'] webText+=['<label class="title"><a hr
method="post" action="like"><input name="page" type="hi dden" value="result?category='+category+'"/><input name="tokens" type ="hidden" value="'+str(dic[i].tokens)+'"/><input name=" link" type="hidden" value="'+dic[i].link+'"/><input type="submit" '] 111 ssion.get('user').like: 112 ackground: #b4e391;"'] 113 form>'] 114 webText+=['<form name="dislik webText += ['value="Like"/></ webText += ['style="b if dic[i].link in cherrypy.se
e" method="post" action="dislike"><input name="page" ty pe="hidden" value="result?category='+category+'"/><input name="tokens " type="hidden" value="'+str(dic[i].tokens)+'"/><input name="link" type="hidden" value="'+dic[i].link+'"/><input type="submi t"'] 115 ssion.get('user').dislike: 116 ackground: #ff3019;"'] 117 ></form>'] webText += ['value="Dislike"/ webText += ['style="b if dic[i].link in cherrypy.se
64
118
webText+=['<label class="description"
>'+dic[i].description.encode('utf-8')+'</label>'] 119 120 121 essed!'] 122 webText+=["</div></div><div id='footer'><label>Develo except: webText+=['You dont have a model already proc webText+=['</div>']
ped by Nathan Siegle Hartmann, 2012</label></div></body ></html>"] 123 124 125 126 127 128 129 130 131 132 133 134 135 136 t>' 137 webText = ["<html><head><meta http-equiv='Contentdef index(self): if cherrypy.session.get('preprocessed') == None: return '<script>location.href = "loading"</scrip def loading(self): file = open('preprocessed','r') preprocessed = pickle.load(file) cherrypy.session['preprocessed'] = preprocessed file = open('base_news','r') news = pickle.load(file) cherrypy.session['news'] = news return '<script>location.href = "/"</script>' return webText
Type' content='text/html; charset=utf-8'/><style>body,div, dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea, p,blockquote,th,td {margin:0;padding:0;}table {border-c ollapse:collapse;borderspacing:0;}fieldset,img {border:0;}address,caption,cite,code,dfn,em,strong,th ,var {font-style:normal ;font-weight:normal;}ol,ul {list-style:none;}caption,th {textalign:left;}h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:norm al;}q:before,q:after {content:'';}abbr,acronym {border:0;}.clearfix:a fter { content: '.';display: block;clear: both;visi bility: hidden;lineheight: 20px;height: 0;}.clearfix {display: inlineblock;}html[xmlns] .clearfix {display: block;font-fam
65
ily: Verdana, Arial, Helvetica, sansserif;}* html .clearfix {height: 1%;}#title{textalign:center;position:relative;font-si ze:60px;border-bottom: 1px solid black;left:250px;}#footer{textalign:center;padding:50px 0 0 0;}#limit{width:1000px;margin: 0 auto;display:block;}#botao{position:relative;left:800px;width:200px ;top:-70px;}#header{height:200px;}#botao input{font-siz e:15px;}#options{display:block;margin:0 auto;width:520;}#gsii{positio n:relative;}</style><title>TCC Nathan</title></head><bo dy><div id='limit'><div id='header'><img id='gsii' src='http://din.ue m.br/gsii/logo.gif' alt='gsii'/>"] 138 139 if cherrypy.session.get('user') == None: webText+=['<div id="botao"><form method="post
" id="login" action="login"><input name="page" type="hi dden" value="index"/>User:<input name="login" type="text"/>Password:< input name="senha" type="password"/><input type="submit " value="Log in"/></form><button onclick = "javascript:location.href = \'signinForm\';">Sign in</button></div>'] 140 141 else: webText+=['<div id="botao"><label>Welcome '+c
herrypy.session.get('user').login+'</label><br/><button onclick="javascript:location.href = \'logout\'">Log out</button><but ton onclick="javascript:location.href = \'account\'">Ac count</button></div>'] 142 webText += ["</div><label id='title'>News Search Engi
ne</label><div id='options'><button onclick=\"javascrip t:location.href = 'result?category=world'\";>World</button><button on click=\"javascript:location.href = 'result?category=spo rts'\";>Sports</button><button onclick=\"javascript:location.href = ' result?category=technology'\";>Technology</button><butt on onclick=\"javascript:location.href = 'result?category=science'\";> Science</button><button onclick=\"javascript:location.h ref = 'result?category=health'\";>Health</button><button onclick=\"ja vascript:location.href = 'result?category=business'\";> Business</button>"] 143 144 if cherrypy.session.get('user') == None: webText += ["<button disabled onclick=\"javas
cript:location.href = 'result?category="+str(cherrypy.s
66
by Nathan Siegle Hartmann, 2012</label></div></body></h tml>"] 148 149 150 151 152 153 154 155 156 157 158 159 index.exposed = True loading.exposed = True result.exposed = True signinForm.exposed = True signin.exposed = True login.exposed = True logout.exposed = True like.exposed = True dislike.exposed = True account.exposed = True return webText
67
Universidade Estadual de Maring Departamento de Informtica Av. Colombo 5790, Maring-PR, CEP 87020-900 Tel: (44) 3011-4324 Fax: (44) 3263-5874 www.din.uem.br 68