Pergunta

Há muitos trabalhos acadêmicos sobre extração de conteúdo HTML, por exemplo, Gupta & Kaiser (2005) Extraindo conteúdo de páginas da web acessíveis, e alguns sinais de interesse aqui, por exemplo, um, dois, e três, mas não estou realmente certo sobre até que ponto a prática deste último reflete as ideias do primeiro.Qual é a melhor prática?

Indicadores para boas implementações (em particular, de código aberto) e boas pesquisas acadêmicas sobre implementações seriam o tipo de coisa que estou procurando.

Pós-escrito o primeiro:Para ser mais preciso, o tipo de pesquisa que procuro seria um artigo (publicado, não publicado, qualquer que seja) que discuta tanto os critérios da literatura acadêmica quanto uma série de implementações existentes, e analise o quão malsucedidas são as implementações do ponto de vista de o critério.E, realmente, uma postagem em uma lista de discussão também funcionaria para mim.

Pós-escrito o segundo Para ser claro, após a resposta de Peter Rowell, que aceitei, podemos ver que esta questão leva a duas subquestões:(i) o problema resolvido de limpar HTML não conforme, para o qual Beautiful Soup é a solução mais recomendada, e (ii) o problema não resolvido ou separar o lixo (principalmente clichê adicionado ao site e material promocional) da carne (o conteúdo que o tipo de pessoa que acha que a página pode ser interessante, na verdade, acha relevante.Para abordar o estado da arte, novas respostas precisam abordar explicitamente o problema da crosta da carne.

Foi útil?

Solução

A extração pode significar coisas diferentes para pessoas diferentes. Uma coisa é poder lidar com todo o HTML mutilado por aí, e a bela sopa é um vencedor claro neste departamento. Mas o BS não lhe dirá o que é Cruft e o que é carne.

As coisas parecem diferentes (e feias) ao considerar a extração de conteúdo do ponto de vista de um linguista computacional. Ao analisar uma página, estou interessado apenas no conteúdo específico da página, menos toda a navegação/publicidade/etc. Cruft. E você não pode começar a fazer as coisas interessantes-análise de co-ocorrência, descoberta de frases, geração de vetores de atributos ponderados, etc.-até que você se livrar do Cruft.

O primeiro artigo referenciado pelo OP indica que era isso que eles estavam tentando alcançar - analisar um site, determinar a estrutura geral e depois subtrair isso e pronto! Você tem apenas a carne - mas eles acharam que era mais difícil do que eles pensavam. Eles estavam abordando o problema de um ângulo de acessibilidade aprimorado, enquanto eu era um cara de busca inicial, mas nós dois chegamos à mesma conclusão:

Separar o cruzamento da carne é difícil. E (para ler nas entrelinhas da sua pergunta) mesmo assim que o cruzamento é removido, sem marcação semântica cuidadosamente aplicada, é extremamente Difícil de determinar o 'autor intenção' do artigo. Tirar a carne de um local como o Citeseer (de forma limpa e previsivelmente estabelecida com uma proporção de sinal / ruído muito alta) é 2 ou 3 ordens de magnitude mais fácil do que lidar com conteúdo da Web aleatório.

Btw, se você está lidando com documentos mais longos, você pode estar particularmente interessado no trabalho realizado por Marti Hearst (agora um professor da UC Berkely). Sua Tese de doutorado E outros documentos sobre a descoberta subtópica em documentos grandes me deram muita visão de fazer algo semelhante em documentos menores (o que, surpreendentemente, pode ser mais difícil de lidar). Mas você só pode fazer isso depois de se livrar do Cruft.


Para os poucos que podem estar interessados, aqui está uma história de fundo (provavelmente fora do tópico, mas estou nesse tipo de humor hoje à noite):

Nos anos 80 e 90, nossos clientes eram principalmente agências governamentais cujos olhos eram maiores do que seus orçamentos e cujos sonhos faziam com que a Disneylândia parecesse monótona. Eles estavam coletando tudo o que podiam colocar nas mãos e depois procuraram uma tecnologia de bala de prata que de alguma forma ( Onda de mão gigante ) Extraia o 'significado' do documento. Certo. Eles nos encontraram porque éramos uma pequena companhia estranha fazendo "pesquisa de similaridade de conteúdo" em 1986. Deixamos -lhes algumas demos (real, não falsificadas) que os assustaram.

Uma das coisas que já sabíamos (e demorou muito tempo para que eles acreditem em nós) foi que toda coleção é diferente e precisa de seu próprio scanner especial para lidar com essas diferenças. Por exemplo, se tudo o que você está fazendo é mastigar histórias diretas de jornais, a vida é muito fácil. A manchete diz a você algo interessante, e a história é escrita no estilo pirâmide - o primeiro parágrafo ou dois tem a carne de quem/o quê/onde/quando, e depois seguintes os parágrafos se expandem. Como eu disse, essa é a coisa fácil.

Que tal artigos de revistas? Oh Deus, não me inicie! Os títulos são quase sempre sem sentido e a estrutura varia de uma revista para outra, e mesmo de uma seção de uma revista para a outra. Pegue uma cópia da Wired e uma cópia do Atlantic Monthly. Veja um artigo importante e tente descobrir um significativo 1 Resumo do parágrafo do que é o artigo. Agora tente descrever como um programa realizaria a mesma coisa. O mesmo conjunto de regras se aplica em todos os artigos? Mesmo artigos da mesma revista? Não, eles não.

Desculpe soar como um maldito nisso, mas esse problema é genuinamente difícil.

Estranhamente, uma grande razão para o Google ser tão bem -sucedido quanto (do ponto de vista do mecanismo de pesquisa) é que eles colocam muito peso nas palavras e circundando um link de outro site. Esse texto link representa uma espécie de mini-verão feito por um humano do site/página que está vinculando, exatamente o que você deseja quando estiver pesquisando. E funciona em quase todos os estilos de informação de gênero/layout. É uma visão positivamente brilhante e eu gostaria de ter tido isso sozinho. Mas não teria feito bem a meus clientes porque lá não havia links Das listagens de TV de Moscou da noite passada a alguma mensagem de teletipo aleatória que eles haviam capturado, ou para uma versão maliculada de um jornal egípcio.

/Mini-Rant-and-Trip-Down-Memory-pista

Outras dicas

Uma palavra: Boilerpipe.

Para o domínio de notícias, em um corpus representativo, agora estamos com precisão de extração de 98% / 99% (AVG / mediana)

Também independente de idiomas (hoje, aprendi que funciona para o nepalês também).

Isenção de responsabilidade: Eu sou o autor deste trabalho.

Você viu Boilerpipe? Descobriu mencionado em uma pergunta semelhante.

Eu encontrei http://www.keyvan.net/2010/08/php-readability/

No ano passado, portei a legibilidade do ARC90 para usar no projeto Five Filters. Já faz mais de um ano e a legibilidade melhorou muito - graças a Chris Dary e ao resto da equipe no ARC90.

Como parte de uma atualização para o serviço RSS de texto completo, comecei a portar uma versão mais recente (1.6.2) para PHP e o código está agora online.

Para qualquer pessoa que não esteja familiarizada, a legibilidade foi criada para uso como um addon do navegador (um Bookmarklet). Com um clique, ele transforma as páginas da web para fácil leitura e tiras de desordem. A Apple o incorporou recentemente ao Safari Reader.

Também é muito útil para extração de conteúdo, e é por isso que eu queria portá -lo para o PHP em primeiro lugar.

Existem algumas ferramentas de código aberto disponíveis que realizam tarefas de extração de artigos semelhantes.https://github.com/jiminoc/goose que foi de código aberto por gravity.com

Ele tem informações sobre o wiki e a fonte que você pode visualizar. Existem dezenas de testes de unidade que mostram o texto extraído de vários artigos.

Trabalhei com Peter Rowell ao longo dos anos em uma ampla variedade de projetos de recuperação de informações, muitos dos quais envolviam extração de texto muito difícil de diversas fontes de marcação.

Atualmente estou focado na extração de conhecimento de fontes “firehose” como o Google, incluindo seus canais RSS que aspiram grandes quantidades de artigos de notícias locais, regionais, nacionais e internacionais.Em muitos casos, os títulos são ricos e significativos, mas são apenas "ganchos" usados ​​para atrair tráfego para um site onde o artigo real é um parágrafo sem sentido.Isto parece ser uma espécie de “spam ao contrário” projetado para aumentar as classificações de tráfego.

Para classificar artigos mesmo com a métrica mais simples de comprimento do artigo, você precisa ser capaz de extrair o conteúdo da marcação.A marcação e os scripts exóticos que dominam o conteúdo da Web atualmente quebram a maioria dos pacotes de análise de código aberto, como o Beautiful Soup, quando aplicados a grandes volumes característicos do Google e de fontes semelhantes.Descobri que 30% ou mais dos artigos minerados quebram esses pacotes como regra geral.Isso nos fez focar novamente no desenvolvimento de analisadores inteligentes, baseados em caracteres, de nível muito baixo, para separar o texto bruto da marcação e do script.Quanto mais granulada for sua análise (ou seja,particionamento de conteúdo), mais inteligentes (e feitas à mão) suas ferramentas devem ser.Para tornar as coisas ainda mais interessantes, você tem um alvo móvel à medida que a criação na Web continua a se transformar e mudar com o desenvolvimento de novas abordagens de script, marcação e extensões de linguagem.Isso tende a favorecer a entrega de informações baseada em serviços, em oposição a aplicativos "embrulhados".

Olhando para trás, ao longo dos anos, parece ter havido muito poucos artigos acadêmicos escritos sobre a mecânica de baixo nível (ou seja,a "prática da primeira" a que você se refere) de tal extração, provavelmente porque é muito específica de domínio e conteúdo.

Linda sopa é um analisador html robusto escrito em Python.

Ele lida graciosamente em HTML com má marcação e também é bem engenhado como uma biblioteca Python, apoiando geradores para iteração e pesquisa, notação de ponto para acesso à criança (por exemplo, acesso <foo><bar/></foo>' usingdoc.foo.bar`) e unicode sem costura.

Se você deseja extrair conteúdo das páginas que utilizam fortemente JavaScript, Selênio controle remoto pode fazer o trabalho. Funciona para mais do que apenas testar. A principal desvantagem de fazer isso é que você acaba usando muito mais recursos. A vantagem é que você obterá um feed de dados muito mais preciso de páginas/aplicativos ricos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top