В настоящее время я пытаюсь подсчитать случаи, когда определенная часть речи встречается в данном онлайн-обзоре. Хотя я могу получить определенные теги, соответствующие каждому слову, и подсчитать эти экземпляры, я сталкиваюсь с трудностями при захвате нулевых значений (если тег отсутствует = 0). В идеале у меня был бы список всех тегов либо с количеством фактических вхождений в обзоре, либо, если он отсутствует = 0. Я использую тег POS NLTK.
Следующий код даст мне определенные теги для каждого обзора, но, таким образом, только для токенов в обзоре:
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)
Я попытался сделать отдельный список с некоторыми конкретными тегами (цель состояла в том, чтобы получить все глаголы и существительные), но он по-прежнему возвращает только те, у которых есть фактические значения (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: Код, который в итоге сработал (спасибо manoj yadav):
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)