6
votes

Python NLTK Mot-clé Extraction de phrase

"première chose que nous faisons, tuerons tous les avocats." - William Shakespeare em> p>

Compte tenu de la citation ci-dessus, je voudrais retirer "tuer" code> et "avocats" code> comme deux mots clés éminents pour décrire le sens global de la phrase. J'ai extrait les balises Nom / verbe suivantes: P>

[["First", "NNP"], ["thing", "NN"], ["do", "VBP"], ["lets", "NNS"], ["kill", "VB"], ["lawyers", "NNS"]]


2 commentaires

Votre liste de mots marqués semble avoir les mots d'arrêt supprimés .. Est-ce après la suggestion de ChrisGuest?


Non, je filtrons sur ces étiquettes de point de vente: "NN", "NNS", "NNP", "JJ", "VB", "VBP", "VBD", "VBD"


3 Réponses :


2
votes

Une approche simple serait de garder Arrêter le mot listes pour nn , Vb, etc. Ce serait des mots de haute fréquence qui n'impliquent généralement pas beaucoup de contenu sémantique à une phrase.

Le snippet ci-dessous montre des listes distinctes pour chaque type de jeton de mot, mais vous pouvez aussi bien utiliser un mot d'arrêt unique. liste des verbes et des noms (tels que Ceci One). P>

stop_words = dict(
    NNP=['first', 'second'],
    NN=['thing'],
    VBP=['do','done'],
    VB=[],
    NNS=['lets', 'things'],
)


def filter_stop_words(pos_list):
    return [[token, token_type] 
            for token, token_type in pos_list 
            if token.lower() not in stop_words[token_type]]


0 commentaires

3
votes

Je ne pense pas there une réponse parfaite à cette question, car il n'y a pas de mappages d'entrée / sortie d'or que tout le monde sera d'accord sur. Vous pensez que les mots les plus importants de cette phrase sont («tuer», «avocats»), quelqu'un d'autre pourrait affirmer la bonne réponse devrait être («d'abord», «tuer», «avocats»). Si vous êtes capable de décrire très précisément et complètement sans ambiguïté exactement ce que vous voulez que votre système fasse, votre problème sera plus de la moitié résolu.

Jusque-là, je peux suggérer des heuristiques supplémentaires pour vous aider à obtenir ce que vous voulez.
Construire un Dictionnaire IDF à l'aide de vos données, c'est-à-dire construire une cartographie de chaque mot à un numéro Corrélate avec la rare que ce mot est rare. Points bonus pour le faire pour le plus grand N-grammes aussi.

En combinant les valeurs de l'IDF de chaque mot dans votre phrase d'entrée ainsi que leurs balises de point de vente, vous répondez aux questions du formulaire «Quel est le verbe rare dans cette phrase? 'Quel est le nom le plus rare dans cette phrase», etc. Dans un corpus raisonnable, "tuer" devrait être plus rare que "faire" et "les avocats" que "chose", alors essayant peut-être de trouver le nom le plus rare et le verbe rare dans une phrase et de retourner juste ces deux Truc pour la plupart de vos cas d'utilisation prévus. Sinon, vous pouvez toujours rendre votre algorithme un peu plus compliqué et voir si cela semble faire le travail mieux.

Les moyens d'élargir ceci incluent essayer d'identifier des phrases plus grandes à l'aide de N-Gram IDF's, construisant un parsemétrique de la phrase (en utilisant peut-être le Stanford Parser ) et identifier certains motif dans ces arbres pour vous aider à déterminer quelles parties de l'arbre font que des choses importantes ont tendance à être basées, etc.


0 commentaires

2
votes

Dans votre cas, vous pouvez simplement utiliser Rake (grâce à Fabian) Package pour Python à Obtenez ce dont vous avez besoin: xxx

Le chemin peut être par exemple ce fichier.

mais en général, vous feriez mieux d'utiliser le package NLTK pour les usages NLP


0 commentaires