2016-12-09 5 views
0

Im очень новый для nltk.POS для языков, отличных от английского

Это позволяет мне пометить предложение в соответствии с его частями речи. Но какие шаги при этом делают для других языков?

import nltk 
sentence = "I'm not sure!" 
tokens = nltk.word_tokenize(sentence) 
tagged = nltk.pos_tag(tokens) 

UPDATE

Я заинтересован в начиная с испанским языком.

UPDATE 2

import nltk 
from nltk.tokenize import word_tokenize 

training_set = [[(w.lower(),t) for w,t in s] for s in nltk.corpus.conll2002.tagged_sents('esp.train')] 

unigram_tagger = nltk.UnigramTagger(training_set) 
bigram_tagger = nltk.BigramTagger(train_set, backoff=unigram_tagger) 

tokens = [token.lower() for token in word_tokenize("El Congreso no podrá hacer ninguna ley con respecto al establecimiento de la religión, ni prohibiendo la libre práctica de la misma; ni limitando la libertad de expresión, ni de prensa; ni el derecho a la asamblea pacífica de las personas, ni de solicitar al gobierno una compensación de agravios.")] 

Производство:

[('el', 'DA'), ('congreso', 'NC'), ('no', 'RN'), ('podrá', 'VMI'), ('hacer', 'VMN'), ('ninguna', 'DI'), ('ley', 'NC'), ('con', 'SP'), ('respecto', 'NC'), ('al', 'SP'), ('establecimiento', 'NC'), ('de', 'SP'), ('la', 'DA'), ('religión', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('prohibiendo', None), ('la', 'DA'), ('libre', 'AQ'), ('práctica', 'NC'), ('de', 'SP'), ('la', 'DA'), ('misma', 'DI'), (';', 'Fx'), ('ni', 'CC'), ('limitando', None), ('la', 'DA'), ('libertad', 'NC'), ('de', 'SP'), ('expresión', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('de', 'SP'), ('prensa', 'NC'), (';', 'Fx'), ('ni', 'CC'), ('el', 'DA'), ('derecho', 'NC'), ('a', 'SP'), ('la', 'DA'), ('asamblea', 'NC'), ('pacífica', 'AQ'), ('de', 'SP'), ('las', 'DA'), ('personas', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('de', 'SP'), ('solicitar', 'VMN'), ('al', 'SP'), ('gobierno', 'NC'), ('una', 'DI'), ('compensación', 'NC'), ('de', 'SP'), ('agravios', None), ('.', 'Fp')] 
+0

Ваш другой язык по-прежнему очень похож на английский на меня (но я не уверен). – lenz

+0

Быть серьезным: это действительно зависит от языка и задачи. Для токенизации NLTK поддерживает несколько языков из коробки - просто добавьте язык в качестве второго аргумента в 'word_tokenize()'. Для тегов POS вам необходимо создать объект тегатора с помощью модели, специфичной для языка (которую вы, возможно, даже должны получить с стороннего сайта); нет единого ответа на этот вопрос, вам нужно указать соответствующие языки. – lenz

+0

@ lenz Я обновил свой вопрос в соответствии с запросом. – Baz

ответ

2

AFAIK в NLTK не приходит с готовым к использованию Taggers или парсеры для других языков, кроме английского. Существуют такие инструменты за пределами nltk, которые вы можете скачать и использовать.

nltk предоставляет инструменты для обучения вашего собственного теггера для испанского языка, используя один из испанских тегов в качестве учебного материала. Например, вы можете следовать инструкциям nltk для building a tagger, но в качестве данных обучения используйте conll2002.tagged_sents("esp.train"). Это всего около 250 тысяч слов, поэтому вы не получите отличную производительность, но вам нужно начать. (И, конечно же, вы можете найти более крупный меченый корпус для обучения.)

+0

Если теггер должен обучаться по-разному, если я хочу отметить предложения или если я хочу пометить слова самостоятельно. Например, когда я подготовил теггер, сможет ли он установить, что «hacia» является предлогом без контекста предложения? – Baz

+0

Я сделал все правильно в соответствии с моим вторым обновлением в моем первоначальном вопросе? – Baz

+0

Неплохо, но ваше решение не может помечать неизвестные слова (для чего используется тег по умолчанию). Проверьте свой теггер, вызвав его метод 'evaluation()' на 'conll2002.tagged_sents (" esp.testa ")'. Кроме того, в наборе инструментов nltk есть более сложные теггеры, чем теггер ngram (например, «HiddenMarkovModelTagger», «PerceptronTagger»), но они занимают гораздо больше времени, чтобы тренироваться. – alexis

 Смежные вопросы

  • Нет связанных вопросов^_^