Git Product home page Git Product logo

nlp_uk's Introduction

LanguageTool API NLP UK

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

Це — проект демонстрації API для обробляння природної мови в LanguageTool для української мови.

Використовує мову groovy, засоби для токенізації та тегування також мають скрипти-обгортки для python3 та java. Рекомендована версія groovy - 4.0.10 або новіше.

Для запуску скриптів потрібно встановити мову groovy

УВАГА: при першому запуску потрібно мережеве з'єднання, щоб скрипти могли звантажити потрібні модулі

ПРИМІТКА: скрипт gradle потрібен лише для розробників

Для невеликих текстів приклад розбиття та тегування також можна переглянути на сторінці аналізу LanguageTool

Основні скрити аналізу текстів знаходяться в каталозі src/main/groovy/ua/net/nlp/tools

Використання

Утиліта розбиття тексту: TokenizeText.groovy

Утиліта аналізу тексту: TagText.groovy

докладніше про утиліти аналізу

Допоміжні утиліти:

докладніше про допоміжні утиліти

Використання (найпростіший шлях)

Встановити JDK 17 (https://www.oracle.com/java/technologies/downloads/#jdk17-windows)

Чистити файл

UNIX:
./gradlew -q cleanText -Pargs="-i <мій-файл.txt>"
Windows:
gradlew.bat -q cleanText -Pargs="-i <мій-файл.txt>"

Буде створено файл <мій-файл.good.txt> в якому виправлено знайдені проблеми зі словами.

Тегувати файл

UNIX:
./gradlew -q tagText -Pargs="-i <мій-файл.txt> -su"
Windows:
gradlew.bat -q tagText -Pargs="-i <мій-файл.txt> -su"

Буде створено файл <мій-файл.tagged.xml>. Прапорець "-su" генерує файл невідомих слів.

Використовувані програмні засоби

Для аналізу текстів використовується український модуль LanguageTool

Для тегування лексем використовується словник української мови з проекту ВЕСУМ

Ліцензія

Проект LanguageTool API NLP UK розповсюджується за умов ліцензії GPL версії 3

Copyright (c) 2022 Андрій Рисін ([email protected])

nlp_uk's People

Contributors

arysin avatar dchaplinsky avatar int-ua avatar strixaluco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nlp_uk's Issues

exception in EvaluateText.groovy: No signature of method: org.languagetool.MultiThreadedJLanguageTool.performCheck()

Привіт, дякую за граматичний перевірник!

Нажаль зіткнувся з такою проблємою женучи EvaluateText.groovy:

checking ВТРАТА_.txt, words: 10809, size: 62963
groovy.lang.MissingMethodException: No signature of method: 
org.languagetool.MultiThreadedJLanguageTool.performCheck() 
is applicable for argument types: (ArrayList, ArrayList, ArrayList, 
    org.languagetool.JLanguageTool$ParagraphHandling...) values: 

[[<S> Ніхто[ніхто/noun:anim:m:v_naz:&pron:neg] не[не/part] піде[піти/verb:perf:futr:s:3],
[,/null] ніхто[ніхто/noun:anim:m:v_naz:&pron:neg] не[не/part] піде[піти/verb:perf:futr:s:3],
[,/null] ніхто[ніхто/noun:anim:m:v_naz:&pron:neg] не[не/part] піде[піти/verb:perf:futr:s:3],
[,/null] ніхто[ніхто/noun:anim:m:v_naz:&pron:neg] не[не/part] піде[піти/verb:perf:futr:s:3] Ну[ну/intj,ну/part],
[,/null] а[а/conj:coord] десь[десь/adv:&pron:ind,десь/part] був[бути/verb:imperf:past:m] у[у/prep] Вароші[Вароші/null],
[,/null] не[не/part] позвонив[позвонив/null] існи[існи/null] Я[я/noun:anim:s:v_naz:&pron:pers:1] думав[думати/verb:imperf:past:m] на[на/prep] фотках[фотка/noun:inanim:p:v_mis:coll],
[,/null] що[що/conj:subord,що/noun:inanim:n:v_naz:&pron:int:rel,що/noun:inanim:n:v_zna:&pron:int:rel] ти[ти/noun:anim:s:v_kly:&pron:pers:2,ти/noun:anim:s:v_naz:&pron:pers:2] маєш[мати/verb:imperf:pres:s:2] читати[читати/verb:imperf:inf] Читали[читати/verb:imperf:past:p] ми[ми/noun:anim:p:v_naz:&pron:pers:1] взагалі[взагалі/adv:&insert],
[,/null] в[в/prep] саді[сад/noun:inanim:m:v_mis],
[,/null] коли[коли/adv:&pron:int:rel,коли/conj:subord] на[на/prep] телефоні[телефон/noun:inanim:m:v_mis] ми[ми/noun:anim:p:v_naz:&pron:pers:1] зустрічали[зустрічати/verb:imperf:past:p] Здоровлічко[Здоровлічко/null] Всі[всі/noun:anim:p:v_naz:&pron:gen,весь/adj:p:v_naz:&pron:gen,весь/adj:p:v_zna:rinanim:&pron:gen],
[,/null] а[а/conj:coord] я[я/noun:anim:s:v_naz:&pron:pers:1] воно[воно/noun:unanim:n:v_naz:&pron:pers:3] по-доброму[по-доброму/adv],
[,/null] здоровлічко[здоровлічко/null] І[і/conj:coord,і/part] так[так/adv:&pron:dem,так/conj:coord,так/conj:subord,так/part] далі[далі/adv:compc:&predic,даль/noun:inanim:f:v_dav,даль/noun:inanim:f:v_mis,даль/noun:inanim:f:v_rod,даль/noun:inanim:p:v_naz,даль/noun:inanim:p:v_zna] Сьогодні[сьогодні/adv] ми[ми/noun:anim:p:v_naz:&pron:pers:1] 
в[в/prep] Вершаві[Вершаві/null] Прийшов[прийти/verb:perf:past:m] 
маленький[маленький/adj:m:v_kly,маленький/adj:m:v_naz,маленький/adj:m:v_zna:rinanim] у[у/prep] 
гості[гостя/noun:anim:f:v_dav,гостя/noun:anim:f:v_mis,гостя/noun:anim:f:v_rod,гостя/noun:anim:p:v_kly,гостя/noun:anim:p:v_naz,гостя/noun:anim:p:v_zna:rare,гість/noun:anim:m:v_mis,гість/noun:anim:p:v_kly,гість/noun:anim:p:v_naz,гість/noun:anim:p:v_zna:rare],
[,/null] цьому[це/noun:inanim:n:v_dav:&pron:dem,це/noun:inanim:n:v_mis:&pron:dem,цей/adj:m:v_dav:&pron:dem,цей/adj:m:v_mis:&pron:dem,цей/adj:n:v_dav:&pron:dem,цей/adj:n:v_mis:&pron:dem] 
цімборові[цімбор/noun:anim:m:v_dav:arch,цімбор/noun:anim:m:v_mis:arch] Як[як/adv:&pron:int:rel,як/conj:subord,як/part] ти[ти/noun:anim:s:v_kly:&pron:pers:2,ти/noun:anim:s:v_naz:&pron:pers:2] звати[звати/verb:imperf:inf]?[</S>] , ...],
 ...]

Відсутня документація для tools/Inflect

Зокрема, незрозуміло де документація за тегами, які вказувати після слова.

Часто віддає пустий масив. Наприклад, якщо замінити "місто" на "рада".

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

Здравствуйте. Попытался запустить Ваш токенизатор через 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? Или проблема в чем то другом?

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

Модуль Lesia

Як буде відбуватися динамічне тегування, коли треба застосувати кілька правил?
Напр., "візіта" - тут потрібна орфографічна заміна і --> и + є нестандартне закінчення родового. Як це буде нормалізувати одночасно?
У список слів з закінченням -а в родовому треба писати "візіта" (як в тексті)? Чи як?

Не вдаєтся запустити утиліту "CleanText.groovy"

Доброго дня,
CleanText.groovy видає помилки при спробі запуску.

Версії

Groovy Version: 2.4.16 JVM: 11.0.8 Vendor: Debian OS: Linux

Лог запуску

root@groovy-tools:/home/oleksandrbushkovskyi/nlp_uk/src/main/groovy/org/nlp_uk/other# groovy CleanText.groovy suprun.doctor/
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/usr/share/groovy/lib/groovy-2.4.16.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/home/oleksandrbushkovskyi/nlp_uk/src/main/groovy/org/nlp_uk/other/CleanText.groovy: 15: unable to resolve class groovy.cli.commons.CliBuilder
 @ line 15, column 1.
   @Grab(group='org.languagetool', module='language-ru', version='5.1')
   ^

/home/oleksandrbushkovskyi/nlp_uk/src/main/groovy/org/nlp_uk/other/CleanText.groovy: 86: unable to resolve class UkrainianTagger
 @ line 86, column 20.
       def tagger = { new UkrainianTagger() }()
                      ^

2 errors

Новий датасет

Привіт я в рамках своєї роботи перевів розмічений датасет imdb на українську мову. Тепер шукаю місце де покласти цей датасет. Мені здається, що ваш проект це гарне місце.
Опис датасету
28 000 файлів кожне до 1000 символів
14 000 позитивних текстів і 14 000 негативніх
Файли були отримані шляхом машинного перекладання текстів з англійської. Тексти перекладені частково через брак грошей але цього датасету достатьно для перевірки деяких моделей і це краще ніж нічого. Якщо вам цікаво то напишіть
Якщо ви знаєте місце куди можно покласти датасет то підскажіть

Регресія у TokenizeText

Схоже з'явилася у коміті 8b8ca17, версія Груві 4.0.7

➜  nlp_uk git:(master) git bisect good f865b0d
You need to start by "git bisect start"

Do you want me to do it for you [Y/n]? 
➜  nlp_uk git:(master) git bisect bad master  
Bisecting: 1 revision left to test after this (roughly 1 step)
[d3c5f1a8223355656de4aeb22e61e10d9acdb36b] update LT to 6.0
➜  nlp_uk git:(d3c5f1a) groovy -cp ./src/main/groovy/ ./src/main/groovy/ua/net/nlp/tools/TokenizeText.groovy -w -u -i /tank/ubertext/raw_val.txt

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
file:/home/proger/nlp_uk/src/main/groovy/ua/net/nlp/tools/TextUtils.groovy: 15: unable to resolve class ua.net.nlp.tools.tag.TagTextCore.TagResult
 @ line 15, column 1.
   import ua.net.nlp.tools.tag.TagTextCore.TagResult
   ^

1 error

➜  nlp_uk git:(d3c5f1a) git bisect bad
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[8b8ca179c52183280d88689e9578b8eefe0efb96] code cleanup
➜  nlp_uk git:(8b8ca17) groovy -cp ./src/main/groovy/ ./src/main/groovy/ua/net/nlp/tools/TokenizeText.groovy -w -u -i /tank/ubertext/raw_val.txt

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
file:/home/proger/nlp_uk/src/main/groovy/ua/net/nlp/tools/TextUtils.groovy: 15: unable to resolve class ua.net.nlp.tools.tag.TagTextCore.TagResult
 @ line 15, column 1.
   import ua.net.nlp.tools.tag.TagTextCore.TagResult
   ^

1 error

➜  nlp_uk git:(8b8ca17) git bisect bad                                                                                                          
8b8ca179c52183280d88689e9578b8eefe0efb96 is the first bad commit
commit 8b8ca179c52183280d88689e9578b8eefe0efb96
Author: arysin <arysin@fedora>
Date:   Thu Dec 29 12:20:46 2022 -0500

    code cleanup

 src/main/groovy/ua/net/nlp/tools/TextUtils.groovy | 81 +++++++++++++----------
 1 file changed, 47 insertions(+), 34 deletions(-)

issues with java while attempting TagText

Was trying TagText.groovy and got:

Caught: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.io.File(Boolean) groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.io.File(Boolean) at org.nlp_uk.tools.TextUtils.processByParagraph(Script1.groovy:21) at org.nlp_uk.tools.TextUtils$processByParagraph.call(Unknown Source) at org.nlp_uk.tools.TagText.process(TagText.groovy:398) at org.nlp_uk.tools.TagText$process$1.call(Unknown Source) at org.nlp_uk.tools.TagText.main(TagText.groovy:487) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

File I was trying to analyse -- example.txt

I'm on Ubuntu 18.04.5 LTS with java version "13.0.2" 2020-01-14

Error on project building

Error:(32, 0) Could not get unknown property 'ltDir' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

In all .gradle file/git repository any comments about this variable

Не працює параметр --firstLemmaOnly у лематизаторі

Добрий день, пане Андрію. Я перепрошую, що знов турбую Вас :) але у мене знов виникла проблема, цього разу з лематизатором. Не працює параметр -f або --firstLemmaOnly. Я пробував обидва варіанти. Все одно, у вихідному файлі .lemmatized присутні всі варіанти для омонімів. Дякую за допомогу.

Лематизація/стемінг слів, яких немає у словнику

Доброго дня,
Шукав імплементацію стемера українською і натрапив на цей проект. Цікавить як буде поводитись алгоритм лематизації, якщо задати слово, якого немає у словнику? Залишить його без змін чи все ж якось обробить? Не знайшов відповідь на це у описі проекту.
Ну і чи планується імплементувати таку функціональність у майбутньому?

EvaluateText: хибні помилки "Не узгоджено іменник з дієсловом"

Перевірник видає помилку в деяких фразах [іменник] [дієслово-неозначене]

У нього план забігти в супермаркет до комендантської
В мене є бажання подарувати їй квіти
Він має натхнення написати пісню
У всіх там нужда вийти на вихідних
У вас програма поїсти за гроші
Message:  Не узгоджено іменник з дієсловом: "нужда" (ж.р.) і "вийти" (інф.)
Sentence: в мене є бажання подар…
Position: ^

Message:  Не узгоджено іменник з дієсловом: "програма" (ж.р.) і "поїсти" (інф.)
Sentence: в мене є бажання подар…
Position: ^

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.