2011-12-09 4 views
1

Pour une tâche de devoirs, je dois écrire un programme qui supprime HTML d'un site Web et trouve ensuite des phrases dans le site Web. Quand je dis des phrases, je veux dire une sorte de manière arbitraire d'organiser le texte de sorte que les mots qui sont à proximité les uns des autres sont mis dans le même groupe. Je sais que cela semble très peu clair, mais l'attribution indique comment nous faisons cela est à notre propre interprétation de la façon de trouver des «phrases».JSOUP Recherche de groupes de mots

Actuellement, j'ai le code qui ressemble à:

Document doc = Jsoup.connect("http://oracle.com/").get(); 
String html = doc.body().toString(); 

System.out.println(html); 

Ce qui me donnera une impression correcte de tous les différents mots qui apparaissent sur une page Web lors de l'analyse tout le html.

Mon problème principal est que je n'arrive pas à trouver un moyen d'analyser le HTML pour que je puisse rassembler ces groupes arbitraires (et je ne sais pas quel genre de critères je peux utiliser pour former arbitrairement ces groupes) " de mots).

Je sais que cette question semble terrible, mais je ne sais pas comment je peux l'affirmer, et je n'ai vraiment aucune idée de ce que je peux faire. La tâche qui m'a été confiée est extrêmement floue, et quand on me demande des éclaircissements, mon professeur me dit de l'interpréter moi-même. Je me demandais si quelqu'un avait des idées sur la façon d'analyser le HTML afin que les mots proches les uns des autres (peut-être dans des balises html similaires ou quelque chose) pourraient être filtrés comme la sortie actuelle, sauf peut-être après chaque phrase "il y a comme une nouvelle ligne ou quelque chose que je peux analyser.

Merci pour vos idées ou conseils.

Répondre

1

Ce que vous cherchez est un concept appelé stemming. De wikipedia

Un égrappoir pour l'anglais, par exemple, devrait identifier la chaîne « chats » (et peut-être « catlike », « catty » etc.) en fonction de la racine « chat », et « égrappoir "," stemming "," stemmed "basé sur" stem ". Un algorithme de réduction réduit les mots «pêche», «pêche», «poisson» et «pêcheur» au mot racine «poisson».

Vous fournissez une implémentation de force brute simple pour cela. Aussi vérifier les implémentations de l'algorithme de racine de Lucene et OpenNLP

0

Puisque votre question est très floue, ma réponse n'est pas parfaite de toute façon. Enfait ceci ceci plus d'une suggestion qu'une réponse comme commentaire peut ne pas être si grand.

C'est une idée en fonction de votre définition suivante des phrases - When I say phrases I mean some sort of arbitrary way of organizing text so that words that are in close proximity to each other are put in the same group

Ce que je pense que vous devez faire est de « séparé » des morceaux hors distincts de texte à partir du html autant est possible à partir du html . Il ne peut pas être sûr à cent pour cent de réaliser cela parce que le HTML en lui-même peut être si complexe que l'analyse de cette façon peut devenir extrêmement difficile, voire impossible.

Voici une suggestion qui m'est venue à l'esprit: trouver des textes continus en html qui ne contiennent aucune balise.Ceci peut être facilement fait par regex simple, si vous utilisez jsoup, vous pouvez faire quelque chose comme ça -

String html = doc.body().toString(); 
Matcher m = Pattern.compile("([^<>]+)").matcher(html); 
while(m.find()) { 
    String text = f.group(1); 
} 

Mais cela peut travailler seul pas toujours comme une html intermittente décoration pour des changements de police et même les marqueurs gras et italique peut "casser" ces phrases. Donc, vous voudrez peut-être construire une sorte de résilience pour ignorer de telles choses. Ou peut-être vous pouvez trouver la «distance d'étiquette» d'un morceau de texte d'un autre. C'est le nombre de balises html qui apparaissent entre les morceaux de texte et peuvent considérer des pièces en même temps si elles sont juste un ou peut-être 2-3 étiquettes.

Et enfin, vous êtes libre de faire preuve de créativité pour faire évoluer cette approche. Encore une fois je voudrais mentionner que c'est juste une suggestion pour vous de construire quelque chose. Tout le meilleur.