Семантический анализ с помощью NLTK

Я пытаюсь использовать NLTK для семантического разбора голосовых навигационных команд, таких как «поехать в Сан-Франциско», «проложить маршрут до 123 Main Street» и т. д.

Это можно сделать с помощью довольно простой грамматики CFG, такой как

S -> COMMAND LOCATION
COMMAND -> "go to" | "give me directions to" | ...
LOCATION -> CITY | STREET | ...

Проблема в том, что это включает в себя неатомарные (длиной более одного слова) литералы, такие как «перейти к», для которых NLTK, похоже, не настроен (поправьте меня, если я ошибаюсь). Задача синтаксического анализа требует тегирования в качестве предварительного условия, и все тегировщики, кажется, всегда помечают отдельные слова. Итак, мои варианты выглядят так:

a) Определите настраиваемый тегировщик, который может назначать несинтаксические теги последовательностям слов, а не отдельным словам (например, «перейти»: «КОМАНДА»). б) Используйте функции для дополнения грамматики, например, что-то вроде:

COMMAND -> VB[sem='go'] P[sem='to'] | ...

c) Используйте блокировщик для извлечения подструктур, таких как COMMAND, затем примените анализатор к результату. Разрешает ли NLTK каскадирование чанкеров-> парсеров?

Некоторые из этих вариантов кажутся запутанными (хаки). Есть ли хороший способ?


person ilyaeck    schedule 08.09.2013    source источник


Ответы (1)


Похоже, вы хотите определить императивы.

Этот ответ рассмотрел это и содержит решение, аналогичное вашему варианту (a), но немного отличающееся, поскольку оно позволяет tagger делает большую часть работы. (b) действительно кажется немного хакерским... но вы создаете довольно специальное приложение, так что оно может работать! Я бы сделал (c) наоборот - парсинг, а затем фрагментацию на основе CFG в (a).

Однако в целом, как объясняется в другом ответе, похоже, что пока нет идеального способа сделать это.

Вы также можете посмотреть на pattern.en. Их

Функция mood() пытается идентифицировать проанализированное предложение как указательное, повелительное, условное или сослагательное наклонение.

person arturomp    schedule 08.09.2013