2017-07-10 3 views
1

J'étudie la PNL et j'apprends à utiliser NLTK et scikit-learn pour la classification de texte. J'ai donc implémenté la présence d'Unigram comme une fonctionnalité sur le corpus movie_review de NLTK. Maintenant, je suis en train de mettre en œuvre un document de recherche où ils ont utilisé plusieurs caractéristiques:Ensembles de fonctions multiples

1. N-Gram Features : Unigram : Presence and Count, Bigram : Presence and Count 
2. Stylistic Features : POS_Noun, POS_Adverb, POS_Adjective : Ratios No. of spelling errors : Real-valued feature Length of text : Real-valued feature 

Depuis que je n'ai mis en place une fonction de fonction à ce jour, je suis maintenant des problèmes. Def find_POS_Noun_feature (document): pour utiliser POS_Noun comme caractéristique pour classer le texte def find_Length_of_text_feature (document): Pour utiliser #characters comme caractéristique etc etc. Ensuite, je peux former plusieurs classificateurs séparément.

Mais ce dont j'ai besoin, c'est comment intégrer toutes ces fonctionnalités dans un seul classificateur?

S'il vous plaît aider, j'ai cherché sur Internet, mais je n'ai pas trouvé d'explications correctes.

+0

Eh bien, que retournent vos fonctions? Un tableau 1D par point de données? Si c'est le cas, vous devez concaténer les valeurs de retour de toutes les fonctions. – lenz

+0

Mes fonctions de fonctionnalité renvoient un dictionnaire. Le jeu de données étiqueté que j'introduis dans les classificateurs nltk.classify.scikitlearn est une liste de tuples où une partie est un dicitonary et la seconde est category. Donc, pour une présence unigram: [({w1: Vrai, w2: Faux .....}, 'pos'), ({w1: Faux, w2: Vrai ....}, 'neg') ... ..]. Idem pour bigrams et POS_Noun, Length_of_text etc. –

Répondre

1

Placez toutes vos fonctionnalités dans un seul dictionnaire, indépendamment de l'origine ou du type. Assurez-vous simplement que les noms des entités sont distincts, afin de ne perdre aucune clé.

Si vous avez déjà des fonctions distinctes qui renvoient dictionnaires avec différents types de fonctionnalités, vous pouvez fusionner les résultats comme celui-ci:

all_features = find_unigram_features(document) 
all_features.update(find_bigram_features(document)) 
all_features.update(find_POS_Noun_feature(document)) 
etc. 

Si vous avez des fonctions qui renvoient une valeur individuelle (pas dict), vous mettez à jour le dictionnaire de la manière habituelle.

all_features["doc_length"] = find_Length_of_text_feature(document) 

La fonction de fonction avec laquelle vous vous entraînez sera la fonction qui fusionne toutes ces fonctions et renvoie le dictionnaire combiné.

+0

Est-ce qu'un tel attribut all_features peut être introduit dans le classificateur nltk? –

+0

Voilà à quoi ça sert. Utilisez-le de la même façon que vous avez utilisé un des plus petits dictionnaires. – alexis

+0

En y allant, laisse voir ce qui se passe !!! –