brown-uk / nlp_uk

This is a project to demonstrate NLP API from LanguageTool for Ukrainian language.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ошибка обработки UTF-8 файлов

OlexaD opened this issue · comments

Здравствуйте. Попытался запустить Ваш токенизатор через Python "обвертку", но получил следующую ошибку:

Exception in thread Thread-16:
Traceback (most recent call last):
File "C:\Users\olexi\Anaconda3\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "C:\Users\olexi\Anaconda3\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:/Users/olexi/OneDrive/NLP/nlp_uk/nlp_uk-master/src/main/groovy/org/nlp_uk/tools/lemmatize_text_mine.py", line 27, in print_output
print("output: ", p.stdout.read().decode(ENCODING))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 0: invalid continuation byte

Можете подсказать, в чем проблема? По идее, ошибка кодировки. Но я записывал входной в разных вариантах UTF-8 и результат один и тот же.
Попробовал подставить текстовый файл в кодировке Windows и ANSI, соответственно изменив значение переменной ENCODING в Вашем скрипте. Ошибка не выдает, но результат работы токенизатора вообще глючный. Типа такого:

output: 17 173 06 01.01.2019

27.06.2006
27.08.2007

20 2006

17 173 06

3944-?_? 01.09.2005
?????_1
17 173 06

т.е. опять таки проблемы с кодировкой. Я не специалист в Groovy, поэтому сам разобраться не могу. Groovy не воспринимает никаких кодировок кроме UTF-8? Или проблема в чем то другом?

Заранее благодарю за помощь.

Вітання, я щойно спробував пітонівську обгортку під Linux - все працює.
З віндою є проблема, там в JDK типове кодування не Unicode, тож в багатьох випадках треба задавати опції. Зараз спробую й відпишу.

Большое спасибо! Буду с нетерпением ждать :)

Я закинув дві зміни:

  1. для запуску groovy встановлювати змінну оточення JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
  2. на вінді викликати groovy.bat замість groovy

К сожалению, результат тот же (( Выдает ту же ошибку, что и раньше.

Интересно получается :) Как я писал выше, я запускал Ваш токенизатор и получал ошибку. Я из Вашего файла tag_txt.py скопировал изменения в файл tokenize_txt.py, и как я уже писал ошибка осталась. Решил попробовать запустить файл tag_txt.py и все Ок! :) Все работает. А почему тогда не работает токенизатор?

И еще один вопрос :) Скажите пожалуйста, что значит параметр -q в командной строке скрипта? В документации он не описан.

Гмм, я щось не побачив, що ви токенізатор використовуєте, тож справляв лише tag_text.py :)
Зараз спробую tokenize_text.py
-q це --quiet щоб зайві повідомлення у вихід не лізли (там опція -h має пояснювати прапорці)

Закинув виправлення в tokenize_text.py, має працювати

Дуже Вам дякую! Все працює! І лематизатор теж працює :) Я внес до скрипта зміни, які Ви додали до tag_txt.py. Ще раз щиро дякую!
Але є питання стосовно лематизатора. Мені раніше не доводилось працювати з українськими текстами. І виникли проблеми з лексемами, які мають декілька лем. Я побачив, що можна запускати скрипт з параметром -f і залишати тільки першу лему з декількох можливих. Але в більшості випадків, так вийшло, що вірні леми в текстах, які я опрацьовуваю, як раз не перші в списку :) Порадьте, будь ласка, які є варіанти вирішення цієї проблеми? Мені це потрібно для навчання нейронної мережі для розпізнвання іменованих сутностей.

Це насправді складно. Щоб отримати правильну лему потрібно знімати омонімію. Тут варіанти два: або правилами, що величезна кропітка робота (у нас наразі є близько 600 правил зняття омонімії, але реально потрібно тисячі), або треба статистичні методи. Щоб знімати статистикою потрібно мати моделі, а щоб побудувати моделі потрібно мати високоякісний розмічений український корпус зі знятою омонімією. Ми зараз працюємо над таким (півмільйонним) корпусом, але це ще займе деякий час.
Я додав опцію -f на прохання для одного спецвипадку, але загалом я б не радив нею користуватися.

Дуже дякую за змістовну відповідь.
Я дізнався про Вашу бібліотеку з сайту проекту lang-uk. Вони вказали, що проводили токенізвцію та лематизацію за допомогою Вашою бібліотеки. Я переглянув результати їх роботи, які вони виклали на сайті, так ось вони якось вирішили цю проблему. У всіх лематизованих текстах в цьому проекті всі леми визначені однозначно, тобто вони якось зняли омонімію? Може, Ви знаєти як вони це робили? Я не думаю, що такий обсяг текстів був оброблений у ручну.
Дякую.

Щиро дякую, пане Андрію! Ви дуже мені допомогли!

Радий, що допоміг. :)