Захват адреса улицы голосом для Биксби - PullRequest
1 голос
/ 02 мая 2019

Я пишу капсулу Биксби, и одним из входов является адрес улицы.

Один метод, который я попробовал, - это создать следующую структуру:

structure (FullAddress) {
  description (Address of a house)
  property (addressNumber) {
    type (geo.StreetNumber)
    min (Required)
    description (Address Number)
  }
  property (addressStreet) {
    type (geo.StreetName)
    min (Required)
    description (Street Name)
  }
  property (addressSuffix) {
    type (geo.StreetSuffix)
    min (Required)
    description (Street Name)
  }
}

с помощью действия конструктора для объединения трех входов.

Я видел, что при заданномадрес 19 Fake Fields Street типизированный ввод geo.StreetName иногда может понимать Fake Fields, а иногда просто Fake и сбрасывает Fields.

Также речь Биксби на тексте иногда слышит app или haveвместо ave для значения geo.StreetSuffix, которое заставляет пользователя запрашивать суффикс.

Есть ли способ заставить Биксби понять адрес улицы с немного большей точностью?

Ответы [ 2 ]

1 голос
/ 03 мая 2019
  1. В основном вам нужно больше обучающих примеров, которые включают 2 или 3 слова в качестве названий улиц. Попробуйте получить хотя бы 3 примера с полями xxx fakexxx street и протестируйте в симуляторе высказывание yyy fakeyyy fields street , чтобы увидеть, может ли Биксби захватить поля как часть адресного имени. Цель здесь - научить Биксби узнать, что может быть на 2 или даже 3 слова впереди addressSuffix . После этого вы можете попробовать высказывание zzz fakezzz Creek Street , даже не используя creek в обучении, чтобы подтвердить, что Биксби не только выучил поля . Пожалуйста, прочитайте больше в этой статье .

  2. Легкого пути, когда дело доходит до распознавания речи, не существует. Вы можете включить модель Vocab , чтобы «приложение» было «Ave», но что, если пользователь действительно хочет сказать слово приложение или имеют ? Я думаю, что пользователь может набрать ave или blvd, но нужно сказать слово avenue вместо ave и бульвар вместо бульвара.

0 голосов
/ 09 мая 2019

Другой альтернативой является использование viv.geo.SearchTerm в обучении и viv.geo.NamedPoint в ваших действиях.Это позволяет пользователю сказать что-то неполное, например «1 Market Street, California», и Биксби будет использовать поиск карт ЗДЕСЬ, чтобы найти это в Сан-Франциско.

Чтобы использовать, настройте концепцию NamedPoint (после импорта viv.geo)

structure (InputAddress) {
  role-of (geo.NamedPoint)
}

Затем в своем действии вы можете сделать что-то вроде:

    input (namedPoint) {
      type (InputAddress)
      min (Required) max (One)
      default-select {
        with-learning
        with-rule {
          select-first
        }
      }
    }

В этом примере, используя learning и select-first, вы автоматически выберете первый адрес.Без этого Биксби автоматически получит адреса.

namedPoint будет затем передан на вашу конечную точку, и вы сможете анализировать при необходимости.

В процессе обучения используйте geo.SearchTerm - например:

[g:GetAddressAction] My address is {[g:InputAddress] (665 Clyde Ave Mountain View California)[v:geo.SearchTerm]}

или для приглашения вы можете использовать:

[g:GetAddressAction:continue:InputAddress] {[g:InputAddress] (60 S Market)[v:geo.SearchTerm]}

Вы можете получить более полностью отформатированный адрес, разрешив Bixby обрабатывать его, используяцель viv.geo.ResolveAddressByPlaceID.Вот полное действие с использованием NamedPoint и ResolveAddressByPlaceID.Обратите внимание на ссылки на соответствующие документы в комментариях

action (GetAddressAction) {
  type(Search)
  description (Get Address)
  collect {
    // See https://bixbydevelopers.com/dev/docs/dev-guide/developers/library.geo#using-searchterm - used in training
    // and https://bixbydevelopers.com/dev/docs/dev-guide/developers/library.geo#namedpoint - used below and for computed-input
    input (namedPoint) {
      type (InputAddress)
      min (Required) max (One)
      default-select {
        with-learning
        with-rule {
          select-first
        }
      }
      // hidden - Hide if all you need is address
    }
    computed-input (address){
      type (geo.Address)
      min (Optional) max (One)
      compute {
        intent {
          goal: viv.geo.ResolveAddressByPlaceID
          value: $expr(namedPoint.placeID)
        }
      }
    }
  }
  output (geo.Address)
}
...