Negation handling in sentiment analysis

前端 未结 3 1314
走了就别回头了
走了就别回头了 2021-02-09 04:32

I am in need of a little help here, I need to identify the negative words like \"not good\",\"not bad\" and then identify the polarity (negative or positive) of the sentiment. I

3条回答
  •  隐瞒了意图╮
    2021-02-09 05:24

    this seems to be working decently well as a poor man's word negation in python. it's definitely not perfect, but may be useful for some cases. it takes a spacy sentence object.

    def word_is_negated(word):
        """ """
    
        for child in word.children:
            if child.dep_ == 'neg':
                return True
    
        if word.pos_ in {'VERB'}:
            for ancestor in word.ancestors:
                if ancestor.pos_ in {'VERB'}:
                    for child2 in ancestor.children:
                        if child2.dep_ == 'neg':
                            return True
    
        return False
    
    def find_negated_wordSentIdxs_in_sent(sent, idxs_of_interest=None):
        """ """
    
        negated_word_idxs = set()
        for word_sent_idx, word in enumerate(sent):
            if idxs_of_interest:
                if word_sent_idx not in idxs_of_interest:
                    continue
            if word_is_negated(word):
                negated_word_idxs.add(word_sent_idx)
    
        return negated_word_idxs
    

    call it like this:

    import spacy
    nlp = spacy.load('en_core_web_lg')
    find_negated_wordSentIdxs_in_sent(nlp("I have hope, but I do not like summer"))
    

    EDIT: As @Amandeep pointed out, depending on your use case, you may also want to include NOUNS, ADJECTIVES, ADVERBS in the line: if word.pos_ in {'VERB'}:.

提交回复
热议问题