В настоящее время я пытаюсь сосчитать случаи, когда определенная часть речи происходит в данном онлайн-обзоре. Хотя я могу получить указанные теги c, соответствующие каждому слову, и посчитать эти экземпляры, я также сталкиваюсь с трудностями при захвате нулевых значений (если тег отсутствует = 0). В идеале, у меня был бы список всех тегов с количеством фактических вхождений в обзоре, или если его нет = 0. Я использую POS-тегер NLTK.
Следующий код даст мне указанные c теги для каждого отзыва, но, следовательно, только для токенов в обзоре:
for line in lines:
tokens = nltk.word_tokenize(line)
tagged = nltk.pos_tag(tokens)
counts=Counter(tag for word,tag in tagged)
postag.append(counts)
Я пытался составить отдельный список с некоторыми теги Speci c (цель состояла в том, чтобы достичь всех глаголов и существительных), но он по-прежнему возвращает только те, которые имеют действительные значения (1 или более), а не те, которые имеют 0 (не присутствует в тексте). Я мог бы потенциально вставить туда все доступные теги, но при этом он мог бы возвращать только реальные значения. Например:
for line in lines:
tokens = nltk.word_tokenize(line)
tagged = nltk.pos_tag(tokens)
selective_tagged = ['NN','NNS','NNP','NNPS','VB','VBD','VBN','VBP','VBZ']
selective_tagged_words =[]
for word,tag in tagged:
if tag in selective_tagged:
selective_tagged_words.append((word,tag))
counts=Counter(tag for word,tag in selective_tagged_words)
postag.append(counts)
Таким образом, в вышеприведенном примере вывод будет:
Counter({'NNS': 3, 'VBP': 3, 'VBN': 1, 'NN': 5, 'VBZ': 1, 'VB': 4, 'NNP': 1})
Но я хочу
Counter({'NNS': 3, 'VBP': 3, 'VBN': 1, 'NN': 5, 'VBZ': 1, 'VB': 4, 'NNP': 1, 'NNPS': 0, 'VBD': 0})
Спасибо за помощь!
Редактировать 2: Код, сработавший в конце (спасибо Маноджу Ядаву):
for line in lines:
tokens = nltk.word_tokenize(line)
tagged = nltk.pos_tag(tokens)
selective_tagged = ['NN','NNS','NNP','NNPS','VB','VBD','VBN','VBP','VBZ']
selective_tagged_words =[]
for word,tag in tagged:
if tag in selective_tagged:
selective_tagged_words.append((word,tag))
counts=Counter(tag for word,tag in selective_tagged_words)
other_tags = set(selective_tagged)-set(counts)
for i in other_tags:
counts[i]=0
postag.append(counts)