Любой эффективный обходной путь для извлечения ключевой фразы из заданных предложений по схеме TF-IDF? - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь извлечь ключевую фразу из данного предложения с помощью схемы TF-IDF.Для этого я попытался найти слово-кандидат или фразу-кандидат в предложении, а затем использовать слово «часто встречающийся» в предложении.Однако, когда я ввел новое правило CFG для поиска возможных ключевых фраз в предложении, у меня возникает ошибка.

Вот мой сценарий:

rm_punct=re.compile('[{}]'.format(re.escape(string.punctuation)))
stop_words=set(stopwords.words('english'))

def get_cand_words(sent, cand_type='word', remove_punct=False):
    candidates=list()
    sent=rm_punct.sub(' ', sent)
    tokenized=word_tokenize(sent)
    tagged_words=pos_tag(tokenized)
    if cand_type=='word':
        pos_tag_patt=tags = set(['JJ', 'JJR', 'JJS', 'NN', 'NNP', 'NNS', 'NNPS'])
        tagged_words=chain.from_iterable(tagged_words)
        for word, tag in enumerate(tagged_words):
            if tag in pos_tag_patt and word not in stop_words:
                candidates.append(word)

    elif cand_type == 'phrase':
        grammar = r'KT: {(<JJ>* <NN.*>+ <IN>)? <JJ>* <NN.*>+}'
        chunker = RegexpParser(grammar)
        all_tag = chain.from_iterable([chunker.parse(tag) for tag in tagged_words])
        for key, group in groupby(all_tag, lambda tag: tag[2] != 'O'):
            candidate = ' '.join([word for (word, pos, chunk) in group])
            if key is True and candidate not in stop_words:
                candidates.append(candidate)
    else:
        print("return word or phrase as target phrase")
    return candidates

Вот ошибка, возникшая с помощьюpython:

sentence_1="Hillary Clinton agrees with John McCain by voting to give George Bush the benefit of the doubt on Iran."

sentence_2="The United States has the highest corporate tax rate in the free world"

get_cand_words(sent=sentence_1, cand_type='phrase', remove_punct=False)

ValueError: chunk structures must contain tagged tokens or trees

Я вдохновил приведенный выше код на основе извлечения ключевых фраз из длинного текстового абзаца, моя цель - найти уникальную ключевую фразу в данном предложении, но приведенная выше реализация не работает хорошо,

Как я могу исправить эту ошибку?Как сделать так, чтобы вышеуказанная реализация работала для извлечения ключевой фразы из данного предложения или списка предложений?Есть ли лучшая идея, чтобы это произошло?есть еще мысли?Спасибо

Цель :

Я хочу найти наиболее подходящее существительное-прилагательное или сложное существительное-прилагательное из данного предложения.Как я могу сделать это в Python?Кто-нибудь знает, как это сделать?Заранее спасибо

1 Ответ

0 голосов
/ 01 декабря 2018

Можете ли вы попробовать с этим кодом?

   rm_punct=re.compile('[{}]'.format(re.escape(string.punctuation)))
   stop_words=set(stopwords.words('english'))

   def get_cand_words(sent, cand_type='word', remove_punct=False):
    import nltk
    candidates=list()
    sent=rm_punct.sub(' ', sent)
    tokenized=word_tokenize(sent)
    tagged_words=pos_tag(tokenized)
    if cand_type=='word':
        pos_tag_patt=tags = set(['JJ', 'JJR', 'JJS', 'NN', 'NNP', 'NNS', 'NNPS'])
        tagged_words=chain.from_iterable(tagged_words)
        for word, tag in enumerate(tagged_words):
            if tag in pos_tag_patt and word not in stop_words:
                candidates.append(word)

    elif cand_type == 'phrase':
        grammar = r'KT: {(<JJ>* <NN.*>+ <IN>)? <JJ>* <NN.*>+}'
        chunker = RegexpParser(grammar)
        tagged_words=nltk.pos_tag_sents(nltk.word_tokenize(text) for text in nltk.sent_tokenize(sent))
        all_tag = list(chain.from_iterable(nltk.chunk.tree2conlltags(chunker.parse(tagged_word)) for tagged_word in tagged_words))
        for key, group in groupby(all_tag, lambda tag: tag[2] != 'O'):
            candidate = ' '.join([word for (word, pos, chunk) in group])
            if key is True and candidate not in stop_words:
                candidates.append(candidate)
    else:
        print("return word or phrase as target phrase")
    return candidates
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...