Как используется морфа-лемматизатор?

Я собираюсь использовать SQL-версию WordNet, и у меня проблема с поиском способа лемматизировать слова, чтобы найти их в БД; Я не могу использовать сам лемматизатор WordNet, потому что он применяется к текстовой версии WorldNet.

Я читал здесь, что есть хороший лемматизатор, который возвращает настоящие слова - и это именно то, что мне нужно. Я скачал предложенный лемматизатор "Морфа", но не понимаю, как им пользоваться.

  • Нужна ли компиляция?
  • Какой файл мне использовать?
  • Как я могу использовать его в приложении, которое обращается к базе данных WordNet SQL?

person Community    schedule 18.06.2009    source источник
comment
+1 за то, что научил меня новому слову (и концепции)   -  person Colin Pickard    schedule 18.06.2009


Ответы (4)


UW загрузил морфа-стеммер в Maven central. Есть обертка, которая значительно упрощает использование. Вам просто нужно добавить его как зависимость и использовать класс edu.washington.cs.knowitall.morpha.MorphaStemmer. Экземпляры являются потокобезопасными (исходный JFlex без необходимости имел поля классов для локальных переменных). Создайте экземпляр класса и запустите morpha и слово, которое хотите остановить.

new MorphaStemmer().morpha("climbed") // goes to "climb"
person schmmd    schedule 23.05.2012

Статья Миннена и др. о Морфе может быть хорошим началом для понимания того, как работает лемматизатор. Прошло некоторое время с тех пор, как у меня был опыт работы с ним, но я почти уверен, что он работает как стандартный двоичный файл.

В зависимости от производительности вам может потребоваться заранее пометить свои условия POS, но это примерно та же проблема, что и у вас при запросе WordNet, поэтому начинает звучать так, как будто вам нужно подняться на этот холм в любом случае.

Вы бы в основном использовали корневую форму при запросе базы данных Wordnet, но если вы используете ее только для этого, я настоятельно рекомендую вам попробовать стеммер Morphy, который был специально разработан для Wordnet и будет надежно соответствовать корневым формам. перечисленные в нем.

person Robert Elwell    schedule 27.07.2009

Вы также можете попробовать TTT2, конвейер NLP, который токенизирует, лемматизирует и т. Д. Все в одном или по отдельности. Прост в использовании и хорошо документирован: http://www.ltg.ed.ac.uk/software/lt-ttt2.

person Don Tuggener    schedule 22.08.2009

Вы, должно быть, уже нашли свой ответ, но для всех, кто может наткнуться на этот пост о Морфе:

вы можете загрузить Morpha прямо с: http://www.informatics.susx.ac.uk/research/groups/nlp/carroll/morph.html

Но для этого сначала необходимо установить, распаковать и скомпилировать flex (я использую командную строку терминала Linux ниже):

tar -xzf flex-for-morph.tar.gz

Затем измените текущий рабочий каталог на flex и сделайте его:

./configure
make

Если команда make выдает следующую ошибку:

make: yacc: Команда не найдена Makefile: 105: рецепт для цели 'parse.c' не удалось сделать: *** [parse.c] Ошибка 127

это означает, что он не может получить yacc; поэтому вам нужно установить bison через командную строку:

sudo apt-get install bison

Теперь снова запустите команду make, она должна дать вам что-то похожее на это в последней строке:

gcc -g -O -o flex  ccl.o dfa.o ecs.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o  libfl.a 

Теперь вы можете скомпилировать Morpha (которую вы скачали по ссылке выше):

../flex-2.5.4/flex -i -Cfe -8 -omorpha.yy.c morpha.lex
gcc -o morpha morpha.yy.c

Морфа берет в качестве входных данных файлы, уже помеченные POS-тегами. Чтобы лемматизировать один файл, используйте:

./morpha -t  < ~/path to your file/yourfile.tag

указанная выше опция -t печатает теги POS также вместе с лемматизированными формами; чтобы использовать параметр, чувствительный к регистру, используйте -c, а для обоих параметров вместе используйте -ct

Надеюсь, поможет!

person Maryam Nasseri    schedule 22.01.2019