Django NLTK посмотреть правильный ответ формата - PullRequest
0 голосов
/ 03 мая 2018

У меня есть представление, которое должно возвращать извлеченные существительные и глаголы из моих объектов Task:

@api_view(['GET'])        
def test(request):

    verbs=[]
    tasks = Task.objects.all()

    serializer = TaskSerializer(tasks, many=True)
    print(serializer.data)

    text = ''.join([' '.join([str(y) for y in x.values()]) for x in serializer.data])

    text = nltk.word_tokenize(str(text)) #str(text)
    tags = nltk.pos_tag(text)

    return Response(filter(lambda x:x[1]=='VB', tags))

мои печатные выписки:

[OrderedDict([(u'id', 17), ('title', u'browse through the list of books'), ('how_often', u'DO'), ('how_important_task', u'EI'), ('role', u'reader'), ('why_perform_task', u''), ('why_important_task', None), ('sequence_of_actions', u''), ('tools_used', u''), ('special_training_required', False), ('what_training_required', u''), ('what_can_go_wrong', u''), ('effects_of_task', u''), ('special_vocabulary_used', u''), ('people_involved', u''), ('any_improvements', u''), ('how_important_improvement', u''), ('benefits_of_improvement', u''), ('stakeholder', 2L), ('project', 1L)]), OrderedDict([(u'id', 18), ('title', u'search for a book'), ('how_often', u'DS'), ('how_important_task', u'EI'), ('role', u'reader'), ('why_perform_task', u''), ('why_important_task', None), ('sequence_of_actions', u''), ('tools_used', u''), ('special_training_required', False), ('what_training_required', u''), ('what_can_go_wrong', u''), ('effects_of_task', u''), ('special_vocabulary_used', u''), ('people_involved', u''), ('any_improvements', u''), ('how_important_improvement', u'RI'), ('benefits_of_improvement', u''), ('stakeholder', 2L), ('project', 1L)]), OrderedDict([(u'id', 19), ('title', u'request a book'), ('how_often', u'WO'), ('how_important_task', u'RI'), ('role', u'reader'), ('why_perform_task', u''), ('why_important_task', None), ('sequence_of_actions', u''), ('tools_used', u''), ('special_training_required', None), ('what_training_required', u''), ('what_can_go_wrong', u''), ('effects_of_task', u''), ('special_vocabulary_used', u''), ('people_involved', u''), ('any_improvements', u''), ('how_important_improvement', u''), ('benefits_of_improvement', u''), ('stakeholder', 2L), ('project', 2L)]), OrderedDict([(u'id', 26), ('title', u'check latest arrivals of the books'), ('how_often', u'MO'), ('how_important_task', u'LI'), ('role', u'reader'), ('why_perform_task', u''), ('why_important_task', None), ('sequence_of_actions', u''), ('tools_used', u''), ('special_training_required', None), ('what_training_required', u''), ('what_can_go_wrong', u''), ('effects_of_task', u''), ('special_vocabulary_used', u''), ('people_involved', u''), ('any_improvements', u''), ('how_important_improvement', u''), ('benefits_of_improvement', u''), ('stakeholder', 2L), ('project', 1L)])]

Всего 4 объекта задачи. Прямо сейчас я извлекаю существительные / глаголы только из значений объекта и игнорирую ключи.

Что я хочу достичь в дальнейшем, так это то, что я не хочу проверять существительные или глаголы по всем значениям, а только три поля: title , role и tools_used .

Я бы хотел, чтобы данные из этого представления были примерно такими:

[
    {
        "title":[nouns:[],verbs:[]],
        "role": [nouns:[], verbs:[]],
        "tools_used": [nouns:[], verbs:[]],

    },
    {
        "title":[nouns:[],verbs:[]],
        "role": [nouns:[], verbs:[]],
        "tools_used": [nouns:[], verbs:[]],

    }
]

Для каждого объекта задачи и для каждой области интереса я хочу массив / список существительных и глаголов.

Я не уверен, как я могу ограничить свои циклы for только этими 3 полями, а затем отформатировать свой ответ. Может ли кто-нибудь помочь?

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете попробовать это:

def get_nn_vb(text):
    text = nltk.word_tokenize(str(text))
    tags = nltk.pos_tag(text)
    nn = [x[0] for x in tags if x[1] == 'NN']
    vb = [x[0] for x in tags if x[1] == 'VB']
    return {'nouns': nn, 'verbs': vb}

nltk_keys = ['title', 'role', 'tools_used']
data = []
for x in serializer.data:
     nn_vb = {k: get_nn_vb(v) for k, v in x.items() if k in nltk_keys}
     data.append(nn_vb)
return Response(data)
...