Аргумент Duckling, int() должен быть строкой, байтоподобным объектом или числом, а не ‘java.lang.Строка»,

#java #python #duckling

#java #python #duckling

Вопрос:

Я хочу использовать duckling для извлечения временных объектов из любой строки.

Я пытаюсь использовать базовый код для использования duckling.

 from duckling import DucklingWrapper
d = DucklingWrapper()
print(d.parse_time(u'Let's meet at 11:45am'))
  

Для этого я получаю следующую ошибку.
аргумент int() должен быть строкой, байтоподобным объектом или числом, а не ‘java.lang.Строка»

может ли кто-нибудь, пожалуйста, помочь мне с этим?

Ответ №1:

Короткий ответ: принудительно установите версию jpype ниже 0.8. т.е. pip install Jpype1==0.7.5

Более длинный ответ: это связано с одним из зависимостей Duckling JPype . Если вы углубитесь в код, вы увидите, что при запуске JVM с использованием JPype необходимо передать аргумент «convertStrings». До версии 0.8 для этого аргумента по умолчанию было установлено значение «true», но после этого он переключался на «false». Это должно быть легко исправить в Duckling, если вы можете изменить код пакета. Если нет, то понижение вашей версии Jpype также будет работать.

Ссылка: https://jpype.readthedocs.io/en/latest/api.html

Комментарии:

1. это решает проблему, но затем вызывает TypeError: can't apply this __setattr__ to _jpype._JClass object

Ответ №2:

Это проблема несовместимости между duckling и Jpype .

Это сработало для меня:

pip install --force-reinstall JPype1==0.6.3