Lorsque je pose une question ici, les astuces de la question renvoyée par la recherche automatique sont données au premier bit de la question, mais un pourcentage décent d'entre elles ne donne aucun texte cela est plus utile pour comprendre la question que le titre. Est-ce que quelqu'un a une idée sur la façon de faire un filtre pour couper les bits inutiles d'une question? Ma première idée est de découper toutes les phrases principales qui contiennent seulement des mots dans une liste (par exemple, les mots vides, plus les mots du titre, plus les mots du corpus SO qui ont une très faible corrélation avec les étiquettes, sont également susceptibles de se produire dans toute question indépendamment de celui-ci de tags)Étant donné un document, sélectionnez un extrait pertinent
Répondre
texte automatique Summarization
On dirait que vous êtes intéressé par automatic text summarization. Pour un bon aperçu du problème, des problèmes rencontrés et des algorithmes disponibles, jetez un œil à l'article de Das et Martin A Survey on Automatic Text Summarization (2007).
algorithme simple
Un algorithme de compression simple mais assez efficace est de choisir juste un nombre limité de phrases du texte original qui contiennent des mots de contenu les plus fréquents (c.-à-les plus fréquents ne sont pas compris stop list mots).
Summarizer(originalText, maxSummarySize):
// start with the raw freqs, e.g. [(10,'the'), (3,'language'), (8,'code')...]
wordFrequences = getWordCounts(originalText)
// filter, e.g. [(3, 'language'), (8, 'code')...]
contentWordFrequences = filtStopWords(wordFrequences)
// sort by freq & drop counts, e.g. ['code', 'language'...]
contentWordsSortbyFreq = sortByFreqThenDropFreq(contentWordFrequences)
// Split Sentences
sentences = getSentences(originalText)
// Select up to maxSummarySize sentences
setSummarySentences = {}
foreach word in contentWordsSortbyFreq:
firstMatchingSentence = search(sentences, word)
setSummarySentences.add(firstMatchingSentence)
if setSummarySentences.size() = maxSummarySize:
break
// construct summary out of select sentences, preserving original ordering
summary = ""
foreach sentence in sentences:
if sentence in setSummarySentences:
summary = summary + " " + sentence
return summary
Certains paquets open source qui font en utilisant cet algorithme summarization sont:
Classifier4J (Java)
Si vous utilisez Java, vous pouvez utiliser le module de Classifier4JSimpleSummarizer.
En utilisant l'exemple trouvé here, supposons que le texte original est:
Classifier4J est un paquet java pour travailler avec le texte. Classifier4J inclut un synthétiseur. Un résumé permet le résumé du texte. Un Summariser est vraiment cool. Je ne pense pas qu'il existe d'autres synthétiseurs Java.
Comme on le voit dans l'extrait suivant, vous pouvez facilement créer un simple résumé d'une phrase:
// Request a 1 sentence summary
String summary = summariser.summarise(longOriginalText, 1);
En utilisant l'algorithme ci-dessus, cela produira Classifier4J includes a summariser.
.
NClassifier (C#)
Si vous utilisez C#, il y a un port de Classifier4J à C# appelé NClassifier
résumeur de Tristan Havelick pour NLTK (en Python)
Il y a un work-in-progress Port Python du synthétiseur de Classifier4J construit avec Natural Language Toolkit (NLTK) de Python disponible here.
Je me demande si la version C# est assez rapide pour être utilisé pour ce site? – BCS
L'algorithme est ** simple mort **, il devrait donc être assez rapide. Il détermine d'abord les ** mots de contenu les plus fréquents ** dans le texte original. Il itère ensuite sur eux et sélectionne la ** première phrase ** dans la chaîne d'origine qui contient chaque mot. Cela continue jusqu'à ce que le nombre souhaité de N phrases soit sélectionné. – dmcer
J'ai récemment utilisé cet algorithme et je crois qu'il est vraiment facile à implémenter en C# et ça donne de bons résultats. J'avais besoin de jouer avec quelques paramètres ici et là, comme se débarrasser des espaces vides ou retourner des espaces clés. Cela prend quelques essais. Je vous remercie. –
- 1. Comment créer un RouteValueDictionary étant donné un chemin virtuel
- 2. rails, rubis - Étant donné un Regex - Déterminer le match Compte
- 3. jQuery: Étant donné un sélecteur, trouver uniquement ses éléments visibles
- 4. Rails: Sélection d'un enregistrement dans un objet, étant donné l'ID
- 5. Étant donné 35/4, je veux un "8" retourné
- 6. Étant donné un URI GIT, comment puis-je vérifier?
- 7. Étant donné un modèle, comment parcourir toutes les propriétés?
- 8. Comment supprimer un élément du DOM, étant donné son identifiant?
- 9. Étant donné un nombre, à quel intervalle appartient-il?
- 10. MySQL Sélectionnez OÙ donné l'ordre
- 11. Étant donné l'exemple -When-Then avec NUnit
- 12. Étant donné un XSD est-il possible de lister une hiérarchie d'éléments et leurs attributs?
- 13. Point à un document de flux Run donné wpf
- 14. Étant donné un nombre décimal, recherchez le plus petit multiplicateur entier qui donne un résultat entier
- 15. Je veux appeler un objet de classe, étant le nom de la classe un paramètre donné
- 16. Étant donné un nom de propriété, comment puis-je créer un délégué pour obtenir sa valeur
- 17. Étant donné un <E> générique comment créer un nouvel E et le retourner?
- 18. Étant donné un objet Java, puis-je lui confirmer un bean persistant en hibernate
- 19. Étant donné un type ExpressionType.MemberAccess, comment puis-je obtenir la valeur du champ?
- 20. La meilleure façon d'ajouter un extrait XML de chaîne dans un document XML?
- 21. Étant donné un IBOutlet à un NSTextField lié à un NSDate, comment puis-je programmer une nouvelle date?
- 22. Possible d'instancier l'objet étant donné son type en C++?
- 23. Étant donné le texte d'un #define, peut-il être transmis à un template?
- 24. Étant donné un type de classe comment créer une instance en Python?
- 25. Étant donné un pointeur IBOutlet dans Objective-C/iPad, comment cacher cet élément?
- 26. Étant donné une ressource classpath, existe-t-il un moyen d'obtenir l'objet java.io.File qui l'a/contient?
- 27. Conversion latitude/longitude à pixels x/y, étant donné un niveau de zoom
- 28. Étant donné un tableau associatif de chaînes Date, recherchez la date la plus proche suivante
- 29. Étant donné un tableau javascript et l'un de ses membres, comment récupérer l'index membre?
- 30. Étant donné une liste de mots, créez un sous-ensemble de phrases avec eux
Copie possible de: ** [C# Recherche de fragments de document pertinents pour l'affichage des résultats de recherche] (http: // stackoverflow.com/questions/282002) ** – hippietrail