пользовательская маркировка с помощью nltk

Я пытаюсь создать небольшой английский язык для описания задач. Основная идея состоит в том, чтобы разбить высказывание на глаголы и существительные-фразы, к которым должны применяться эти глаголы. Я' m работает с nltk, но не получает ожидаемых результатов, например:

>>> nltk.pos_tag(nltk.word_tokenize("select the files and copy to harddrive'"))
[('select', 'NN'), ('the', 'DT'), ('files', 'NNS'), ('and', 'CC'), ('copy', 'VB'), ('to', 'TO'), ("harddrive'", 'NNP')]
>>> nltk.pos_tag(nltk.word_tokenize("move the files to harddrive'"))
[('move', 'NN'), ('the', 'DT'), ('files', 'NNS'), ('to', 'TO'), ("harddrive'", 'NNP')]
>>> nltk.pos_tag(nltk.word_tokenize("copy the files to harddrive'"))
[('copy', 'NN'), ('the', 'DT'), ('files', 'NNS'), ('to', 'TO'), ("harddrive'", 'NNP')]

В каждом случае не удалось понять, что первое слово (выбрать, переместить и скопировать) было задумано как глагол. Я знаю, что могу создавать собственные теги и грамматики, чтобы обойти это, но в то же время я не решаюсь изобретать велосипед, когда многие из этих вещей не подходят для моей компетенции. Я особенно предпочел бы решение, в котором можно было бы обрабатывать и неанглийские языки.

Так или иначе, мой вопрос: Есть ли лучший теггер для этого типа грамматики? Есть ли способ придать вес существующему теггеру, чтобы использовать форму глагола чаще, чем форму существительного? Есть ли способ обучить теггера? Есть ли вообще лучший способ?

27
задан SpliFF 7 May 2011 в 05:36
поделиться

2 ответа

Ответ Джейкоба точен. Однако, чтобы расширить его, вы можете обнаружить, что вам нужно больше, чем просто униграмма.

Например, рассмотрим три предложения:

select the files
use the select function on the sockets
the select was good

Здесь слово «выбор» используется как глагол, прилагательное и существительное соответственно. Unigram Tagger не сможет моделировать это. Даже биграмный тегер не может справиться с этим, потому что два случая имеют одно и то же предшествующее слово (то есть "the"). Вам понадобится триггерный тегер, чтобы правильно обрабатывать этот случай. Примечание

22
ответ дан 28 November 2019 в 04:50
поделиться

См. Ответ Джейкоба.

В более поздних версиях (по крайней мере, nltk 3.2) nltk.tag._POS_TAGGER не существует. Тегеры по умолчанию обычно загружаются в каталог nltk_data / taggers / , например :

>>> import nltk
>>> nltk.download('maxent_treebank_pos_tagger') 

. Использование выглядит следующим образом.

>>> import nltk.tag, nltk.data
>>> tagger_path = '/path/to/nltk_data/taggers/maxent_treebank_pos_tagger/english.pickle'
>>> default_tagger = nltk.data.load(tagger_path)
>>> model = {'select': 'VB'}
>>> tagger = nltk.tag.UnigramTagger(model=model, backoff=default_tagger)

См. Также: Как сделать POS-тегирование с помощью PL-тега NLTK в Python .

6
ответ дан 28 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: