Por um tempo, venho tentando encontrar uma maneira de extrair de forma inteligente o texto "relevante" de um URL, eliminando o texto relacionado aos anúncios e todo o resto. Após vários meses de pesquisa, desisti como um problema que não pode ser determinado com precisão. (Eu tentei maneiras diferentes, mas nenhuma era confiável)
Uma semana atrás, me deparei com Legibilidade - um plugin que converte qualquer URL em texto legível. Parece muito preciso para mim. Meu palpite é que eles de alguma forma têm um algoritmo inteligente o suficiente para extrair o texto relevante.
Alguém sabe como eles fazem isso? Ou como eu poderia fazer isso de forma confiável?
javascript
asp.net
extraction
user300981
fonte
fonte
Respostas:
A legibilidade consiste principalmente em heurísticas que "funcionam bem de alguma forma" em muitos casos.
Eu escrevi alguns trabalhos de pesquisa sobre este tópico e gostaria de explicar por que é fácil encontrar uma solução que funcione bem e quando fica difícil chegar perto de 100% de precisão.
Parece haver uma lei linguística subjacente à linguagem humana que também (mas não exclusivamente) se manifesta no conteúdo da página da Web, que já separa claramente dois tipos de texto (texto completo vs. texto não completo ou, aproximadamente, " conteúdo principal "vs." clichê ").
Para obter o conteúdo principal do HTML, em muitos casos é suficiente manter apenas os elementos de texto HTML (ou seja, blocos de texto que não são interrompidos pela marcação) que têm mais de cerca de 10 palavras. Parece que os humanos escolhem entre dois tipos de texto ("curto" e "longo", medido pelo número de palavras que emitem) para duas motivações diferentes de escrever um texto. Eu as chamaria de motivações "navegacionais" e "informativas".
Se um autor deseja que você obtenha rapidamente o que está escrito, ele / ela usa um texto "navegacional", ou seja, poucas palavras (como "PARAR", "Leia isto", "Clique aqui"). Este é o tipo de texto mais proeminente em elementos de navegação (menus etc.)
Se um autor quer que você entenda profundamente o que ele quer dizer, ele usa muitas palavras. Dessa forma, a ambigüidade é removida ao custo de um aumento na redundância. O conteúdo semelhante a um artigo geralmente se enquadra nessa classe, pois contém mais do que apenas algumas palavras.
Embora essa separação pareça funcionar em uma infinidade de casos, está ficando complicada com títulos, frases curtas, isenções de responsabilidade, rodapés de direitos autorais etc.
Existem estratégias e recursos mais sofisticados que ajudam a separar o conteúdo principal do clichê. Por exemplo, a densidade do link (número de palavras em um bloco que estão vinculadas versus o número total de palavras no bloco), as características dos blocos anteriores / seguintes, a frequência de um texto de bloco específico na Web "inteira", Estrutura DOM do documento HTML, a imagem visual da página etc.
Você pode ler meu artigo mais recente " Detecção de padrões usando recursos de texto raso " para obter alguns insights de uma perspectiva teórica. Você também pode assistir ao vídeo da minha apresentação em papel no VideoLectures.net.
"Legibilidade" usa alguns desses recursos. Se você observar cuidadosamente o changelog do SVN, verá que o número de estratégias variou ao longo do tempo, assim como a qualidade de extração da Legibilidade. Por exemplo, a introdução da densidade de link em dezembro de 2009 ajudou muito a melhorar.
Na minha opinião, portanto, não faz sentido dizer "Legibilidade é assim", sem mencionar o número exato da versão.
Publiquei uma biblioteca de extração de conteúdo HTML de código aberto chamada boilerpipe , que fornece várias estratégias de extração diferentes. Dependendo do caso de uso, um ou outro extrator funciona melhor. Você pode experimentar esses extratores em páginas de sua escolha usando o aplicativo boilerpipe-web no Google AppEngine.
Para deixar os números falarem, consulte a página " Benchmarks " no wiki do boilerpipe, que compara algumas estratégias de extração, incluindo boilerpipe, legibilidade e Apple Safari.
Devo mencionar que esses algoritmos assumem que o conteúdo principal é, na verdade, um texto completo. Há casos em que o "conteúdo principal" é outra coisa, por exemplo, uma imagem, uma mesa, um vídeo etc. Os algoritmos não funcionam bem para esses casos.
Felicidades,
cristão
fonte
legibilidade é um bookmarklet javascript. significando seu código do lado do cliente que manipula o DOM. Olhe para o javascript e você poderá ver o que está acontecendo.
Fluxo de trabalho e código de legibilidade:
E se você seguir os arquivos JS e CSS que o código acima puxa, você obterá a imagem completa:
http://lab.arc90.com/experiments/readability/js/readability.js (isso é muito bem comentado, leitura interessante)
http://lab.arc90.com/experiments/readability/css/readability.css
fonte
Não há uma maneira 100% confiável de fazer isso, é claro. Você pode dar uma olhada no código-fonte de legibilidade aqui
Basicamente, o que eles estão fazendo é tentar identificar blocos de texto positivos e negativos . Identificadores positivos (ou seja, IDs div) seriam algo como:
Os identificadores negativos seriam:
E então eles têm candidatos improváveis e talvez . O que eles fariam é determinar o que provavelmente é o conteúdo principal do site, consulte a linha
678
na fonte de legibilidade. Isso é feito analisando principalmente o comprimento dos parágrafos, seus identificadores (veja acima), a árvore DOM (ou seja, se o parágrafo for um último nó filho), elimine tudo o que for desnecessário, remova a formatação, etc.O código possui 1792 linhas. Parece um problema não trivial, então talvez você possa obter suas inspirações a partir daí.
fonte
Interessante. Desenvolvi um script PHP semelhante. Basicamente, faz a varredura de artigos e anexa classes gramaticais a todo o texto (Brill Tagger). Então, sentenças gramaticalmente inválidas são eliminadas instantaneamente. Então, mudanças repentinas nos pronomes ou no pretérito indicam que o artigo acabou ou ainda não começou. Frases repetidas são procuradas e eliminadas, como "Finanças esportivas do Yahoo news" aparece dez vezes na página. Você também pode obter estatísticas sobre o tom com uma infinidade de bancos de palavras relacionadas a várias emoções. Mudanças repentinas no tom, de ativo / negativo / financeiro para passivo / positivo / político, indicam uma fronteira. É realmente infinito, por mais que você queira cavar fundo.
Os principais problemas são links, anomalias incorporadas, estilos de script e atualizações.
fonte