NLTK Маркировка испанских слов с использованием корпуса

Я пытаюсь узнать, как отмечать испанские слова, используя NLTK.

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

Я загрузил cess_esp corpus. Есть ли способ nltk.pos_tag в nltk.pos_tag . Я посмотрел документацию pos_tag и не видел ничего, что могло бы мне предложить. Я чувствую, что мне не хватает некоторых ключевых концепций. Должен ли я вручную пометить слова в тексте снова в cess_esp corpus? (вручную я подразумеваю токенизацию моего отчёта и запуск его снова на корпус). Или я полностью не знаком. спасибо

3 Solutions collect form web for “NLTK Маркировка испанских слов с использованием корпуса”

Сначала вам нужно прочитать помеченное предложение из корпуса. NLTK обеспечивает приятный интерфейс, чтобы не беспокоиться о разных форматах из разных корпусов; вы можете просто импортировать корпус, используя функции объекта corpus для доступа к данным. См. http://nltk.googlecode.com/svn/trunk/nltk_data/index.xml .

Затем вы должны выбрать свой выбор тегатора и тренировать теггер . Есть более интересные варианты, но вы можете начать с N-граммовых тегов.

Затем вы можете использовать теггер, чтобы пометить предложение, которое вы хотите. Вот пример кода:

 from nltk.corpus import cess_esp as cess from nltk import UnigramTagger as ut from nltk import BigramTagger as bt # Read the corpus into a list, # each entry in the list is one sentence. cess_sents = cess.tagged_sents() # Train the unigram tagger uni_tag = ut(cess_sents) sentence = "Hola , esta foo bar ." # Tagger reads a list of tokens. uni_tag.tag(sentence.split(" ")) # Split corpus into training and testing set. train = int(len(cess_sents)*90/100) # 90% # Train a bigram tagger with only training data. bi_tag = bt(cess_sents[:train]) # Evaluates on testing data remaining 10% bi_tag.evaluate(cess_sents[train+1:]) # Using the tagger. bi_tag.tag(sentence.split(" ")) 

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

Посмотрите раздел « Хранение тегов » в http://nltk.googlecode.com/svn/trunk/doc/book/ch05.html

Учитывая учебное пособие в предыдущем ответе, вот более объектно-ориентированный подход от tagger спагетти: https://github.com/alvations/spaghetti-tagger

 #-*- coding: utf8 -*- from nltk import UnigramTagger as ut from nltk import BigramTagger as bt from cPickle import dump,load def loadtagger(taggerfilename): infile = open(taggerfilename,'rb') tagger = load(infile); infile.close() return tagger def traintag(corpusname, corpus): # Function to save tagger. def savetagger(tagfilename,tagger): outfile = open(tagfilename, 'wb') dump(tagger,outfile,-1); outfile.close() return # Training UnigramTagger. uni_tag = ut(corpus) savetagger(corpusname+'_unigram.tagger',uni_tag) # Training BigramTagger. bi_tag = bt(corpus) savetagger(corpusname+'_bigram.tagger',bi_tag) print "Tagger trained with",corpusname,"using" +\ "UnigramTagger and BigramTagger." return # Function to unchunk corpus. def unchunk(corpus): nomwe_corpus = [] for i in corpus: nomwe = " ".join([j[0].replace("_"," ") for j in i]) nomwe_corpus.append(nomwe.split()) return nomwe_corpus class cesstag(): def __init__(self,mwe=True): self.mwe = mwe # Train tagger if it's used for the first time. try: loadtagger('cess_unigram.tagger').tag(['estoy']) loadtagger('cess_bigram.tagger').tag(['estoy']) except IOError: print "*** First-time use of cess tagger ***" print "Training tagger ..." from nltk.corpus import cess_esp as cess cess_sents = cess.tagged_sents() traintag('cess',cess_sents) # Trains the tagger with no MWE. cess_nomwe = unchunk(cess.tagged_sents()) tagged_cess_nomwe = batch_pos_tag(cess_nomwe) traintag('cess_nomwe',tagged_cess_nomwe) print # Load tagger. if self.mwe == True: self.uni = loadtagger('cess_unigram.tagger') self.bi = loadtagger('cess_bigram.tagger') elif self.mwe == False: self.uni = loadtagger('cess_nomwe_unigram.tagger') self.bi = loadtagger('cess_nomwe_bigram.tagger') def pos_tag(tokens, mmwe=True): tagger = cesstag(mmwe) return tagger.uni.tag(tokens) def batch_pos_tag(sentences, mmwe=True): tagger = cesstag(mmwe) return tagger.uni.batch_tag(sentences) tagger = cesstag() print tagger.uni.tag('Mi colega me ayuda a programar cosas .'.split()) 

Следующий сценарий дает вам быстрый подход к получению «мешка слов» в испанских предложениях. Обратите внимание: если вы хотите сделать это правильно, вы должны подделать предложения перед тегом, так что «religiosas». должны быть разделены в двух символических символах токенов »,«.

 #-*- coding: utf8 -*- # about the tagger: http://nlp.stanford.edu/software/tagger.shtml # about the tagset: nlp.lsi.upc.edu/freeling/doc/tagsets/tagset-es.html import nltk from nltk.tag.stanford import POSTagger spanish_postagger = POSTagger('models/spanish.tagger', 'stanford-postagger.jar', encoding='utf8') sentences = ['El copal se usa principalmente para sahumar en distintas ocasiones como lo son las fiestas religiosas.','Las flores, hojas y frutos se usan para aliviar la tos y también se emplea como sedante.'] for sent in sentences: words = sent.split() tagged_words = spanish_postagger.tag(words) nouns = [] for (word, tag) in tagged_words: print(word+' '+tag).encode('utf8') if isNoun(tag): nouns.append(word) print(nouns) 

дает:

 El da0000 copal nc0s000 se p0000000 usa vmip000 principalmente rg para sp000 sahumar vmn0000 en sp000 distintas di0000 ocasiones nc0p000 como cs lo pp000000 son vsip000 las da0000 fiestas nc0p000 religiosas. np00000 [u'copal', u'ocasiones', u'fiestas', u'religiosas.'] Las da0000 flores, np00000 hojas nc0p000 y cc frutos nc0p000 se p0000000 usan vmip000 para sp000 aliviar vmn0000 la da0000 tos nc0s000 y cc también rg se p0000000 emplea vmip000 como cs sedante. nc0s000 [u'flores,', u'hojas', u'frutos', u'tos', u'sedante.'] 
  • NLTK с ошибкой импорта колбы
  • Поиск главы существительного в NLTK и stanford parse в соответствии с правилами поиска главы NP
  • проблема при установке практически любой библиотеки
  • Английская грамматика для разбора в NLTK
  • Ошибка поиска NLTK
  • Поиск символов Юникода в Python
  • Как получить набор правил грамматики из Penn Treebank с помощью python & NLTK?
  • фиксировать слова с пробелами, используя словарь, искать в python?
  • Количество глаголов, существительных и других частей речи с помощью NLTK python
  • смайлики регулярных выражений
  • Ресурс «corpora / wordnet» не найден на Heroku
  • Python - лучший язык программирования в мире.